BLOGブログ

2024.09.04UE5UE/ 初心者向けUE/ BlueprintUE/ Animation

[UE5] プレイヤーが近づいたらプレイヤーを見つめてくるNPCを作る

執筆バージョン: Unreal Engine 5.3

こんにちは!最近ブループリントの面白さを再認識しているプランナーの黒田です!

今回はプレイヤーが特定のボリュームを踏んだ時にプレイヤーの方向を見つめるNPCの実装方法を説明したいと思います。
(頭だけ動くようにします!)


※今回はThird Person Templateを使用して説明します

目次

  • NPCのブループリントを作成する
  • 振り向き用のアニメーションブループリントを作成する
  • 振り向きの調整

のざっくり3点で進行します!

 


NPCのブループリントを作成する

要点:キャラクターBPにメッシュとコリジョンを用意する

まずはプレイヤーの方を向いてくれるNPCのブループリント(BP)を作成していきます。

  1. 新しくブループリントクラスからキャラクターのBPを作成
  2. 作成したBPを開きスケルタルメッシュを設定
  3. 位置を調整し、正面を向かせる
  4. 判定用のコリジョンを追加し、位置とサイズを調整(Box, Capsule, SphereなんでもOK)

 

コンパイルと保存をしたら、一旦BPの方は置いておきます。

ただ、このままだとレベルに配置してもまだ認知してもらえません…(当然ですが)

 


振り向き用のアニメーションブループリントを作成する

要点:LookAtを使ってプレイヤーの方向を見続けるようにする

続いてプレイヤーの方を見つめるアニメーションブループリント(ABP)を作成していきます。

  1. 新しいABPを作成
  2. 作成したABPを開き、AnimGraph内に待機モーションをAsset Browserからドラッグ&ドロップ(D&D)
  3. ノードを繋ぐ前に、「LookAt」処理を右クリックから追加
  4.  次にABPのEventGraphに移動し処理を書いていきます
    1.  先程作成したNPCにキャストしてコリジョン(Box)を取り出す
    2. Boxにプレイヤーが入っているかを「Is Overlapping Actor」で検知しブランチの条件に繋ぐ
    3. Get Player Characterから頭のソケット(head)位置を取得
      ※プレイヤーキャラクターの見て欲しい位置のボーン名を指定
    4. ポジション用のVector変数を追加し、SetでEventGraphに配置
    5. それぞれノードを画像のように繋げる
  5. AnimGraphに戻り、Idle→Look At→OutputPoseに繋げる
    ※この時、間に関数が自動で作成されますが、放っておいて大丈夫です
  6.  LookAt関数の中を以下のように設定します:
    1. Bone to Modify:head (動かしたいボーン名)
    2. Look at Clamp:80以下(振り向き領域の制限)
    3. Look at Location:Bindから4.d.で作成した変数を指定
  7. コンパイルとセーブ後、NPCのBPを再度開き、上記で作成したアニメーションを設定

 

さて、この状態でゲーム側を見てみると…

コリジョンの中に入ったら認知してもらえました!嬉しい!

ですが、このままだと振り向き速度が人知を超えており、コリジョンから抜けるといなくなった場所を見つづけてしまいます。

なので、最後のステップで自然に見えるように調整していきます!

 


振り向きの調整

要点:振り向き度合を保存する変数を用意し、スムーズに振り向く処理を追加する

あとは振り向きをスムーズにしつつ、最初の向きを振り向き後の状態を保存して切り替わるようにします。

  1. ABPのEventGraphを開き、NPCの首振り向き度合を保存しておくFloat変数を作成
  2. ブランチのFalseの先とプレイヤーに振り向く処理の先に変数のSetをEventGraphに配置
  3. 次に「FInterp to Constant」関数を二つ用意し、リターンが先ほど配置したLookAtAlphaに繋げる
  4. 「FInterp to Constant」関数の値を以下のように設定:
    1.  Current:LookAtAlpha変数の現在値を繋げる
    2. Target:ブランチのFalseに繋がっている方は0(LookAt前)、最後の方は1(LookAt後)として設定
    3. DeltaTimeは頭から持ってきて繋げる
    4. Interp Speed:振り向き速度を設定(3秒くらいが自然)
  5. ABPのAnimGraphを開き、LookAtのアルファ値に追加した変数を繋げる

 

コンパイルとセーブを忘れずにゲームで確認してみると…

自然に振り向いてくれるし、離れたら興味を失ってくれました!

 


今回のブログは以上となります!
近くに来たプレイヤーを見つめるNPCとしても使えますし、一斉に見つめられるようなシチュエーションでも使えそうなので是非試してみてください!