【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の状態で使われていたので、私の使い方が良くないのか、もしくはナビメッシュを拡張しているのかもしれません。ナビメッシュの表示をしてみたら色々違います(特にジャンプポイントの量に驚いた)