2015-10-05 94 views
1

我不知道這是一個正確的地方問這個問題。因爲這是一個遊戲開發相關的問題。我在這裏發佈這個問題(gamedev.stackexchange.com - https://gamedev.stackexchange.com/questions/109190/navmashagent-not-moving),但仍然沒有迴應。並在Unity論壇中發帖(http://answers.unity3d.com/questions/1075904/navmashagent-not-moving-in-unity3d-5.html)。任何一個在這裏幫助我。Unity3D NavMashAgent不移動 - #代碼

生病後在這裏我的問題再次

我試着去一個立方體移動到檢查點。 FindClosestTarget()方法提供最接近的檢查點。當Cube碰到CheckPoint時,ChackPoint將被設置爲非活動狀態。碰撞發生時FindClosestTarget()再次調用並獲取最近的新CheckPoint。事情是立方體不動。它看最近的檢查點,但不移動。

using UnityEngine; 
using System.Collections; 

public class EnimyAI03N : MonoBehaviour { 

    NavMeshAgent agent; 
    Transform Target; 
    private float rotationSpeed=15.0f; 

    void Start() { 
     agent = GetComponent<NavMeshAgent>(); 
     Target = FindClosestTarget().transform; 
    } 

    void Update() 
    { 
     LookAt (Target); 
     MoveTo (Target); 

    } 

    // Turn to face the player. 
    void LookAt (Transform T){ 
     // Rotate to look at player. 
     Quaternion rotation= Quaternion.LookRotation(T.position - transform.position); 

     transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime*rotationSpeed); 
     //transform.LookAt(Target); alternate way to track player replaces both lines above. 

    } 

    void MoveTo (Transform T){ 
     agent.SetDestination(T.position); 
    } 

    void OnCollisionEnter (Collision col) 
    { 

     if(col.gameObject.name.Contains("CheckPoint")) 
     { 
      Target = FindClosestTarget().transform; 
     } 
    } 

    GameObject FindClosestTarget() { 
     GameObject[] gos; 
     gos = GameObject.FindGameObjectsWithTag("CheckPoint"); 

     GameObject closest=null; 
     float distance = Mathf.Infinity; 
     Vector3 position = transform.position; 
     foreach (GameObject go in gos) { 
      Vector3 diff = go.transform.position - position; 
      float curDistance = diff.sqrMagnitude; 

      if (curDistance < distance) { 
       closest = go; 
       distance = curDistance; 
      } 
     } 
     return closest; 
    } 

} 
+0

您需要檢查並循環通過僅有的檢查點! –

+0

通過FindClosestTarget()收集活動檢查點自動收集。我使用unity3d 5 –

回答

0

確保您尋找新的目標之前,通過只是把兩條線路在同一地區的SetActive(false);正在發生的事情。

void OnCollisionEnter (Collision col) 
{ 
    if(col.gameObject.name.Contains("CheckPoint")) 
    { 
     col.gameObject.SetActive(false); 
     Target = FindClosestTarget().transform; 
    } 
}