Unreal Engine 5で開発する過程で、ビヘイビアツリー(Behavior Tree)を使ってキャラクターを移動している場合に、別のキャラクターやアクターが近づいた時にカクついたり瞬間移動してしまう場合の対処法を備忘録的に投稿します。
キャラクターの間際に別アクター
Unreal Engineのキャラクターを移動させる場合に、ビヘイビアツリーを使ってAIを使う仕組みがあります。
以前は、Tickイベントなどでフレーム単位でプレイヤーに近づいていくノードを組み合わせて移動させていましたが、ビヘイビアツリーだと自然にプレイヤーを追いかける挙動が再現できます。
今回、ハマったのはプレイヤーから射出したアクターを移動中のキャラクターに近づけた場合にカクつくことがありました。
着弾すれば問題ないんですが、キャラクターの間際を通過するような場合にプチ瞬間移動をしたり、カクつくことがあります。
キャラクターがカクつく原因
最初、弾丸にしているアクターや、キャラクターのコリジョンが原因だと考えていたんですが、コリジョンを変更しても原因が分からずにハマりました。
私の場合の原因は、ビヘイビアツリーの[AllowStrafe]と[Acceptable Radius]の設定でした。
ビヘイビアツリーを使ってキャラクターを移動させる場合に[Move To]などのタスクノードを使います。
このタスクノードの詳細に[AllowStrafe]と[Acceptable Radius]設定があります。
ツールチップで表示される説明を読んでも、分からないことが多い設定です。
要約すると[AllowStrafe]は、有効にすると移動する目標と自身との間に別のアクター(今回の場合は弾丸アクター)が発生した時に、自身の向きの制限しなくなります。
つまり[AllowStrafe]が無効の場合、目標(今回はプレイヤー)を目標に移動する際中で別のアクター(今回は弾丸アクター)が進行方向に発生した場合に
[移動方向が少し変化]→[アクターの向きを大きく修整]→[アクターがガクッと揺れる]
とカクつく原因になります。
対して[AllowStrafe]が有効の場合には
[移動方向が少し変化]→[横方向の移動で修正]→[アクターが少しだけ横にスライド移動]
となり、カクつきが軽減される方向になります。
これだけでは、大きなカクつきから小さな軽減されるだけなので[Acceptable Radius]設定を使います。
[Acceptable Radius]は目標(今回はプレイヤー)に対する位置取りの許容範囲となり、今回の[横方向の移動で修正]する量になります。
この数値を下げる(5.0→1.0など)ことで横ズレする量も緩和できるので合わせ技でキャラクターのカクつきを抑えることができました。
まとめ
今回は短い記事になりましたが、Unreal Engine 5で、ビヘイビアツリー(Behavior Tree)を使ってキャラクターを移動している場合に、別のキャラクターやアクターが近づいた時にカクついたり瞬間移動してしまう場合の対処法について書きました。
コリジョンなどの設定ではなく、ビヘイビアツリー(Behavior Tree)内の移動に使っている[Move To]タスクノードなどの[AllowStrafe]と[Acceptable Radius]設定を組み合わせることで、カクつきを軽減させることができます。
Unreal Engine でビヘイビアツリー(Behavior Tree)を使ってキャラクターを移動している場合に、キャラクターがカクついてしまう人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。

