Unity检测目标点是否在扇形攻击范围内

原创 2015年07月09日 14:35:55

在游戏设计中,有的技能的攻击范围是一个扇形,判断场景中的怪物是否在扇形范围内,我们可以理解具体思路:

首先,判断该目标点与技能释放者的距离是否小于扇形的半径;

其次目标点与技能释放者面对的方向向量夹角是否小于扇形角度的二分之一;


如上图所示,1为技能释放者,2为目标点

代码如下:

using UnityEngine;
using System.Collections;


public class TestTrans : MonoBehaviour
{
    public Transform Target;
    private float SkillDistance = 5;//扇形距离
    private float SkillJiaodu = 60;//扇形的角度
 
    void LateUpdate()
    {
        float distance = Vector3.Distance(transform.position, Target.position);//距离
        Vector3 norVec = transform.rotation * Vector3.forward * 5;//此处*5只是为了画线更清楚,可以不要
        Vector3 temVec = Target.position - transform.position;
        Debug.DrawLine(transform.position, norVec, Color.red);//画出技能释放者面对的方向向量
        Debug.DrawLine(transform.position, Target.position, Color.green);//画出技能释放者与目标点的连线
        float jiajiao = Mathf.Acos(Vector3.Dot(norVec.normalized, temVec.normalized)) * Mathf.Rad2Deg;//计算两个向量间的夹角
        if (distance < SkillDistance)
        {
            if (jiajiao <= SkillJiaodu * 0.5f)
            {
                Debug.Log("在扇形范围内");
            }
        }
    }
}

 这里要说明的是:
         
         1.norVec.normalized 和 temVec.normalized 表示的是两个向量的单位向量, 因为在公式里,有向量和模的除法,得出来的结果就是单位向量,所以我们这里和后面都直接用单位向量来计算,省去不少麻烦。 
         2.Mathf.Rad2Deg表示的是 单位弧度的度数。

其中的一些计算公式参照下面的文章链接

检测点是否在扇形之内

前几天,同事在报告中提及检测角色是否在扇形攻击范围的方法。我觉得该方法的性能不是太好,提出另一个颇为直接的方法。此问题在游戏中十分常见,只涉及简单的数学,却又可以看出实现者是否细心,所以我觉得可当作一...
  • Game_jqd
  • Game_jqd
  • 2016年04月12日 17:33
  • 813

圆与扇形碰撞检测

圆与扇形的碰撞检测,以前用过一种算法是这样的: 首先把扇形视作一个圆,排除圆与扇形圆不相交的情况, 然后如果圆心在扇形两条边中间,则必然相交, 剩下的就判断圆是否与两条边相交。 这种算法用到了点与直线...
  • zaffix
  • zaffix
  • 2014年05月08日 22:37
  • 4465

unity中玩家扇形攻击范围

unity中玩家扇形攻击范围在unity rpg游戏中,经常会有主角或者Boss什么的会发动技能攻击,除了有攻击的距离以外,肯定会有攻击的扇形范围。本篇博客就给大家简单的讲解一下范围。 这个是出来6...
  • xiaoge132
  • xiaoge132
  • 2017年03月30日 14:08
  • 1470

【unity实用技能】计算目标物体是否在自己的扇形视野范围

在做游戏开发中经常会需要到计算扇形的视野或者是受击范围的时候。 其实这个分为两部分, 第一部分是在扇形距离范围内(也就是不考虑角度,其实是圆形范围内) 第二部分是扇形角度范围内 第一部分很简单,V...
  • chrisfxs
  • chrisfxs
  • 2017年06月27日 20:57
  • 1002

[Unity]利用Mesh在Unity中绘制扇形图片

背景最近碰到个功能, 要画一个扇形图案, 如下图: 美术原图: 需求是这个图形跟随角色, 在角色背后, 并且每个角色的扇形角度可能不同。 So, NGUI和UGUI很好用的FilledTyp...
  • zryxh1
  • zryxh1
  • 2016年12月31日 22:46
  • 3229

unity 检测物体是否在相机视野范围内

脚本挂在摄像机要显示的对象上 前提:该对象有 render 组件 public class visibleTT : MonoBehaviour { public bool isRender...
  • BaiYangShouTong
  • BaiYangShouTong
  • 2017年02月05日 19:48
  • 1855

判定攻击目标是否在攻击者扇形攻击范围类

忽略高度Y轴的扇形判定  public static float GetDistance(float x1, float y1, float x2, float y2) { return M...
  • ybhjx
  • ybhjx
  • 2015年12月23日 13:18
  • 915

[Unity实战]攻击范围的绘制

效果图: 代码如下: using UnityEngine; using System.Collections.Generic; public class DrawToo...
  • lyh916
  • lyh916
  • 2015年12月23日 00:05
  • 5662

角色是否在扇形攻击范围

及检测角色是否在扇形攻击范围的方法。我觉得该方法的性能不是太好,提出另一个颇为直接的方法。此问题在游戏中十分常见,只涉及简单的数学,却又可以看出实现者是否细心,所以我觉得可当作一道简单的面试题。问题在...
  • luyuncsd123
  • luyuncsd123
  • 2014年02月07日 19:52
  • 2774

创建一个扇形Mesh

using UnityEngine; using System.Collections; /* ===================================================...
  • AWNUXCVBN
  • AWNUXCVBN
  • 2015年03月03日 16:29
  • 4056
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity检测目标点是否在扇形攻击范围内
举报原因:
原因补充:

(最多只允许输入30个字)