NPCを配置してプレイヤーに追随させる

提供: socialakiba wiki
移動: 案内検索

ナビゲーションメッシュの作成

Ue4npc001.png

NPC (Non Player Character) を作るために作らなくてはならないものは、

  • ナビゲーションメッシュ
  • NPCのブループリント
  • AIコントローラーのブループリント
  • ビヘイビア・ツリー
  • ブラックボード

の5つなのだが、ナビゲーションメッシュはボリューム→ Nav Mesh Bounds Volume をシーンに配置するだけで自動生成される。 NPC が動き回る範囲にボリュームの位置や大きさを調整しておく。 pキーを押すと緑色でナビゲーションメッシュが表示される。

残りの四つはコンテンツの中に適当に npc とか言うフォルダを作っておいてその中に作る。

NPCブループリントの作成

Ue4npc002.png

npcフォルダの中で、新規作成→親クラスは Character で作成する。名前は npc character とかそんな名前を付ける。

Ue4npc003.png

npc character ブループリントをダブルクリックして開く。

コンポーネントの中のmeshを選択して、 Skeletal Mesh は SK_Manequinn を流用する。

Ue4npc004.png

カプセルコライダーとメッシュの位置を調整する。プレビューが地面にめり込むが気にしないことにする。

マテリアルも適当にいじる。

Ue4npc005.png

とりあえずプレイしてみる。

AI Controller ブループリントの作成

Ue4npc006.png

つづいて AI Controller ブループリントを作る(ai controller をすべてのクラスから検索する)。

名前は適当に npc ai controller とかにする。

Ue4npc007.png

npc controller のクラスのデフォルトの Pawn → AI Controller Class を先ほど作ったブループリント(npc ai controller) にする。

ビヘイビア・ツリーとブラックボードの作成

Ue4npc008.png

続いてAI → ビヘイビア・ツリーと AI → ブラックボードを作る。

Ue4npc009.png

ブラックボードの方はキーを新規作成して名前を適当に PlayerActor などと付けておく。

Key Type は Object、Base Class は Actor にする。

Ue4npc010.png

ビヘイビア・ツリーを開いてルート→Selector→Move To。

MoveTo: PlayerActor となるようにする。

AI Controller ブループリントに追記

Ue4 use blackboard behavior tree.png npc ai controller のイベントグラフに適当に追記する。

Use BlackBoard の Blackboard Asset は自分で作ったブラックボードを選択する。

Key Name はブラックボードで自分が作ったキーの名前(PlayerActor)。

Run Behavior Tree の BTAsset は自分で作ったビヘイビア・ツリーを選択する。

動作確認

Ue4npc012.png

もう動きましたね?

NPCを進行方向に向かせる

Npc direction01.png

NPC のコンポーネントの Animation の Animation Class を ThirdPerson_AnimBP にする。

NPC のブループリントを開いてビューポートで上から見て、NPC が矢印の方向へ正確に向くようにする(z軸周りに-90度回転)。 前に出した左足の向きが前方向。

NPCの歩く速さ

Ue4 walk speed.png

npc character のコンポーネントの character movenent の walking の max walk speed や max crouch speed を変える。

NPCが近づく距離

Ue4 acceptable radius.png

ビヘイビア・ツリーの move to の acceptable radius を変える。

NPCが近づくほど減速する

Ue4 npc speed control001.png Get Player Pawn → Get Actor Location はプレイヤーの位置。

Get Actor Location (self) は NPC の位置。

この二つの位置の差を求めて(演算 → ベクター → vector - vector)、 その差の長さを求める(演算 → ベクター → VectorLength)。

つまり NPC とプレイヤーの間の距離を求める。

変数 → character movement。

character movement からヒモを出して max walk speed で検索して set max walk speed を出す。 この値に先に求めた距離を入れる。

適当に値を調節しても良い(演算 → float * float を挟む)。

ちょっと遅れて追随する

Ue4 sequence wait move to.png


参考