关闭

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

标签: Unity3d扇形范围
4700人阅读 评论(1) 收藏 举报
分类:

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

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

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


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

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

1
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:32451次
    • 积分:540
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:16篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论