ai mouse

【UE5/AI】仲間NPCをマウスクリックで追従させる機能

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を開いたら、ゲーム⇒トップダウンを選択

以下の通りに設定を行い、プロジェクトを開きます。

image

プロジェクトを開いたら、

ファイル⇒新規レベルをクリック

“基本”を選択し、作成します。

image
image

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

image

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

image

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

image

NavMesh設定

続いて、NPCが自動的に動ける範囲を設定していきます。

FirstMap編集画面⇒アクタを配置⇒ナビメッシュバウンズボリュームを選択します。

image

ナビメッシュバウンズボリュームを

編集画面上にドラック&ドロップし

ナビメッシュバウンズボリュームの

トランスフォーム設定を以下の通りに設定

image

Pボタンを押すと対象範囲が緑色に表示されますので、

ステージ全体が緑色になっていれば成功です。

image

ブループリントフォルダ作成

コンテンツ画面で新規フォルダを作成し、フォルダ名を”BluePrint”とします。

※ブループリント関連ファイルはすべてこのフォルダに格納していきます。

image

列挙型ブループリント作成

BluePrintフォルダ上で右クリック⇒ブループリント⇒列挙型を選択

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

image
image

ETeam(列挙型ブループリント)の編集画面で

列挙子を3つ追加し、

エニュメレーターの表示名

①Neutral ②Player ③CPUを入力します。

image

保存します。

キャラクター ブループリント作成

BluePrintフォルダ内で右クリック⇒ブループリントクラスを選択します。

image

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

image

ファイル名をBP_Creatureにリネームします。

本画面では、既にキャラクターメッシュが表示されていますが、

現時点では、変数設定のみを行います。

image

BP_Creature変数設定

先ほど作成したBP_Creatureをダブルクリックして編集画面を開きます

BP_Creatureのマイブループリント⇒変数⇒+ボタンで

新規変数を追加していきます。

デフォルト値を設定する際には一度コンパイルして編集してください。

image

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

image
image

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

image
image

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

image
image

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

image
image

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

image
image

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

image
image

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

image
image

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

image
image

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

image
image

コンパイルして保存します。

4.ブラックボード設定

AI記憶領域の機能であるブラックボードの実装していきます。

コンテンツフォルダ上から右クリックで新規フォルダを作成

フォルダ名を”AI”と設定します。

image

AIフォルダ上で右クリック

AI⇒ブラックボードを選択します。

image

ファイル名をBB_Creatureにリネームし、

ダブルクリックでファイルを開きます。

image

左上の新規キーを選択し、キー型を選択しながら

以下4つのキーを作成します。

キー名 役割
LeaderActor Object(オブジェクト) プレイヤー(追従対象)
FollowLocation Vector(ベクター) 追従先の位置(背後に並ぶ位置)
WanderLocation Vector(ベクター) 徘徊中に向かうランダムな目的地点
IsFollowing Bool(ブール) 仲間状態かどうか
image

■LeaderActor詳細設定

image

■FollowLocation詳細設定

image

IsFollowing詳細設定

image

WanderLocation詳細設定

image

保存します。

5.ビヘイビアツリー設定

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

image

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

Blackboard Asset設定

詳細パネル⇒ビヘイビアツリー⇒Blackboard Assetを

先ほど作成した”BB_Creatureに指定します。

image

新規サービス設定

ビヘイビアツリーにはサービス機能があり、2つのサービスを実装していきます。

①BTService_UpdateFollowLocation

BT_Creature編集画面の新規サービスをクリック

image

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

image

AIフォルダにファイルが作成されました。

ダブルクリックでファイルを開きます。

image

BTService_UpdateFollowLocation編集画面で

マイブループリント⇒変数⇒+ボタンで、

新規変数を作成します。

変数名①:LeaderKey

変数型:Blackboard key Selector

デフォルト値:none

インスタンス編集可能:チェックを入れる

image
image

変数名②:DestKey

変数型:Blackboard key Selector

image

デフォルト値:none

インスタンス編集可能:チェックを入れる

image

変数名③:FollowSpacing

変数型:Float

デフォルト値:150

image

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

■ノード設定手順

image

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

image

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

image
image

①関数⇒オーバーライド⇒Receive Tick AIを選択

②Event Receive Tick AIの実行ピンとCast To BP_Creatureの実行ピンを接続

③Event Receive Tick AIのControlled PawnピンとCast To BP_CreatureのObjectピンを接続

image

①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を入力

image

①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ピンを接続

image

①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のノードを選択

image
image

①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を入力

image

①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ピンを接続

image
image

①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ピンを接続

image

①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を選択します。

image

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

image

マイブループリント⇒変数⇒+ボタンで以下新規変数を作成します。

変数①:MinRadius 変数型:Float デフォルト値:150

image

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

image

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

■ノード手順

image

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

image

①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ピンを接続

image

①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のビヘイビアツリー画面に移行し、ツリー設定を行います。

■ビヘイビアツリー設定手順

image

①RootにBB_Creatureが指定されていることを確認

②Root直下にSelectorを指定

①Selectorの直下にSequenceを指定

②Sequence部分を右クリック⇒デコレータを追加⇒Blackboardを選択します。

image

Blackboard Based Conditionが追加されるので、

詳細⇒ブラックボードを以下設定します

Key Query:Is Set

Blackboard Key:Is Following

image

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

image

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

image
image

BTServiceUpdate Follow Locationの詳細を以下設定

Leader Key:LeaderActor

Dest Key:FollowLocation

image

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

image

②Move Toの詳細設定画面で、

ブラックボード⇒Blackborad KeyをFollowLocationに指定

Acceptable Radius:100に設定

他詳細設定は以下の通りに指定

image

①Selectorの直下にSequenceを指定

②Sequence部分を右クリック⇒デコレータを追加⇒Blackboardを選択します。

image

Blackboard Based Conditionが追加されるので、

詳細⇒ブラックボードを以下設定します

Key Query:Is Not Set

Blackboard Key:Is Following

image

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

image
image

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

image

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

image

②Move Toの詳細設定

Blackboard KeyをWander Locationに指定

Acceptable Radius:120に設定

他設定は以下の通り

image

③Waitの詳細設定

image

6.AIController ブループリント設定

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

image

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

image

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

image

編集画面でクラスのデフォルトを選択

イベントグラフで以下ノード設定を行います。

■ノード設定

image

①Event Begin Playの実行ピンとRun Behavior Treeの実行ピンを接続

②Run Behavior TreeのBTAssetをBT_Creatureに指定

コンパイルして保存します。

7.NPC設定

追跡するNPC設定をおこないます。

BPインターフェース作成

BluePrintフォルダ上で右クリック⇒ブループリントインターフェースを選択

image

ファイル名を”I_Followable”にリネームし、

ダブルクリックでファイルを開きます。

image

マイブループリント⇒+追加ボタンを選択し、

4つの新規関数を追加していきます。

image

【追加関数】

関数名①:CanJoin

インプット:InTeam(インプット型:ETeam)

アウトプット:ReturnValue(アウトプット型:Boolean)

image
image

関数名②:JoinTeam

インプット:InTeam(インプット型:ETeam)

      InLeader(インプット型:アクタ)

image
image

関数名③:LeaveTeam

image
image

関数名④:GetLeaderTransform

アウトプット:Transform(アウトプット型:アクタ)

image
image

コンパイルして保存します。

キャラクターBP追加設定

BP_Creatureをダブルクリックでファイルを開きます。

実装インターフェース設定

BP_Creatureのクラス設定⇒詳細⇒インターフェース⇒実装インターフェースを選択

image
image

実装インターフェースの追加ボタンをクリック後、

先ほど作成した”I Followable”

(ブループリントインターフェース)を選択し、追加。

以下の通りにI Followableが追加されれば成功です。

image

メッシュ設定

コンポーネント⇒BP_Creature(Self)を選択した状態で、

詳細⇒トランスフォームを以下の通りに設定します。

トランスフォーム⇒Mesh

位置:0/0/-90

回転:0/0/-90

拡大縮小:1/1/1

image

メッシュ⇒Skeletal Mesh Asset

SKM_Manny_Simpleを指定(StarterContentsのデフォルトアセット)

image

コリジョン設定

コンポーネント⇒Capsule Componentを選択した状態で

詳細⇒コリジョン編集メニューで

コリジョンプリセットをCustomに変更します。

image

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

image

Character Movement設定

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

image

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

image

※特にUse Controller Desired Rotationにチェックを入れないと

NPCの移動中の向きが常に同じ方向を向いた状態で移動してしまいます。

インターフェース設定

先ほどクラス設定⇒実装インターフェースにI Fllowableを追加されていれば、

マイブループリントにインターフェースが4つ追加されているのが確認できると思います。

4つのインターフェースを設定していきます。

image
インターフェース①:GetLeaderTransform
image

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

ノード設定

image

①GetLeaderTransformの実行ピンとBranchの実行ピンを接続

②BranchのConditionピンとIs Valid(配列)のReturn Valueピンを接続

③Is ValidのObjectピンとGet LeaderのReturn Valueピンを接続

image

①BranchのTrueピンとGet Actor Transformの実行ピンを接続

※Get Actor Transformを右クリック⇒”実行ピンを表示”をクリック

②Get Actor TransformのTargetピンとGet LeaderのReturn Valueピンを接続

③Get Actor Transformの実行ピンとReturn Nodeの実行ピンを接続

image

①BranchのFalseピンとGet Actor Transformの実行ピンを接続

②Get Actor Transformの実行ピンとReturn Nodeの実行ピンを接続

インターフェース②:LeaveTeam
image

マイブループリント⇒インターフェース⇒LeaveTeamをダブルクリック

イベントグラフに配置されるので以下ノード設定をおこないます。

■ノード設定

image

①Event LeaveTeamの実行ピンとSet Is Folllowingの実行ピンを接続

②Set Is FollowingのIs Followingのチェックは外す(False)

③Set Is Followingの実行ピンとSet Leaderの実行ピンを接続

④Set Leaderの実行ピンとSet Teamの実行ピンを接続

⑤Set TeamのTeam欄⇒Neutralを選択

image

①Set Teamの実行ピンとGet Controllerの実行ピンを接続

②Get Controllerの実行ピンとCast to BP_CreatureAIの実行ピンを接続

③Get ControllerのReturn ValueピンとCast to BP_CreatureAIのObjectピンを接続

image

①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
image

マイブループリント⇒インターフェース⇒JoinTeamをダブルクリック

イベントグラフ上で以下ノード設定を行います。

ノード設定

image

①Event JoinTeamの実行ピンとGet Controllerの実行ピンを接続

②GetControllerの実行ピンとCast To BP_CreatureAIの実行ピンを接続

③GetControllerのReturn ValueピンとCast To BP_CreatureAIのObjectピンを接続

image

①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ピンを接続

image

①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
image

マイブループリント⇒インターフェース⇒CanJoinをダブルクリック

カスタムグラフ上で、以下ノード設定を行います。

ノード設定

image

①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のノードを以下設定を行います。

ノード設定

image

①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ピンを接続

image

①Branchの実行ピンとGet Leader Transformの実行ピンを接続

②Get Leader Transformの実行ピンとBreak Transformの実行ピンを接続

③Break TransformのIn TransformピンとGet Leader TransformのReturn Valueピンを接続

image

①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を入力

image

①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ピンと接続

image

⑤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ピンを接続

image

①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ピンを接続

image

⑤RInterp ToのInterp Speedを5に設定

⑥RInterp Toの実行ピンとSet Actor Rotationの実行ピンを接続

⑦RInterp ToのReturn ValueピンとSet Actor RotationのNew Rotationピンを接続

コンパイルして保存します。

BP_Creature詳細設定

BP_Creature(Self)を選択した状態で、詳細画面を表示し以下設定を行います。

■デフォルト設定

image

ポーン設定

image

アニメーションブループリント設定

NPC(BP_Creature)に自然な動きをつけるには、

**Animation Blueprint(アニメーションブループリント)**の設定が欠かせません。

ここでは、アニメーションBP/移動判定/ステートマシン構築の手順を説明していきます。

Animation Blueprint の作成

BluePrintのフォルダで右クリック⇒アニメーションブループリントを選択

image

特定のスケルトン⇒SK_Mannequinを選択した状態で、

作成をクリックします。

image

ファイル名をABP_Creatureにリネームし、

ダブルクリックでファイルを開きます。

image

変数の作成

マイブループリント⇒変数⇒+ボタンをクリックし、

以下変数を追加します。

変数①:Speed/変数型:Float/デフォルト値:0

image
image

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

image
image

イベントグラフの設定

目的

キャラクターの移動速度をリアルタイムで取得し、

速度に応じて「Idle(待機)」または「Walk(移動)」に切り替えます。

ノード設定

イベントグラフ画面に移動し、以下ノード設定を行います。

image

①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ピンを接続

image

①Is ValidのIs ValidピンとSet Speedの実行ピンを接続

②Get VelocityのReturn ValueピンとVector LengthのAピンを接続

③Vector LengthのReturn ValueピンとSet SpeedのSpeedピンを接続

image

①Set Speedの実行ピンとSet blsMovingの実行ピンを接続

②Set SpeedのReturn ValueピンとGreater(>)のAピンを接続

③Greater(>)のBピンに3.0を入力

④Greater(>)のReturn ValueピンとSet blsMovingのIs Movingを接続

コンパイルして保存します。

アニメーショングラフの設定

マイブループリント⇒アニメーショングラフ⇒AnimGraphをダブルクリック。

image

Output PoseのResultからノード展開し、State Machineを接続

State Machine名をLocomotionSMに設定します。

image

LocomotionSMをダブルクリックで編集画面を開きます。

以下設定を行います。

image
image

①Entryからノード展開し、ステートを追加を選択

②ステート名をIdleにリネームし、Idleステートをダブルクリック

image
image

①Idleステート内部で、Output Animation PoseのResultピン展開

②アニメーション⇒ブレンドスペース⇒Blendspace”BS_Idle_Walk_Run”を選択

※BS_Idle_Walk_Runはスターターキットにデフォルトで含まれています。

image

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

image
image

①LocomotionSM画面に戻り、Idleから展開し、ステート追加を選択

②ステート名をWalkRunに変更し、WalkRunからIdleにも接続

③WalkRunをダブルクリックし、編集画面を開く

image
image

①編集画面上でOutput Animation PoseのResultピンを展開

②検索画面でBlendspace Player’BS_Idle_Walk_Run’を選択し接続

③Blendspace Player’BS_Idle_Walk_Run’のForwardピンとGet SpeedのReturn Valueピンを接続

image
image

①LocomotionSM画面に戻り、IdleからWalkRunのトランザクションルールを

 ダブルクリックし編集画面に入る

②Get IsMovingのReturn ValueピンとResultのCan Enter Transitionピンを接続

image
image

①LocomotionSM画面に戻り、WalkRunからIdleのトランザクションルールを

 ダブルクリックし編集画面に入る

②Get IsMovingのReturn ValueピンとNOT Booleanの実行ピンを接続

③NOT BooleanのReturn ValueピンとResultのCan Enter Transitionピンを接続

コンパイルして保存します。

BP_Creatureへの適用

作成したABP_Creatureを適用させていきます。

BP_Creatureをダブルクリックし、編集画面を開きます。

コンポーネント⇒Meshを選択した状態で、

image

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

image

Animation Mode⇒Use Animation Blueprint

Animクラス ⇒ABP_Creature

コンパイルして保存します。

プレイヤーコントローラーBP設定

PlayerController は、プレイヤーの入力を受け取り、

キャラクター(Pawn/Character)に指示を出す「司令塔」です。

上記の設定をおこなっていきます。

プレイヤーコントローラーの作成

image
image

①TopDownフォルダ⇒BP_TopDownControllerを右クリック

②メニュー画面で子ブループリントを作成しますを選択

③ファイル名をBP_PCChaseに設定し、BluePrintフォルダに移動

image

イベントグラフ設定

BP_PCChaseをダブルクリックで開き、

イベントグラフ画面に移動します。

変数作成

マイブループリント⇒変数⇒+ボタンで新規変数を作成します。

変数①:HoverActor/変数型:BP_Creature(オブジェクトを参照)/デフォルト値:なし

image

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

image

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

image

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

image

イベントグラフノード

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

ノード設定

image

①Event Tickの実行ピンとGet Hit Result Under Cursor by Channelの実行ピンを接続

②Get Hit Result Under Cursor by ChannelのTrace ChannelをVisibilityに設定

③Trace Complexをチェック

image

①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ピンを接続

image

①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に指定

image

①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ピンを接続

image

⑥Add(オペレーター)のBピンとEvent TickのDelta Secondsピンを接続

⑦BranchのFalseピンとSet Hover Time_2の実行ピンを接続

⑧Set Hover Time_2の値を0.0に設定

image

①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の実行ピンを接続

image

①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に指定

image

①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ピンを接続

image

①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)を選択した状態で、詳細設定をおこないます。

■マウスインターフェース

image

ゲームモードBP設定

ゲーム全体のルールや初期設定を管理するのが GameMode(ゲームモード) です。

ここでは、プレイヤー操作(PC_Chase)やAI仲間(BP_Creature)の動作を

統合するための BP_GMChase(GameModeBase) の作成手順を解説します。

ゲームモードブループリントの作成

image
image

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

親クラスをGameModeBaseに設定

image

ファイル名をBP_GMChaseに設定し、ダブルクリックで開きます。

BP_GMChase設定

BP_GMChase編集画面で、

クラスのデフォルト⇒クラス⇒プレイヤーコントローラークラスを

先ほど作成した”BP_PCChaseを指定します。”

image

コンパイルして保存します。

現行レベルとの紐づけ

先ほど作成したゲームモードを現行レベルに適用していきます。

image

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

image

ゲームモード⇒ゲームモードオーバーライドを先ほど作成した

BP_GMChaseに指定。

動作確認

最後にCPU側の動作確認をおこないます。

レベル画面でBP_Creatureを3体ほど任意の場所に配置します。

image
aiclick

シミレーションボタンを押して、BP_Creatureにマウスカーソルを当ててクリックをおこない、

上記のように追従してくれるようになっていれば成功です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です