Staticな床オブジェクトに、移動するNavMesh Agentがついたオブジェクト(agent.gameObject)があります。
すでにNavigationはBakeされています。
下記のコードは「**Move()**を実行するとこのオブジェクトはx,z軸ランダムに最大20m移動する」というものです。
C#
1 NavMeshAgent agent; 2 3void Move(){ 4 Vector3 position = new Vector3(gameObject.transform.position.x + Random.Range(-20, 20), 0.2f, gameObject.transform.position.z + Random.Range(-20, 20)); 5 6 NavMeshHit Hit; 7 if (NavMesh.SamplePosition(position,out Hit, 1.0f, NavMesh.AllAreas)) 8 { 9 destination = position; 10 } 11 12 if (agent.pathStatus != NavMeshPathStatus.PathInvalid) 13 agent.SetDestination(destination); 14 else 15 Debug.Log("NaMeshPath none"); 16}
これで**Move()を実行しても、何も起きません。
コードの最後のほうでSetDestination()もしくはDebug.Log()**を実行させるようになっているのですが、本当に何も起きません。
最後のif(~~), **else Debug.Log()**を消して、**SetDestination()**だけを残すと、
"SetDestination" can only be called on an active agent that has been placed on a NavMesh.
というエラーが発生します。
デバッグ開始から十数秒たって**Move()**を実行しても何も起きません。
agent.pathStatus != NavMeshPathStatus.PathInvalidがtrueにならない理由がよくわかりません。
もしくは、**NavMesh.SamplePosition()**で目的地を補正しているつもりなのですが、
これが間違っているのでしょうか。
回答お願いします。
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー