Pomb記

おもにUE4での記録

AI Move Toについて色々

備忘録らしくちょこっとした内容を。

AI Move Toというノードについて色々。

 

f:id:GamePump:20161218175828j:plain

 

AIのキャラをスポーンさせる際には従来のSpawn Actorとは別の手順を踏む必要がある。その手順を踏まないとAI Move Toが使えない。

詳細はalwei様の記事にまとまっている。

unrealengine.hatenablog.com

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が出来る。

f:id:GamePump:20161218180244j:plain

画像上中央の円柱"PointLinks[0].Left"で止まる。

1つ目の話を考慮して、Pawn指定にしておけば困らないのではあるが、どうしてもDestination指定で頻繁にノード呼び出しをしたいとき(例えば"Pawn"では無く"音"に引き寄せられるAI)にこの問題に衝突するだろう。回避方法としては目的座標に空のPawnを生成する方法が挙げられる(これはこれで空のPawnのDestroyについて手間が増える)。