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

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

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

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


如上图所示,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表示的是 单位弧度的度数。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值