介绍
小编这次要给大家分享的是Unity3D如何实现攻击范围检测,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
<强>一、扇形攻击范围检测强>
; 使用System.Collections; 公开课AttackCHeck: MonoBehaviour {//要攻击的目标 公共变换目标;//扇形距离攻击距离扇形的半径 私人浮动SkillDistance=5;//扇形的角度也就是攻击的角度 私人浮动SkillJiaodu=60; 私人空间更新() {//与敌人的距离 浮动距离=Vector3.Distance(变换。位置,Target.position);//玩家正前方的向量 Vector3 norVec=变换。旋转* Vector3.forward;//玩家与敌人的方向向量 Vector3 temVec=目标。位置- transform.position;//求两个向量的夹角 浮动jiajiao=Mathf.Acos (Vector3.Dot (norVec。temVec.normalized)) * Mathf.Rad2Deg规范化; 如果(距离& lt;SkillDistance) { 如果(jiajiao & lt;=SkillJiaodu * 0.5度) { Debug.Log(“在扇形范围内“); } } } }
<强>二,长方形范围攻击检测强>
; 使用System.Collections; 公开课AttackCHeck: MonoBehaviour {//要攻击的目标 公共变换目标; 私人空间更新() {//计算玩家与敌人的距离 浮动距离=Vector3.Distance(变换。位置,Target.position);//玩家与敌人的方向向量 Vector3 temVec=目标。位置- transform.position;//与玩家正前方做点积 forwardDistance=Vector3浮动。点(temVec transform.forward.normalized); 如果(forwardDistance比;0,,forwardDistance & lt;=10) { rightDistance=Vector3浮动。点(temVec transform.right.normalized); 如果(Mathf.Abs (rightDistance) & lt;=3) { Debug.Log(“进入攻击范围“); } } } }
<强>三、半圆形攻击范围检测强>
; 使用System.Collections; 公开课AttackCHeck: MonoBehaviour {//要攻击的目标 公共变换目标; 私人空间更新() {//计算玩家与敌人的距离 浮动距离=Vector3.Distance(变换。位置,Target.position);//玩家与敌人的方向向量 Vector3 temVec=目标。位置- transform.position;//与玩家正前方做点积 forwardDistance=Vector3浮动。点(temVec transform.forward.normalized); 如果(forwardDistance比;0,,forwardDistance & lt;=10) { 如果(距离& lt;=5) { Debug.Log(“进入攻击范围“); } } } }
暂时就写三种吧!目前就遇到三种,以后遇到再更新。接下来介绍一下算法的核心知识点吧
其实这些小算法基本上用的全是向量的计算,向量的计算有两种
<强> 1。向量的点乘
强>
→。B=| | * | | * cosθ
→点乘应用
1)。如果让一个等于单位向量| |==1 c点积等于B在A上的投影
2)。如果让B等于单位向量arccos (a.b)==夹角
<强> 2。向量的叉乘强>
→A * B=C C就是A和B的法向量
→叉乘应用
1)。c是有方向。通过左手定则可以知道c的方向
2)。所以叉乘一般是用来计算方向的
3)。A和B都是单位向量arcsin (A * B | |)等于夹角
看完这篇关于Unity3D如何实现攻击范围检测的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。