2016-07-29 7 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); } 
関連する問題