1. はじめに|本記事で作る機能
みなさんこんにちは。NakaRyoです。
本記事では、Unreal Engine 5(UE5)において、
マウスクリックでNPCがプレイヤーの背後を追従する機能を実装していきます。
特に、ビヘイビアツリー(Behavior Tree) と ブラックボード(Blackboard) を使用し、
NPC の行動制御を分かりやすく整理する方法を紹介します。
2. AI 制御の基本構造
本記事でのNPC の制御は、以下の要素で構成されます。
| 要素 | 役割 |
|---|---|
| BP_Creature(NPC本体) | ゲーム内に存在するキャラクター |
| BP_CreatureAI(AIController) | AIの動作を管理する操作役 |
| Blackboard(AIの記憶領域) | 追従対象や移動地点を保存する |
| Behavior Tree(BT) | NPCの行動手順を決めるスクリプト |
| サービス(BTService) | 定期的に値を更新する処理 |
| タスク(MoveTo など) | 実際のアクション |
この構成により、NPC の行動は「状態」→「判断」→「行動」という形で整理されます。
3.事前準備
実装開始前に事前準備をおこないます。
プロジェクト作成
Unreal Engineを開いたら、ゲーム⇒トップダウンを選択
以下の通りに設定を行い、プロジェクトを開きます。

プロジェクトを開いたら、
ファイル⇒新規レベルをクリック
“基本”を選択し、作成します。


Floorのみの画面が表示されたら成功です。

ファイル⇒”名前を付けて現行レベルを保存”をクリック

新規フォルダ(Maps)を作成し、レベル名を”FirstMap”に設定後、保存します。

NavMesh設定
続いて、NPCが自動的に動ける範囲を設定していきます。
FirstMap編集画面⇒アクタを配置⇒ナビメッシュバウンズボリュームを選択します。

ナビメッシュバウンズボリュームを
編集画面上にドラック&ドロップし
ナビメッシュバウンズボリュームの
トランスフォーム設定を以下の通りに設定

Pボタンを押すと対象範囲が緑色に表示されますので、
ステージ全体が緑色になっていれば成功です。

ブループリントフォルダ作成
コンテンツ画面で新規フォルダを作成し、フォルダ名を”BluePrint”とします。
※ブループリント関連ファイルはすべてこのフォルダに格納していきます。

列挙型ブループリント作成
BluePrintフォルダ上で右クリック⇒ブループリント⇒列挙型を選択
ファイル名を”ETeam“にリネームし、ダブルクリックで開きます。


ETeam(列挙型ブループリント)の編集画面で
列挙子を3つ追加し、
エニュメレーターの表示名
①Neutral ②Player ③CPUを入力します。

保存します。
キャラクター ブループリント作成
BluePrintフォルダ内で右クリック⇒ブループリントクラスを選択します。

親クラスを選択画面で、キャラクターを選択し、クリックします。

ファイル名をBP_Creatureにリネームします。
本画面では、既にキャラクターメッシュが表示されていますが、
現時点では、変数設定のみを行います。

BP_Creature変数設定
先ほど作成したBP_Creatureをダブルクリックして編集画面を開きます
BP_Creatureのマイブループリント⇒変数⇒+ボタンで
新規変数を追加していきます。
デフォルト値を設定する際には一度コンパイルして編集してください。

変数①:Team 変数型:ETeam デフォルト値:Neutral


変数②:Leader 変数型:アクタ デフォルト値:なし


変数③:IsFollowing 変数型:Boolean デフォルト値:チェックを外す(False)


変数④:FollowIndex 変数型:Integer デフォルト値:0


変数⑤:FollowSpacing 変数型:Float デフォルト値:150.0


変数⑥:FollowSpeed 変数型:Float デフォルト値:10


変数⑦:TurnRate 変数型:Float デフォルト値:8.0


変数⑧:LeaderTransform 変数型:Transform デフォルト値:初期値


変数⑨:UseBTMovement 変数型:Boolean デフォルト値:チェックを入れる(True)


コンパイルして保存します。
4.ブラックボード設定
AI記憶領域の機能であるブラックボードの実装していきます。
コンテンツフォルダ上から右クリックで新規フォルダを作成
フォルダ名を”AI”と設定します。

AIフォルダ上で右クリック
AI⇒ブラックボードを選択します。

ファイル名をBB_Creatureにリネームし、
ダブルクリックでファイルを開きます。

左上の新規キーを選択し、キー型を選択しながら
以下4つのキーを作成します。
| キー名 | 型 | 役割 |
|---|---|---|
| LeaderActor | Object(オブジェクト) | プレイヤー(追従対象) |
| FollowLocation | Vector(ベクター) | 追従先の位置(背後に並ぶ位置) |
| WanderLocation | Vector(ベクター) | 徘徊中に向かうランダムな目的地点 |
| IsFollowing | Bool(ブール) | 仲間状態かどうか |

■LeaderActor詳細設定

■FollowLocation詳細設定

■IsFollowing詳細設定

■WanderLocation詳細設定

保存します。
5.ビヘイビアツリー設定
AIフォルダ上で右クリック⇒AI⇒ビヘイビアツリーを選択します。

ファイル名をBT_Creatureにリネームし、ダブルクリックでファイルを開きます。
Blackboard Asset設定
詳細パネル⇒ビヘイビアツリー⇒Blackboard Assetを
先ほど作成した”BB_Creatureに指定します。

新規サービス設定
ビヘイビアツリーにはサービス機能があり、2つのサービスを実装していきます。
①BTService_UpdateFollowLocation
BT_Creature編集画面の新規サービスをクリック

ファイル名をBTService_UpdateFollowLocationに設定し、保存をクリックします。

AIフォルダにファイルが作成されました。
ダブルクリックでファイルを開きます。

BTService_UpdateFollowLocation編集画面で
マイブループリント⇒変数⇒+ボタンで、
新規変数を作成します。
変数名①:LeaderKey
変数型:Blackboard key Selector
デフォルト値:none
インスタンス編集可能:チェックを入れる


変数名②:DestKey
変数型:Blackboard key Selector

デフォルト値:none
インスタンス編集可能:チェックを入れる

変数名③:FollowSpacing
変数型:Float
デフォルト値:150

イベントグラフ上で以下ノード設定をおこないます。
■ノード設定手順

①Get Blackboard Value as objectのKeyピンとGet Leader KeyのReturn Valueピンを接続

①Set Blackboard Value as VectorのKeyピンとDest KeyのReturn Valueピンを接続


①関数⇒オーバーライド⇒Receive Tick AIを選択
②Event Receive Tick AIの実行ピンとCast To BP_Creatureの実行ピンを接続
③Event Receive Tick AIのControlled PawnピンとCast To BP_CreatureのObjectピンを接続

①Cast To BP_Creatureの実行ピンとGet Blackboard Value as Objectの実行ピンを接続
※Get Blackboard Value as Objectを右クリック⇒”実行ピンを表示”を選択すると実行ピンが表示されます
②Get Blackboard Value as ObjectのKeyピンとMake Blackboard Key SelectorのBlackboard Key Selectorピンと接続
③Make Blackboard Key SelectorのSelect Key Name欄にLeaderActorを入力

①Get Blackboard Value as Objectの実行ピンとCast To Actorの実行ピンを接続
②Get Blackboard Value as ObjectのReturn ValueピンとCast To ActorのObjectピンを接続
③Cast To Actorの実行ピンとBranchの実行ピンを接続
④Cast To ActorのAsアクタピンとIs Valid(配列)のObjectピンを接続
⑤Is ValidのReturn ValueピンとBranchのConditionピンを接続

①Cast To ActorのAsアクタピンとGet Actor TransformのTargetピンを接続
②Get Actor TransformのReturn ValueピンとBreak TransfromのIn Transformピンを接続
③Break TransformのRotationピンとGet Forward VectorのIn Rotピンを接続
※Get Forward Vector選択時に必ず演算⇒ベクター⇒Get Forward Vectorのノードを選択


①Cast To BP_CreatureのAs BP_CreatureピンとGet Follow IndexのTargetピンを接続
②Get Follow IndexのReturn ValueピンとAdd(オペレーター)のAピンを接続
③Add(オペレーター)のBピン欄に1を入力
④Add(オペレーター)のReturn ValueピンとTo Float(Integer)のIn Integrピンを接続
⑤To Float(Integer)のReturn ValueピンとMultiply(オペレーター)のBピンを接続
⑥Multiply(オペレーター)のAピンに150を入力

①Get Forward VectorのReturn ValueピンとMultiply(オペレーター)のAピンを接続
※Multiply 2と記載
②Aピンに150を入力状態のMultiplyのReturn ValueピンとMultiply 2のBピンを接続
③Multiply 2のReturn ValueピンとSubtract(オペレーター)のBピンを接続
④Subtract(オペレーター)のAピンとBreak TransformのLocationピンを接続
⑤SubtractのReturn ValueピンとBreak VectorのIn Vecピンを接続


①Break Vector 1のXピンとMake VectorのXピンを接続
②Break Vector 1のYピンとMake VectorのYピンを接続
③MakeVectorのZピンとBreak Vector 2のZピンを接続
④Break Vector 2のIn VecピンとGet Actor LocationのReturn Valueピンを接続
⑤Get Actor LocationのTargetピンとEvent Receive Tick AIのControlled Pawnピンを接続

①BranchのTrueピンとSet Blackboard Value as Vectorの実行ピンを接続
②Set Blackboard Value as VectorのKeyピンとMake Blackboard Key SelectorのBlackboard Key Selectorピンを接続
③Make Blackboard Key SelectorのSelect Key NameにFollowLocationを入力
④Make VectorのReturn ValueピンとSet Blackboard Value as VectorのValueピンを接続
コンパイルして保存します。
②BTService_PickWanderPoint
BT_Creature編集画面の新規サービスをクリックし、BTService_BlueprintBaseを選択します。

ファイル名をBTService_PickWanderPointに設定し、ファイル保存をクリックします。

マイブループリント⇒変数⇒+ボタンで以下新規変数を作成します。
変数①:MinRadius 変数型:Float デフォルト値:150

変数②:MaxRadius 変数型:Float デフォルト値:300

イベントグラフ上で以下ノード設定をおこないます
■ノード手順

①マイブループリント⇒関数⇒オーバライド⇒Receive Tick AIをクリック

①Event Receive Tick AIのControlled PawnピンとGet Actor LocationのTargetピンを接続
②Get Min RadiusのReturn ValueピンとRandom Float In RangeのMinピンを接続
③Get Max RadiusのReturn ValueピンとRandom Float In RangeのMaxピンを接続

①Event Receive Tick AIの実行ピンとSet Blackboard Value as Vectorの実行ピンを接続
②Get Actor LocationのReturn ValueピンとGet Random Reachable Point in RandiusのOriginピンを接続
③Random Float in RangeのReturn ValueピンとGet Random Reachable Point in RandiusのRadiusピンを接続
④Get Random Reachable Point in RandiusのRandom LocationピンとSet Blackboard Value as VectorのValueピンを接続
⑤Set Blackboard Value as VectorのKeyピンとMake Blackboard Key SelectorのBlackboard Key Selectorピンを接続
⑥Make Blackboard Key SelectorのSelected Key Name欄にWanderLocationを入力
コンパイルして保存します。
ビヘイビアツリー設定
BT_Creatureのビヘイビアツリー画面に移行し、ツリー設定を行います。
■ビヘイビアツリー設定手順

①RootにBB_Creatureが指定されていることを確認
②Root直下にSelectorを指定
①Selectorの直下にSequenceを指定
②Sequence部分を右クリック⇒デコレータを追加⇒Blackboardを選択します。

Blackboard Based Conditionが追加されるので、
詳細⇒ブラックボードを以下設定します
Key Query:Is Set
Blackboard Key:Is Following

以下のルート設定になっていることを確認

③Sequenceを右クリック⇒サービスの追加⇒BTServiceUpdate Follow Locationを選択


BTServiceUpdate Follow Locationの詳細を以下設定
Leader Key:LeaderActor
Dest Key:FollowLocation

①Sequence(BTServiceUpdate Follow Location)の直下にMove Toを指定

②Move Toの詳細設定画面で、
ブラックボード⇒Blackborad KeyをFollowLocationに指定
Acceptable Radius:100に設定
他詳細設定は以下の通りに指定

①Selectorの直下にSequenceを指定
②Sequence部分を右クリック⇒デコレータを追加⇒Blackboardを選択します。

Blackboard Based Conditionが追加されるので、
詳細⇒ブラックボードを以下設定します
Key Query:Is Not Set
Blackboard Key:Is Following

③Sequenceを右クリック⇒サービスの追加⇒BTService_PickWanderPointを選択


BTService_PickWanderPointの詳細を以下設定します。

①Sequence(BTService_PickWanderPoint)の直下にMove ToとWaitを指定

②Move Toの詳細設定
Blackboard KeyをWander Locationに指定
Acceptable Radius:120に設定
他設定は以下の通り

③Waitの詳細設定

6.AIController ブループリント設定
AIフォルダ上を右クリック⇒ブループリントクラスを選択

親クラス選択で、AIControllerを選択します。

ファイル名をBP_CreatureAIにリネームし、ダブルクリックでファイルを開きます。

編集画面でクラスのデフォルトを選択
イベントグラフで以下ノード設定を行います。
■ノード設定

①Event Begin Playの実行ピンとRun Behavior Treeの実行ピンを接続
②Run Behavior TreeのBTAssetをBT_Creatureに指定
コンパイルして保存します。
7.NPC設定
追跡するNPC設定をおこないます。
BPインターフェース作成
BluePrintフォルダ上で右クリック⇒ブループリントインターフェースを選択

ファイル名を”I_Followable”にリネームし、
ダブルクリックでファイルを開きます。

マイブループリント⇒+追加ボタンを選択し、
4つの新規関数を追加していきます。

【追加関数】
関数名①:CanJoin
インプット:InTeam(インプット型:ETeam)
アウトプット:ReturnValue(アウトプット型:Boolean)


関数名②:JoinTeam
インプット:InTeam(インプット型:ETeam)
InLeader(インプット型:アクタ)


関数名③:LeaveTeam


関数名④:GetLeaderTransform
アウトプット:Transform(アウトプット型:アクタ)


コンパイルして保存します。
キャラクターBP追加設定
BP_Creatureをダブルクリックでファイルを開きます。
実装インターフェース設定
BP_Creatureのクラス設定⇒詳細⇒インターフェース⇒実装インターフェースを選択


実装インターフェースの追加ボタンをクリック後、
先ほど作成した”I Followable”
(ブループリントインターフェース)を選択し、追加。
以下の通りにI Followableが追加されれば成功です。

メッシュ設定
コンポーネント⇒BP_Creature(Self)を選択した状態で、
詳細⇒トランスフォームを以下の通りに設定します。
トランスフォーム⇒Mesh
位置:0/0/-90
回転:0/0/-90
拡大縮小:1/1/1

メッシュ⇒Skeletal Mesh Asset
SKM_Manny_Simpleを指定(StarterContentsのデフォルトアセット)

コリジョン設定
コンポーネント⇒Capsule Componentを選択した状態で
詳細⇒コリジョン編集メニューで
コリジョンプリセットをCustomに変更します。

その他コリジョンのカスタム設定を以下の通りに設定します。

Character Movement設定
コンポーネント⇒Character Movementを選択した状態で

詳細⇒キャラクター移動(回転設定)を以下の通りに設定します。

※特にUse Controller Desired Rotationにチェックを入れないと
NPCの移動中の向きが常に同じ方向を向いた状態で移動してしまいます。
インターフェース設定
先ほどクラス設定⇒実装インターフェースにI Fllowableを追加されていれば、
マイブループリントにインターフェースが4つ追加されているのが確認できると思います。
4つのインターフェースを設定していきます。

インターフェース①:GetLeaderTransform

上記のインターフェースをダブルクリックし、編集画面を開きます。
■ノード設定

①GetLeaderTransformの実行ピンとBranchの実行ピンを接続
②BranchのConditionピンとIs Valid(配列)のReturn Valueピンを接続
③Is ValidのObjectピンとGet LeaderのReturn Valueピンを接続

①BranchのTrueピンとGet Actor Transformの実行ピンを接続
※Get Actor Transformを右クリック⇒”実行ピンを表示”をクリック
②Get Actor TransformのTargetピンとGet LeaderのReturn Valueピンを接続
③Get Actor Transformの実行ピンとReturn Nodeの実行ピンを接続

①BranchのFalseピンとGet Actor Transformの実行ピンを接続
②Get Actor Transformの実行ピンとReturn Nodeの実行ピンを接続
インターフェース②:LeaveTeam

マイブループリント⇒インターフェース⇒LeaveTeamをダブルクリック
イベントグラフに配置されるので以下ノード設定をおこないます。
■ノード設定

①Event LeaveTeamの実行ピンとSet Is Folllowingの実行ピンを接続
②Set Is FollowingのIs Followingのチェックは外す(False)
③Set Is Followingの実行ピンとSet Leaderの実行ピンを接続
④Set Leaderの実行ピンとSet Teamの実行ピンを接続
⑤Set TeamのTeam欄⇒Neutralを選択

①Set Teamの実行ピンとGet Controllerの実行ピンを接続
②Get Controllerの実行ピンとCast to BP_CreatureAIの実行ピンを接続
③Get ControllerのReturn ValueピンとCast to BP_CreatureAIのObjectピンを接続

①Cast To BP_CreatureAIの実行ピンとGet Blackboardの実行ピンを接続
②Cast To BP_CreatureAIのAs BP Creature AIピンとGet BlackboardのTargetピンを接続
③Get Blackboardの実行ピンとSet Value as Boolの実行ピンを接続
④Get BlackboardのReturn ValueピンとSet Value as BoolのTargetピンを接続
⑤Set Value as BoolのKey NameピンとMake Literal Name(1)のReturn Valueピンを接続
⑥Make Literal Name(1)のValue欄にIsFollowingを入力
⑦Set Value as Boolの実行ピンとClear Valueの実行ピンを接続
⑧Get BlackboardのReturn ValueピンとClaer ValueのTargetピンを接続
⑨Claer ValueのKey NameピンとMake Literal Name(2)のReturn Valueピンを接続
⑩Make Literal Name(2)のValue欄にLeaderActorを入力
コンパイルして保存します。
インターフェース③:JoinTeam

マイブループリント⇒インターフェース⇒JoinTeamをダブルクリック
イベントグラフ上で以下ノード設定を行います。
■ノード設定

①Event JoinTeamの実行ピンとGet Controllerの実行ピンを接続
②GetControllerの実行ピンとCast To BP_CreatureAIの実行ピンを接続
③GetControllerのReturn ValueピンとCast To BP_CreatureAIのObjectピンを接続

①Cast To BP_CreatureAIの実行ピンとGet Blackboardの実行ピンを接続
②Cast To BP_CreatureAIのAs BP_Creature AIピンとGet BlackboardのTargetピンを接続
③Get Blackboardの実行ピンとSet Value as Objectの実行ピンを接続
④Get BlackboardのReturn ValueピンとSet Value as ObjectのTargetピンを接続
⑤Set Value ObjectのKey NameピンとMake Literal NameのReturn Valueピンを接続
⑥Make LiteralのValue欄にLeaderActorを入力
⑦Set Value as ObjectのObject ValueピンとEvent Join TeamのIn Leaderピンを接続

①Set Value as Objectの実行ピンとSet Value as Boolの実行ピンを接続
②Get BlackboardのReturn ValueピンとSet Value as BoolのTargetピンを接続
③Set Value as BoolのKey NameピンとMake Literal NameのReturn Valueピンを接続
④Make Literal NameのValue欄にIsFollowingを入力
⑤Set Value as BoolのBool Valueにチェックを入れる
コンパイルして保存します。
インターフェース④:CanJoin

マイブループリント⇒インターフェース⇒CanJoinをダブルクリック
カスタムグラフ上で、以下ノード設定を行います。
■ノード設定

①Canjoinの実行ピンとSwitch on ETeamの実行ピンを接続
※Switch on ETeamは、空いているグラフ上で検索⇒ユーティリティの配下にあるノードを選択
②Switch on ETeamのSelectionピンとGet Teamを接続
③Switch on ETeamのNeutralピンとReturn Node(Return Nalueにチェック)の実行ピンと接続
④Switch on ETeamのPlayerピンとReturn Node(Return Nalueにチェック無し)の実行ピンと接続
⑤Switch on ETeamのCPUピンとReturn Node(Return Nalueにチェック無し)の実行ピンと接続
コンパイルして保存します。
EventTickノード設定
イベントグラフに移動し、EventTickのノードを以下設定を行います。
■ノード設定

①Event Tickの実行ピンとBranchの実行ピンを接続
②BranchのConditionピンとAND BooleanのReturn Valueピンを接続
③AND BooleanのAピンとGet Is FollowingのReturn Valueピンを接続
④AND BooleanのBピンとNot BooleanのReturn Valueピンを接続
⑤Not Booleanの実行ピンとGet Use BTMovementのReturn Valueピンを接続

①Branchの実行ピンとGet Leader Transformの実行ピンを接続
②Get Leader Transformの実行ピンとBreak Transformの実行ピンを接続
③Break TransformのIn TransformピンとGet Leader TransformのReturn Valueピンを接続

①Break Transformの実行ピンとGet Forward Vector(演算⇒ベクター)の実行ピンを接続
②Break TransformのRotationピンとGet Forward Vector(演算⇒ベクター)のIn Rotピンを接続
③Break TransformのRotationピンとSubtract(-)のAピンを接続
④Subtract(-)のBピンとMultiply(*)_(1)のReturn Valueピンを接続
⑤Multiply(*)_(1)のAピンとGet Forward VectorのReturn Valueピンを接続
⑥Multiply(*)_(1)のBピンとMultiply(*)_(2)のReturn Valueピンを接続
⑦Multiply(*)_(2)のAピンとGet Follow SpacingのReturn Valueピンを接続
⑧Multiply(*)_(2)のBピンとTo Float (Intenger)のReturn Valueピンを接続
⑨To Float (Intenger)のIntegerピンとAdd(オペレーター)のReturn Valueピンを接続
⑩Add(オペレーター)のAピンとGet Follow IndexのReturn Valueピンを接続
⑪Add(オペレーター)のBピンに1を入力

①Get Actor Locationの実行ピンとVInterp Toの実行ピンを接続
②Get Actor LocationのReturn ValueピンとVInterp ToのCurrentピンを接続
③SubtractのReturn ValueピンとVInterp ToのTargetピンを接続
④VInterp ToのDelta TimeピンとEvent TickのDelta Secondsピンと接続

⑤VInterp ToのInterp Speedを8に設定
⑥VInterp Toの実行ピンとSet Actor Locationの実行ピンを接続
⑦VInterp ToのReturn ValueピンとSet Actor LocationのNew Locationを接続
⑧Set Actor Locationの実行ピンとFind Look at Rotationの実行ピンを接続
⑨Find Look at RotationのStartピンとGet Actor LocationのReturn Valueピンを接続
⑩Find Look at RotationのTargetピンとSubtractのReturn Valueピンを接続

①Find Look at Rotationの実行ピンとRInterp Toの実行ピンを接続
②Find Look at RotationのReturn ValueピンとRInterp ToのTargetピンを接続
③RInterp ToのTargetピンとGet Actor RotationのReturn Valueピンを接続
④RInterp ToのDelta TimeピンとEvent Tick のDelta Secondsピンを接続

⑤RInterp ToのInterp Speedを5に設定
⑥RInterp Toの実行ピンとSet Actor Rotationの実行ピンを接続
⑦RInterp ToのReturn ValueピンとSet Actor RotationのNew Rotationピンを接続
コンパイルして保存します。
BP_Creature詳細設定
BP_Creature(Self)を選択した状態で、詳細画面を表示し以下設定を行います。
■デフォルト設定

■ポーン設定

アニメーションブループリント設定
NPC(BP_Creature)に自然な動きをつけるには、
**Animation Blueprint(アニメーションブループリント)**の設定が欠かせません。
ここでは、アニメーションBP/移動判定/ステートマシン構築の手順を説明していきます。
Animation Blueprint の作成
BluePrintのフォルダで右クリック⇒アニメーションブループリントを選択

特定のスケルトン⇒SK_Mannequinを選択した状態で、
作成をクリックします。

ファイル名をABP_Creatureにリネームし、
ダブルクリックでファイルを開きます。

変数の作成
マイブループリント⇒変数⇒+ボタンをクリックし、
以下変数を追加します。
変数①:Speed/変数型:Float/デフォルト値:0


変数②:bIsMoving/変数型:Boolean/デフォルト値:チェックを外す(False)


イベントグラフの設定
■目的
キャラクターの移動速度をリアルタイムで取得し、
速度に応じて「Idle(待機)」または「Walk(移動)」に切り替えます。
■ノード設定
イベントグラフ画面に移動し、以下ノード設定を行います。

①Event Blueprint Update AnimationとIs Valid(ユーティリティ)のExecピンを接続
②Try Get Pawn OwnerのReturn ValueピンとIs ValidのInput Objectピンを接続
③Try Get Pawn OwnerのReturn ValueピンとGet VelocityのTargetピンを接続

①Is ValidのIs ValidピンとSet Speedの実行ピンを接続
②Get VelocityのReturn ValueピンとVector LengthのAピンを接続
③Vector LengthのReturn ValueピンとSet SpeedのSpeedピンを接続

①Set Speedの実行ピンとSet blsMovingの実行ピンを接続
②Set SpeedのReturn ValueピンとGreater(>)のAピンを接続
③Greater(>)のBピンに3.0を入力
④Greater(>)のReturn ValueピンとSet blsMovingのIs Movingを接続
コンパイルして保存します。
アニメーショングラフの設定
マイブループリント⇒アニメーショングラフ⇒AnimGraphをダブルクリック。

Output PoseのResultからノード展開し、State Machineを接続
State Machine名をLocomotionSMに設定します。

LocomotionSMをダブルクリックで編集画面を開きます。
以下設定を行います。


①Entryからノード展開し、ステートを追加を選択
②ステート名をIdleにリネームし、Idleステートをダブルクリック


①Idleステート内部で、Output Animation PoseのResultピン展開
②アニメーション⇒ブレンドスペース⇒Blendspace”BS_Idle_Walk_Run”を選択
※BS_Idle_Walk_Runはスターターキットにデフォルトで含まれています。

③StrafeとForwardの値をそれぞれ0設定


①LocomotionSM画面に戻り、Idleから展開し、ステート追加を選択
②ステート名をWalkRunに変更し、WalkRunからIdleにも接続
③WalkRunをダブルクリックし、編集画面を開く


①編集画面上でOutput Animation PoseのResultピンを展開
②検索画面でBlendspace Player’BS_Idle_Walk_Run’を選択し接続
③Blendspace Player’BS_Idle_Walk_Run’のForwardピンとGet SpeedのReturn Valueピンを接続


①LocomotionSM画面に戻り、IdleからWalkRunのトランザクションルールを
ダブルクリックし編集画面に入る
②Get IsMovingのReturn ValueピンとResultのCan Enter Transitionピンを接続


①LocomotionSM画面に戻り、WalkRunからIdleのトランザクションルールを
ダブルクリックし編集画面に入る
②Get IsMovingのReturn ValueピンとNOT Booleanの実行ピンを接続
③NOT BooleanのReturn ValueピンとResultのCan Enter Transitionピンを接続
コンパイルして保存します。
BP_Creatureへの適用
作成したABP_Creatureを適用させていきます。
BP_Creatureをダブルクリックし、編集画面を開きます。
コンポーネント⇒Meshを選択した状態で、

詳細画面⇒Animationを以下の通りに設定します。

Animation Mode⇒Use Animation Blueprint
Animクラス ⇒ABP_Creature
コンパイルして保存します。
プレイヤーコントローラーBP設定
PlayerController は、プレイヤーの入力を受け取り、
キャラクター(Pawn/Character)に指示を出す「司令塔」です。
上記の設定をおこなっていきます。
プレイヤーコントローラーの作成


①TopDownフォルダ⇒BP_TopDownControllerを右クリック
②メニュー画面で子ブループリントを作成しますを選択
③ファイル名をBP_PCChaseに設定し、BluePrintフォルダに移動

イベントグラフ設定
BP_PCChaseをダブルクリックで開き、
イベントグラフ画面に移動します。
変数作成
マイブループリント⇒変数⇒+ボタンで新規変数を作成します。
変数①:HoverActor/変数型:BP_Creature(オブジェクトを参照)/デフォルト値:なし

変数②:HoverTime/変数型:Float/デフォルト値:0

変数③:JoinThreshold/変数型:Float/デフォルト値:0.35

変数④PlayerFollowers/変数型:BP_Creature(オブジェクト参照)/配列タイプ/デフォルト値:なし

イベントグラフノード
イベントグラフ画面で以下ノード設定をおこないます。
■ノード設定

①Event Tickの実行ピンとGet Hit Result Under Cursor by Channelの実行ピンを接続
②Get Hit Result Under Cursor by ChannelのTrace ChannelをVisibilityに設定
③Trace Complexをチェック

①Get Hit Result Under Cursor by Channelの実行ピンとCast To BP_Creatureの実行ピンを接続
②Get Hit Result Under Cursor by ChannelのHit ResultピンとBreak Hit ResultのHitピンを接続
③Break Hit ResultのHit ActorピンとCast To BP_CreatureのObjectピンを接続

①Cast To BP_Creatureの実行ピンとSet Hover Actor_1の実行ピンを接続
②Cast To BP_CreatureのAs BP_CreatureピンとSet Hover Actor_1のHover Actorピンを接続
③Set Hover Actor_1の実行ピンとCan Join(Message)の実行ピンを接続
④Set Hover Actor_1のReturn ValueピンとCan JoinのTargetピンを接続
⑤Can JoinのIn TeamをPlayerに指定
⑥Cast To BP_CreatureのCast FailedピンとSet Hover Actor_2の実行ピンを接続
⑦Set Hover Actor_2の実行ピンとSet Hover Timeの実行ピンを接続
⑧Set Hover Timeを0.0に指定

①Can Joinの実行ピンとBranchの実行ピンを接続
②Can JoinのReturn ValueピンとBranchのConditionピンを接続
③BranchのTrueピンとSet Hover Time_1の実行ピンを接続
④Set Hover Time_1のHover TimeピンとAdd(オペレーター)のReturn Valueピンを接続
⑤Add(オペレーター)のAピンとGet Hover TimeのReturn Valueピンを接続

⑥Add(オペレーター)のBピンとEvent TickのDelta Secondsピンを接続
⑦BranchのFalseピンとSet Hover Time_2の実行ピンを接続
⑧Set Hover Time_2の値を0.0に設定

①Set Hover Time_1の実行ピンとBranchの実行ピンを接続
②BranchのConditionピンとGreater Equal(>=)のReturn Valueピンを接続
③Greater Equal(>=)のAピンとGet Hover TimeのReturn Valueピンを接続
④Greater Equal(>=)のBピンとGet Join ThresholdのReturn Valueピンを接続
⑤BranchのTrueピンとGet Controlled Pawnの実行ピンを接続

①Get Controlled Pawnの実行ピンとJoin Team(Message)の実行ピンを接続
②Get Controlled PawnのReturn ValueピンとJoin TeamのIn Leaderピンを接続
③Join TeamのTargetピンとGet Hover ActorのReturn Valueピンを接続
④Join TeamのIn TeamをPlayerに指定

①Join Teamの実行ピンとSet Follow Indexの実行ピンを接続
②Set Follow IndexのFollow IndexピンとLength(配列)のReturn Valueピンを接続
③Length(配列)の配列ピンとGet Player FollowersのReturn Valueピンを接続
④Set Follow IndexのTargetピンとGet Hover ActorのReturn Valueピンを接続

①Set Follow Indexの実行ピンとAdd(配列)の実行ピンを接続
②Add(配列)の配列ピンとGet Player FollowersのReturn Valueピンを接続
③Add(配列)のItemピンとGet Hover ActorのReturn Valueピンを接続
④Add(配列)の実行ピンとSet Hover Timeの実行ピンを接続
⑤Set Hover Timeを0.0に設定
コンパイルして保存します。
詳細設定
BP_PCChase(Self)を選択した状態で、詳細設定をおこないます。
■マウスインターフェース

ゲームモードBP設定
ゲーム全体のルールや初期設定を管理するのが GameMode(ゲームモード) です。
ここでは、プレイヤー操作(PC_Chase)やAI仲間(BP_Creature)の動作を
統合するための BP_GMChase(GameModeBase) の作成手順を解説します。
ゲームモードブループリントの作成


BluePrintフォルダ上を右クリック⇒ブループリントクラスを選択
親クラスをGameModeBaseに設定

ファイル名をBP_GMChaseに設定し、ダブルクリックで開きます。
BP_GMChase設定
BP_GMChase編集画面で、
クラスのデフォルト⇒クラス⇒プレイヤーコントローラークラスを
先ほど作成した”BP_PCChaseを指定します。”

コンパイルして保存します。
現行レベルとの紐づけ
先ほど作成したゲームモードを現行レベルに適用していきます。

ウィンドウ⇒ワールドセッティングを選択

ゲームモード⇒ゲームモードオーバーライドを先ほど作成した
BP_GMChaseに指定。
動作確認
最後にCPU側の動作確認をおこないます。
レベル画面でBP_Creatureを3体ほど任意の場所に配置します。


シミレーションボタンを押して、BP_Creatureにマウスカーソルを当ててクリックをおこない、
上記のように追従してくれるようになっていれば成功です。
