方法:通过寻找最近的敌人,使玩家的面朝向始终朝向敌人,进行攻击
1、代码
在这个方法中使用的是局部变量,作为临时声明和引用
public void SetActorAttackRotation()
{
Enemys = GameObject.FindGameObjectsWithTag("Enemy");
GameObject NearestEnemy = null;
float MinDistance = 1000;
Vector3 CurrentPos = transform.position;
foreach (GameObject enemy in Enemys)
{
float distance=Vector3.Distance(enemy.transform.position,CurrentPos);
if (distance < MinDistance)
{
NearestEnemy = enemy;
MinDistance = distance;
}
}
Vector3 NEnemyPos = NearestEnemy.transform.position;
NEnemyPos.y = transform.position.y;
transform.LookAt(NEnemyPos);
}
首先,建一个敌人数组
使用一个寻找Tag的方法,查找场景中所有敌人的物体
最近的敌人初始化为空,因为需要判断哪一个最近,然后赋值给他
定义一个局部变量 最小距离,此处距离设置的比较大
然后把玩家的当前位置赋值给CurrentPos,也就是当前的点
此时,开始遍历场景中所有的敌人在Enemys数组中
先定义一个向量值 :从玩家的点到敌人的位置
如果这个向量值小于了最小的距离,那么这个敌人就是最近的敌人,
当前的距离也就是最小的距离。
注意:这个遍历方法类似冒泡排序,
这里的局部变量设置的值,其实并不是影响很大,要在if语句中重新将距离赋值给最小距离
最下面三行的作用是:
始终让玩家的视角看向锁定的敌人