我试图让我的玩家面对不同的敌人基于女巫敌人是最接近的。我正试图使用transform.lookAt和Vector3.Distance面对最近的敌人,我能够使它工作,但只能在我的玩家进入的第一个敌人身上。
我列出了敌人的GameObjets,我正在通过它们来寻找最近的敌人及其位置。
这是我到目前为止所得到的。
瓦尔:
public List<GameObject> targets;
private GameObject[] enemyList;
Roatation:
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);
}
}
答案 0 :(得分:1)
在当前版本的代码中,您不一定会查看GameObject
列表中距离最近的targets
。
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); }
答案 1 :(得分:0)
我不确定你是不是这个意思。如果您希望它始终查看最接近的,请确保在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);
}
}