Unreal Engine(UE)で常にプレイヤーを見続けるNPCを作ってみよう!
戦闘するわけではなく、ただプレイヤーを見続けるだけのモブキャラが欲しいと思ったことはありませんか?
もちろん戦闘時の敵にも応用可能な実装方法をご紹介します。
※NPCはNon Player Characterの略称で、ゲーム上でプレイヤーが操作しないキャラクターのことです。

動作環境
当記事の動作環境は以下の通りです。
バージョンや環境によっては、正常に動作しない可能性があります。
また、プロジェクトはサードパーソンプロジェクトの使用を前提とします。
【下準備】NPCの作成
まずはNPCを作成していきます。
NPCのブループリントを作成
一般的なキャラクターブループリントで問題ありません。
「Character」を親としたブループリントクラスを作成します。

「メッシュ」欄には対象としたいNPCのキャラクターのメッシュを設定します。
トランスフォームを忘れずに変更しましょう。

NPCをマップに配置
作成したNPCのブループリントをマップに配置しましょう。
ドラッグアンドドロップ(D&D)で配置できます。

アニメーションブループリントの作成
アニメーションブループリントを作成します。
コンテンツブラウザにて、何もない部分を右クリックして、「アニメーション」-「アニメーションブループリント」を選択します。

自作キャラの場合は該当するスケルトンを、特になければ「SK_Mannequin」のスケルトンを選択します。

アニメーションの作成
作成したアニメーションブループリントを開き、次の手順を実行します。
- アセットブラウザから「MM_Idle」をD&D
- 「MM_Idle」を「Output Pose」ノードのResultに接続
- 設定欄の「Loop Animation」にチェックを入れる

作成したアニメクラスをコンパイルして、NPCのブループリントに設定します。

【本題】プレイヤーを見続けるアニメーションの作成
ここからが本題です。
プレイヤーを見続けるアニメーションを作っていきます。
イベントグラフの編集
まずはイベントグラフを編集します。
デフォルトで入っている「Try Get Pawn Owner」は今回使用しないため、削除しても構いません。
「Event Blueprint Update Animation」ノードからピンを伸ばし、「Cast To BP_ThirdPersonCharacter」を設定します。

「Cast To BP_ThirdPersonCharacter」のobjectからピンを伸ばし、「Get Player Character」を接続します。

「Cast To BP_ThirdPersonCharacter」のAs BP Third Person Characterからピンを伸ばし、「Get Mesh」を接続します。
(Meshで検索すると見つけやすいでしょう)
さらに「Get Mesh」のMeshからピンを伸ばし、「Get Socket Location」を接続します。
アニメグラフの編集
次に、アニメグラフを編集します。
基礎部分は完成
ここまでで、基礎部分は完成です。
NPCの前にプレイヤーがいる場合は、問題なくプレイヤーを見続けてくれます。
しかし、プレイヤーがNPCの後ろに回ってもNPCはプレイヤーを見続けます。
すると、下図のように頭がおかしな回転をすることになります。

調整
NPCの後ろにプレイヤーが行った場合の挙動を調整します。
アニメグラフのLook At ノードの詳細から、「Look At Clamp」を40~70程度に、「Interpolation Time」を1~5程度にそれぞれ設定します。
この部分は各自で好みに応じて値を調整してください。

まとめ
プレイヤーを追うには「Get Player Character」から始まる処理が重要です。
また、Look Atノードは他のボーンを追従する機能です。
これらを使って実装します。
