2016-07-29 284 views
0

我試圖讓我的玩家面對基於巫師敵人最不同的敵人。我正在嘗試使用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

我不確定您的意思。如果您希望它始終保持最接近的狀態,請確保在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); 
     } 
    } 
+0

謝謝!奇蹟般有效! 我只是做了一些修改,使它只能瞄準最近的敵人,如果它在5個單位的距離內,我也做了一些更新列表,因爲我的敵人死亡,並在隨機位置重新生成。 謝謝你的反饋:) – Jsf

1

在你的代碼的當前版本,你不一定看您的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); } 
相關問題