ここが質問するのに適切な場所かどうかわかりません。これはゲーム開発関連の質問だからです。この質問をここ (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 ) にも投稿してください。私を助けるためにここにいる人は誰でも。
ここにもう一度質問を投稿します
Cube を CheckPoints に移動しようとしています。FindClosestTarget() メソッドは、最も近いチェックポイントを提供します。Cube が CheckPoint にヒットすると、ChackPoint は Inactive として設定されます。衝突が発生すると、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;
}
}