fixelのブログ

Unity&C#初心者がイチからRTSを作るまでを書き記す日記

5回目・NavMeshPathとは何ぞや?

目次

Unityの公式サイトのここを読んでみると、

http://docs.unity3d.com/ja/current/ScriptReference/NavMeshPath.html

移動方向の矢印を作るにはNavMeshPathのcornersを使うことになりそうなことまでは把握した。

ただ、その他のことは全く書いてないので手探りで理解することに。

 

分かったこと1・「NavMeshPath」は「NavMeshAgent」の中にある

    public NavMeshAgent agent;
    agent = GetComponent<NavMeshAgent>();
    NavMeshPath path = agent.path;

これと

    NavMeshPath path;

これは全く一緒らしい。

agentをpublicしたってとこは違うけどほぼ一緒のことをやってるらしい。

 

分かったこと2・「NavMeshPath.corner」の扱いとVector3の使い方

public Vector3 corners;

とUnityのサイトのNavMeshPath.cornerには書いてあるけど、

これは「corners」はVector3で書かれているってことを示しているらしい。

Vector3[]は、

Vector3[n] = (x, y, z)みたいな感じで作られていて、

Unityのサイトの感じでpath.corners [0]のxだけを参照したい時は、

path.corners [0].xとすればいいっぽい。

 

分かったこと3・「NavMeshAgent.destination」を設定してもすぐには「NavMeshPath.corner」は作られない

「NavMeshAgent.destination」設定後すぐに「NavMeshPath.corner」を参照しようとすると、そんなもんないと言われます。

「NavMeshAgent.hasPath」を確認することでこれが回避できます。

 

分かったこと4・「NavMeshPath.corner」は自動更新されない


「NavMeshAgent.destination」を設定してPlayerが移動中の場合、「NavMeshPath.corner」はどうなっているかというと、

全く更新されません。

始点と終点は直線上にあるときだと、corner[0]に始点の座標、corner[1]に終点の座標が書いてあるだけです。

「NavMeshAgent.destination」を新しく設定すれば更新されます。