読者です 読者をやめる 読者になる 読者になる

【UE4】AIを空中で移動させる時に使えそうなノード

0.目次


1.はじめに

AIの移動処理を作る時に地上ならばナビメッシュがあるのでAIMoveToなどを使えば簡単に作れますが、空中ですと現状のUE4ではナビメッシュが無いので使えるものと使えないものがあります。
今回はよく使いそうなノードでどれが空中で使用出来るか調べたもののまとめです。

バージョン:4.15  


2.移動に使うノードと空中での使用可否

※MovementComponentにはFloatingPawnMovementを使用しています

ノード名 使用可否 補足
AIMoveTo ×
MoveToLocationorActor UsePathfindingを外せば使用可能。Accelerationは考慮されず最大速度で移動する
SimpleMovetoActor ×
SimpleMovetoLocation ×
MovetoLocation UsePathfindingを外せば使用可能。Accelerationは考慮されず最大速度で移動する
MovetoActor UsePathfindingを外せば使用可能。Accelerationは考慮されず最大速度で移動する
AddMovementInput Accelerationが考慮される。Taskで瞬間的に呼んでしまうとほんの少ししか移動しない上にスピードがいつまで経ってもでないのでService等で毎フレーム呼ぶかDelayで少し待ってからFinishExcuteを呼ぶ等の工夫をする
AddInputVector Accelerationが考慮される。こちらもAddMovementInputと同様Taskで瞬間的に呼んでしまうと問題があるかと思います
AddActorXXOffset 可変フレームへの対応をする必要あり。FloatingPawnMovementを完全に無視した状態になります
SetActorXXLocation 可変フレームへの対応をする必要あり。FloatingPawnMovementを完全に無視した状態になります

3.おわりに

どのノードも一長一短な感じで悩みます。こうしたら良いよとか楽だよっていうのがあったら教えてほしいです。
RoborecallのDroneの実装を見たのですがMoveToLocationが使われていました。(というか移動はどのAIも同じものを使ってるっぽいです)
あと驚いたのですがUsePathfindingがONの状態で使われていたので、私の使い方が良くないのか、もしくはナビメッシュを拡張しているのかもしれません。ナビメッシュの表示をしてみたら色々違います(特にジャンプポイントの量に驚いた)