让玩家用相同的标签面对不同的敌人
本文关键字:面对 敌人 标签 玩家 | 更新日期: 2023-09-27 17:59:21
我正试图让我的玩家面对不同的敌人,因为女巫敌人是最接近的。我正试图使用transform.lookAt和Vector3.距离,我能够让它发挥作用,但只针对我的玩家遇到的第一个敌人。
我已经列出了敌人的GameObjets,我正在循环浏览它们,以找到最近的敌人和它们的位置。
这就是我到目前为止得到的。
Vars:
public List<GameObject> targets;
private GameObject[] enemyList;
漫游:
void rotateToEnemy() {
//check if spawnEnemyes is close
foreach (GameObject target in targets) {
//transform.LookAt (target.transform.position);
if (target != null) {
float enemyDistance = Vector3.Distance (target.transform.position, transform.position);
if (enemyDistance <= 5.0f) {
transform.LookAt (target.transform.position);
Debug.Log (enemyDistance);
}
}
}
}
将Enemis添加到列表:
void addEnemiesToList() {
//Make enemy list
GameObject[] enemyList = GameObject.FindGameObjectsWithTag("skeletonEnemy");
// Add enem,is to array
foreach(GameObject enemy in enemyList) {
targets.Add (enemy);
}
}
在当前版本的代码中,您不一定要查看targets
列表中最接近的GameObject
。
foreach (GameObject target in targets) {
float enemyDistance = Vector3.Distance (target.transform.position, transform.position);
if (enemyDistance <= 5.0f) {
transform.LookAt (target.transform.position);
}
}
此代码将选择距离不到5个单位的最后一个目标。你应该循环浏览你的目标,只比较距离,然后选择最近的目标。也许类似于:
float minDistance = LARGE_NUMBER;
int closestIndex = -1;
for (int i = 0; i < targets.Count; i++) {
float enemyDistance = Vector3.Distance (target.transform.position, transform.position);
if (enemyDistance < minDistance) {
closestIndex = i;
minDistance = enemyDistance;
}
}
if (closestIndex != -1) { transform.LookAt (target.transform.position); }
我不确定你是不是这个意思。如果您希望它始终查看最接近的值,请确保在update()调用它,并将方法更改为类似的方法。
void rotateToEnemy() {
//check if spawnEnemyes is close
var closestEnemy;
var closestDistance = Mathf.infinity;
foreach (GameObject target in targets) {
//transform.LookAt (target.transform.position);
if (target != null) {
float enemyDistance = Vector3.Distance (target.transform.position, transform.position);
if (enemyDistance <= closestDistance) {
closestDistance = enemyDistance;
closestEnemy = target;
}
}
}
if(closestEnemy != null) {
transform.LookAt (closestEnemy.transform.position);
Debug.Log (closestDistance);
}
}