AIキャラクターのエイム調整方法:SetFocusとキャラクターの目の高さ
今回は、Unreal EngineでAIキャラクターにプレイヤーの頭や胸を正確に狙わせる方法について解説します。AIのエイム調整には、SetFocusノードが非常に便利ですが、デフォルト設定では腹部を狙ってしまう、ピッチ(上下)回転が効かないなどの問題が発生することがあります。これらの問題を解決し、より自然なエイムを実現するための具体的な手法を解説します。

AIに聞いても嘘だらけでかなり苦労しました
SetFocusの基本と問題点
Unreal EngineのAIControllerには、特定のActorを追跡して向きを調整するSetFocusノードがあります。このノードは、AIキャラクターのControlRotationを変更し、ターゲットのActorが移動しても自動的に追従してくれます。この機能を利用することで、AIキャラクターがプレイヤーを視線で追いかけるような挙動を簡単に実装できます。
しかし、SetFocusにはいくつか注意すべき点があります。
- ターゲットはActorの原点: SetFocusのターゲットに指定できるのはActorです。そして、ターゲットに指定されたActorの**原点(Root)**を狙うように設計されています。通常、キャラクターの原点は足元から少し上のカプセルの中央付近にあるため、AIはプレイヤーの腹部あたりを狙うことになります。
- ピッチ回転の制限: SetFocusは、ターゲットがPawnクラス(またはその子クラス)である場合のみピッチ(上下)回転を有効にします。PawnではないActorをターゲットにした場合、ピッチ回転は無効になり、AIは水平方向(ヨー)にしか向きを変えません。これは意図された仕様であり、長年の議論がある点です。
正確なエイムを実現する解決策
デフォルトのSetFocusの問題を解決し、AIキャラクターに頭や胸を正確に狙わせるには、いくつかの工夫が必要です。
1. ダミーActorの利用
プレイヤーの頭や胸の位置にダミーのPawnをアタッチし、それをAIのSetFocusターゲットにする方法があります。この方法を使えば、AIはプレイヤーの狙いたい部位を追跡し、ピッチ回転も有効になるため、上下方向のエイムも可能になります。

Pawnでないとピッチが利きません
2. Base Eye Heightの調整
AIキャラクターの目線が、エイムの精度に大きく影響します。SetFocusは、AIキャラクターの視点(目の位置)とターゲットを結ぶラインを計算し、その方向を向くようにControlRotationを調整します。
AIキャラクターの視点は、キャラクターBlueprintのプロパティであるBase Eye Heightで設定します。これは、カプセルコンポーネントの原点から目の位置までのオフセット(高さ)です。例えば、カプセルコンポーネントの高さが88cmで、Base Eye Heightが100cmだとすると、AIはカプセル原点から100cm高い位置、つまり地面から188cmの高さからターゲットを見ていることになります。
この値がデフォルトのままだと、AIキャラクターがプレイヤーを実際より高い巨人目線から見下ろす形になり、銃を構える手の位置(肩の高さ)と目線に大きなズレが生じてしまいます。


このズレを修正するには、Base Eye Heightの値を調整し、AIキャラクターの視線と銃口の高さが近くなるようにします。例えば、デフォルト値(100cm)から50cm程度に下げることで、エイムの精度が大幅に向上します。これにより、AIがより自然な角度でターゲットを狙えるようになります。




BaseEyeHeightを50くらいにして大体肩と同じくらいの高さにしたらそこそこ合いましたね
アニメーションと弾道の調整
Base Eye Heightの調整でエイムの精度は向上しますが、さらに完璧なエイムを目指す場合は、以下の点を考慮しましょう。
- エイムオフセットの微調整: オーバーレイポーズのアニメーション(Aim Offset)やリターゲッタ、Hand-IKの設定を微調整して、キャラクターの手や銃の角度をより正確に合わせます。
- 弾道の補正: アニメーションの調整に加え、実際に弾が飛ぶ方向をプログラムで補正する方法もあります。例えば、FindLookAtRotationなどのノードを使用して、AIキャラクターの銃口からターゲットまでの正確な回転値を計算し、その方向に弾を飛ばすことで、見た目と弾道が完全に一致するようになります。
このように、SetFocusの問題を理解し、適切な調整を行うことで、AIキャラクターにプレイヤーの特定の部位を狙わせることが可能になります。まずはBase Eye Heightの調整から試してみてください。
コメント