在开始之前,我们要了解一下向量减法与点乘的概念。
向量减法:如果第一个向量表示点的位置,那么向量减法可以用来表示一个对象从一个位置到另一个位置的方向距离,或者计算一个对象与另一个对象之间额距离和相对方位。
image向量的点乘:一般用于判断两个向量的夹角
image在unity中已经集成好了点乘方法dot()所以直接用就好。
思路:
1.将enemy放到一个数组,计算敌我距离
2.使用向量减法计算Player与敌人的方向
3.使用TransformDirection()方法将Player正前方朝向(Vector3.forward)的相对坐标转换成世界坐标
4.使用dot计算出player与enemy的方向夹角
代码如下:
Collider [] arrColliders = Physics.OverlapSphere(this.transform.position, attackArea,1<<LayerMask.NameToLayer("Enemy"));
Debug.Log("Demage+" + arrColliders.Length);
foreach (var enemyItem in arrColliders)
{
//敌我距离
float distance = Vector3.Distance(enemyItem.transform.position ,this.transform.position);
//
if (isDirection)
{
//Player方向与敌人之间
Vector3 dir = (enemyItem.transform.position - transform.position).normalized;
//Player朝向
Vector3 forward = transform.TransformDirection(Vector3.forward); ;
//player与enemy的夹角
float angle = Vector3.Dot(dir,forward);
if (distance<attackArea&&angle>0)
{
//攻击伤害事件
Debug.Log(angle+" "+distance);
enemyItem.GetComponent().DecreaseHP(damageValue);
//Debug.Log("Demage2+" + arrColliders.Length);
}
}
else
{
if (distance<attackArea)
{
//攻击伤害事件
Debug.Log("Find Enemy2");
}
}
网友评论