AI Move Toについて色々
備忘録らしくちょこっとした内容を。
AI Move Toというノードについて色々。
AIのキャラをスポーンさせる際には従来のSpawn Actorとは別の手順を踏む必要がある。その手順を踏まないとAI Move Toが使えない。
詳細はalwei様の記事にまとまっている。
AI Move Toの4つのoutputピンについて。1つ目の無名ピンは従来のピンと同様に、AI Move Toを実行したら出力される。
2つ目と3つ目のピンは出力されるまで一定の時間がかかる。2つ目は移動を成功したとき、3つ目は何かしらの問題(NavMesh範囲外とか)で目的地に移動不可と判断したときに出力される。例えば3つ目のOn Failピンと入力ピンをつなげると成功するまで実行することができる(もちろん直の繋ぎはマズイ)。
4つ目のMovement Resultは移動結果を詳細に参照できる。3つ目のOn Failピンではただの失敗だが、このピンでは道がないとか、ブロックされたとか、新しいAI Move Toが呼び出されて破棄されたとかの判断ができる。
AI Move Toで行先を指定する方法であるDestination指定とActor指定の違いについて。
基本的にはこれら2つは行先の座標を指定するが、いくらか違いがある。
1つ目に、再度ノードを実行しなくとも、行先の座標が変化する点がある。Destination指定では当然指定した座標に移動して、移動したら終わりになる。
Actor指定の場合、指定されたActorが移動したらAI Move Toで実行開始時の行先座標が更新される。つまりAIは目的のActorにたどり着くまで、Actorを追い続ける。ある種Homingに似ている。
ただし、目的のActorに着いたらAI Move Toは実行を終了するため、終了後にActorが動いてもAIは再度ノードを実行しない限り動かない。
2つ目に、AI Move Toを再度実行したときに、経路計算に違いがありそうという点がある。端的に言えばPawn指定の時の方が経路計算が賢い。
違いが浮き彫りになるのはNav Link Proxy(NavMeshの範囲外で通れる通路を指定できる)を使った時。場合によっては用意したNLPが通るべき中間点として扱われる。
中間点を通った後にAI Move Toを再度呼び出した場合、Destination指定では中間点を通ったことを忘れるため再度通ろうとする。その結果中間点で止まるAIが出来る。
画像上中央の円柱"PointLinks[0].Left"で止まる。
1つ目の話を考慮して、Pawn指定にしておけば困らないのではあるが、どうしてもDestination指定で頻繁にノード呼び出しをしたいとき(例えば"Pawn"では無く"音"に引き寄せられるAI)にこの問題に衝突するだろう。回避方法としては目的座標に空のPawnを生成する方法が挙げられる(これはこれで空のPawnのDestroyについて手間が増える)。