0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnrealEngineをチュートリアル動画で学習する その6

Last updated at Posted at 2024-10-04

はじめに

UnrealEngineを学習するにあたってのメモを記事にまとめます。
本記事では完結せず何回か分けて記事にする予定です。

前回

今回やること

UnrealEngineの公式サイトにあるLearningの「Your First Game In Unreal Engine 5」を題材に学習していきます。

本記事では主に以下を扱います。

  • キャラクターの移動
  • キャラクターのアニメーション
  • BOT(CPU)の作成
  • BOT(CPU)が追尾するアイテムの動的生成

[開発環境]
windows 11
UnrealEngine 5.3.2

Character Movement

動画時間:43:04~

  • 「BP_Bot」の編集エディタを開く
  • 「コンポーネント」欄の「Mesh(CharacterMesh0)」を選択する
  • 「詳細」欄の「Mesh」の「Skeletal Mesh Asset」を「SKM_Antbot」を選択する
  • 「詳細」欄の「トランスフォーム」の「位置 Z」を「-70」「回転 Z」を「-90」に設定する
  • 「コンポーネント」欄の「Capsule Component(CollisionCylinder)」を選択する
  • 「詳細」欄の「形状」の「Capsule Half Height」を「70」、「Capsule Radius」を「25」に設定する
  • 「コンパイル」を押して編集を適応させる

スクリーンショット

  • プレイボタンを押すと、キャラクターが出てくるのが確認出来る

スクリーンショット

  • 「コンポーネント」欄の「Character Movement(CharMoveComp)」を選択する
  • 「詳細」欄の検索欄に「rot」と入れる
  • 「詳細」欄の「Rotation Rate Z」を「420」、「Orient Rotation to Movement」をONにする
  • 「コンパイル」を押して編集を適応させる

スクリーンショット

  • 「コンポーネント」欄の「SpringArm」を選択する
  • 「詳細」欄の「回転」を「ワールド」に変えて「絶対回転」にする
  • 「コンパイル」を押して編集を適応させる

スクリーンショット

この後、実行するとキャラクターが移動方向を向くのだが、回転しませんでした。キャラクターの回転方法を調べると、以下をやると解消されました。

  • 「コンポーネント」欄の「BP_Bot」を選択する
  • 「詳細」欄の「ボーン」の「Use Controller Rotation Yaw」を無効にする

次にパラメータの設定をする

  • 「コンポーネント」欄の「Character Movement(CharMoveComp)」を選択する
  • 「詳細」欄の検索欄に「キャラクタームーブメント:基本セッティング」の「Max Acceleration」を「500」と入れる
  • 「詳細」欄の検索欄に「キャラクタームーブメント:歩行」の「Max Step Height」を「60」と入れる
  • 「詳細」欄の検索欄に「キャラクタームーブメント:歩行」の「Walkable Floor Angle」を「60」と入れる
  • 「詳細」欄の検索欄に「キャラクタームーブメント:歩行」の「Ground Friction」を「0」と入れる
  • 「詳細」欄の検索欄に「キャラクタームーブメント:歩行」の「Max Walk Speed」を「400」と入れる
  • 「詳細」欄の検索欄に「キャラクタームーブメント:歩行」の「Braking Deceleration Walking」を「800」と入れる

スクリーンショット

  • プレイボタンを押して、キャラクターが移動方向を向いて移動するようになる

Animation

動画時間:45:22~

  • 「コンテンツドロワー」を開いて、「Character」フォルダに「Animations」フォルダを作成する
  • インポートを押して、素材フォルダから「Character/Animations/A_Antbot_Idle.fbx」、「Character/Animations/A_Antbot_Run.fbx」、「Character/Animations/A_Antbot_Walk.fbx」を選択して開く
  • インポート設定で「Skeleton」を「SKM_Antbot_Skeleton」を選択し、「Inmprt Mesh」をOFFにする

スクリーンショット

  • 「全てインポート」して、3つインポートする

スクリーンショット

  • 「Animations」フォルダで右クリックして、「アニーション->アニメーションブループリント」を選択し、名前を「ABP_Bot」にする

スクリーンショット

  • 「ABP_Bot」をダブルクリックして、編集エディターを開く
  • 「AnimGraph」を選択して、「アセットブラウザ」の「A_Antbot_Idle」をドラッグ&ドロップして入れる
  • 「A_Antbot_Idle」->「Output Pose(Result)」に接続する

アニメーションがループしない
実際に再生するとアニメーションループしないことがありました。以下の設定でLoopするようになりました。

  • 「A_Antbot_Idle」を選択
  • 「詳細/設定」の「Loop Animation」をONにする

スクリーンショット

  • 「Framework」フォルダにある「BP_Bot」の編集エディターを開く
  • コンポーネントの「Mesh(CharacterMesh0)」を選択し、「詳細」の「Animation」の「Anim Class」を「ABP_Bot_C」に選択する
  • コンパイルを実行する

スクリーンショット

  • プレイボタンを押すと、立ちアニメーションが着いているのが確認出来る
  • 「ABP_Bot」の編集エディターを開く
  • 「A_Antbot_Idle」を削除する
  • 「State Machine」コンポーネントを追加し、名前を「Locomotion」にする
  • 「Locomotion(StateMachine)」->「Output Pose(Result)」に接続する

スクリーンショット

  • 「Locomotion(StateMachine)」をダブルクリックして、ステート編集画面を開く
  • 右クリックで「ステートの追加」をして、名前を「Idle」にする
  • 「Entry」->「Idle」に接続する
  • 右クリックで「ステートの追加」をして、名前を「Walk/Run」にする
  • 「Idle」->「Walk/Run」に接続する
  • 「Walk/Run」->「Idle」に接続する

スクリーンショット

  • 「Idle」ステートをダブルクリックして、ステート編集画面を開く
  • 「アセットブラウザ」の「A_Antbot_Idle」をドラッグ&ドロップして入れる
  • 「A_Antbot_Idle」->「Output Pose(Result)」に接続する

スクリーンショット

  • 「Locomotion(StateMachine)」に戻る
  • 「Walk/Run」ステートをダブルクリックして、ステート編集画面を開く
  • 「アセットブラウザ」の「A_Antbot_Walk」をドラッグ&ドロップして入れる
  • 「A_Antbot_Walk」->「Output Pose(Result)」に接続する

スクリーンショット

  • 「Locomotion(StateMachine)」に戻る
  • 「Idle」->「Walk/Run」を繋いでる、トランジションルールをダブルクリックで選択する
  • 上部タブの「Event Graph」を選択する
  • 「? Is Valid」ノードを作成する
  • 「Try Get Pawn Owner」->「? Is Valid(InputObject)」に接続する
  • 「Event Blueprint Update Animation」->「? Is Valid(Exec)」に接続する
  • 「Get Velocity」ノードを作成する
  • 「Try Get Pawn Owner」->「Get Velocity」に接続する
  • 「Vector Length XY」ノードを作成する
  • 「Get Velocity」->「Vector Length XY」に接続する
  • ノードメニューの「Promote to variable」を選んで「SET」ノードを作成する
  • 「変数」のFloatとパラメーター名を「GroundSpeed」に変更
  • 「Vector Length XY」->「SET GroundSpeed」に接続する
  • 「? Is Valid(Is Valid)」->「SET GroundSpeed(実行)」に接続する
  • コンパイルを実行して更新する

スクリーンショット

  • 上部タブの「IdleからWalk/Run」を選択する
  • 「変数」の「GroundSpeed」をドラッグ&ドロップして「Get」を選択して入れる
  • 「>」ノードを作成する
  • 「GroundSpeed」->「>」に接続する
  • 「>」->「Result」に接続する

スクリーンショット

  • 「Locomotion(StateMachine)」に戻る
  • 「Walk/Run」->「Idle」を繋いでる、トランジションルールをダブルクリックで選択する
  • 「変数」の「GroundSpeed」をドラッグ&ドロップして「Get」を選択して入れる
  • 「<=」ノードを作成する
  • 「<=」ノードのパラメーターを「5.0」する
  • 「GroundSpeed」->「<=」に接続する
  • 「<=」->「Result」に接続する
  • コンパイルを実行して更新する

スクリーンショット

  • プレイボタンを押すと、キャラクターを動かすと、移動速度によって停止と歩きモーションが切り替わります
  • 次に走りモーションを付けるため、「Walk/Run」ステートの「A_Antbot_Walk」を削除する
  • コンテンツドロワーを開き、「Character/Animations」フォルダを選択する
  • 右クリックして「アニーション/ブレンドスペース」を作成する
  • ファイル名を「BP_WalkRun」にする

スクリーンショット

  • 「アセット詳細」の「水平軸/Name」を「Speed」に変更する
  • 「アセット詳細」の「水平軸/Maximum Axis Value」を「400」に変更する
  • 「アセットブラウザ」の「A_Antbot_Run」「A_Antbot_Walk」をグラフにドラッグ&ドロップして入れる
  • 「A_Antbot_Walk」を左に「A_Antbot_Run」を右に配置する
  • 「アセット詳細」の「解析/水平軸関数」を「Locomotion」に変更する
  • 「解析/水平軸関数/Anlysis Properties」の「Bone/Socket1」を「foot_l」に変更する
  • 「解析/水平軸関数/Anlysis Properties」の「Bone/Socket2」を「foot_r」に変更する
  • 保存する

スクリーンショット

  • 「ABP_Bot」の「Walk/Run」ステートに戻る
  • 「アセットブラウザ」にある「BS_WalkRun」をドラッグ&ドロップで入れる
  • 「BS_WalkRun」->「Output Animation Pose (Result)」に接続する
  • 「変数」の「GroundSpeed」をドラッグ&ドロップして「Get」を選択して入れる
  • 「GroundSpeed」->「BS_WalkRun(Speed)」に接続する
  • コンパイルを実行して更新する

スクリーンショット

  • プレイボタンを押すと、キャラクターを動かすと、移動速度によって停止->歩き->走りへモーションが切り替わります

AI Controller

動画時間:52:30~

  • コンテンツドロワーを開いて「Framework/BP_Bot」をValleyレベル内(ワールド)にドラッグ&ドロップして入れる

スクリーンショット

  • コンテンツドロワーを開く
  • 「Framework」内で右クリックして「ブループリントクラス」を選択する
  • 「All CLASSES」の検索で「ai」と入力する
  • 検索候補から「AI Controller」を選択する
  • 作成する名前を「BP_AIController」にする

スクリーンショット

スクリーンショット

  • 「AI Controller」をダブルクリックして、編集エディターを開く
  • 「イベントグラフ」タブを選択する
  • 「Event Tick」を削除する
  • 「AI MoveTo」ノードを追加する
  • 「Set Timer by Event」ノードを追加する
  • 「Event BeginPlay」->「Set Timer by Event(実行)」に接続する
  • 「Set Timer by Event」の「Time」を「3」にする
  • 「Custom Event」ノードを追加し、名前を「Move」にする
  • 「Set Timer by Event(Event)」->「Move Custom Event(デリゲート)」に接続する
  • 「Move Custom Event(実行)」->「AI MoveTo(実行)」に接続する
  • 「Get Controlled Pawn」ノードを追加する
  • 「Get Controlled Pawn」->「AI MoveTo(Pawn)」に接続する
  • コンパイルを実行して更新する

スクリーンショット

  • Valleyレベルを開き、追加した「BP_Bot」を選択する
  • 「詳細/ポーン」の「AI Controller Class」を作成した「BP_AIController」にする

スクリーンショット

  • 「ナビメッシュバウンズボリューム」を追加する

スクリーンショット

  • 追加した「NavMeshBoundsVolume」を選択して「P」キーを押すと、地面との接触面が可視化される

スクリーンショット

  • 「NavMeshBoundsVolume」のXZ軸のスケールをステージに収まるように拡大する

スクリーンショット

  • プレイボタンを押すと、ポッドが特定の位置(0,0,0)に自動で移動するのが確認出来る

  • 「コンテンツドロワー」を開いて、「Framework/BP_Bot」をダブルクリックして編集エディターを開く

  • 「Construction Script」タブを選択する

  • 「コンポーネント/BP_Bot/Capsule Component/Mesh」をグラフの中にドラッグ&ドロップして入れる

  • 「Create Dynamic Material Instance」ノードを追加する

  • 「Meshh」->「Create Dynamic Material Instance(Target)」に接続する

  • 「Construction Script」->「Create Dynamic Material Instance(実行)」に接続する

  • 「Create Dynamic Material Instance」の「Return Value」から「Set Vector Parameter Value」ノードを追加する(個別に「Set Vector Parameter Value」追加しても別のが出てくるので「Return Value」からラインを引っ張って作る)

  • 「Set Vector Parameter Value」の「Parameter Name」を「Color」にする

  • 「Set Vector Parameter Value」の「Value」を「R:0.17 G:0.24 B:0.78」にする

  • コンパイルを実行して更新する

スクリーンショット

  • 「M_BotBase」マテリアルで色指定しているパラメーター名を「Color」にする

スクリーンショット

  • 追加したボットの色が変わっている

スクリーンショット

  • 「BP_Bot」の編集エディターを再度開く
  • 「Set Vector Parameter Value」の「Value」からラインを引いて「Promote to variable」を選択してノードを作成する
  • 変数にColorのパラメーターが追加されるので、名前を「Color」にし、瞳アイコンをクリックして表示をONにする
  • コンパイルを実行して変数定義を更新する
  • 「Color」変数を選択する
  • 「詳細」の「Color」を「R:0.78 G:0.34 B:0.00」にする
  • コンパイルを実行して更新する

スクリーンショット

  • レベルに戻って追加したボットの色が変わっている

スクリーンショット

  • レベルの「BP_Bot」を選択する
  • 「詳細」の「Color」を「R:0.014 G:0.072 B:0.780」にする
  • ボットの色が変わる

スクリーンショット

Spawn and collect Orbs

動画時間:55:46~

  • 「コンテンツドロワー」を開いて、「Props」を選択する
  • 素材フォルダの「Props」から「SM_Door.FBX」「SM_Modular_WallDoor.FBX」「SM_Pickup_Orb.FBX」「SM_PressurePlate_Frame.FBX」「SM_PressurePlate_Platform.FBX」をそのままインポートする

スクリーンショット

  • 「コンテンツドロワー」を開いて、「GameElements」を選択する
  • 右クリックして「プループリント/Actor」を選択し、名前を「BP_Orb」にする
  • 「BP_Orb」をダブルクリックして編集エディターを開く
  • 「コンポーネント」に「SM_Pickup_Orb.FBX」をドラッグ&ドロップで入れる
  • 「SM_Pickup_Orb」をドラッグ&ドロップで「DefaultSceneRoot」に上書きする
  • 「詳細/コリジョン/コリジョンプリセット」を「OverlapOnlyPawn」にする
  • コンパイルを実行して更新する

スクリーンショット

  • 「編集」から「プロジェクト設定」を開く
  • 「インプット」の「アクションマッピング」に新規でアクションマッピングのグループを追加し、名前を「SpawnOrb」にする
  • グループ内にアクションマッピングを追加し「キーボード」の「スペースバー」にする

スクリーンショット

  • 「コンテンツドロワー」を開いて、「Framework/BP_PlayerController」の編集エディターを開く
  • ノード追加でAction Eventの「Spawnorb」を選択した「inputAction SpawnOrb」ノードを追加する
  • 「inputAction SpawnOrb」の「Released」からラインを引いて「Spawn Action form class」を選択して「Spawn Action」ノードを追加する
  • 「Spawn Action」の「Class」を「BP_Orb」を設定する
  • 「Spawn Action」の「Spawn Transform」を右クリックして「構造体ピンの分割」を選択する
  • イベントグラフ内に以前作成した「GetControlled Pawn」「Get Actor Location」のセットを複製する
  • 「Get Actor Location」->「Spawn Action(Spawn Transform Location)」に接続する
  • コンパイルを実行して更新する

スクリーンショット

  • プレイボタンを押して実行すると、スペースキーを押すと、BP_Orbが生成される

スクリーンショット

  • 「コンテンツドロワー」を開いて、「Framework/BP_AIController」の編集エディターを開く
  • 「マイプループリント」の「関数」に新規の関数を追加し、名前を「FindOrb」にする
  • 「FindOrb」関数を選択する
  • 「詳細/アウトプット」に追加して、名前を「Success」にする
  • さらに「アウトプット」に追加をして、名前を「OrbActor」にする
  • 「OrbActor」の変数のタイプを「オブジェクトタイプ/Actor/オブジェクト参照」を選択する
  • 「Find Orb」ノードと「Return Node」ノードの接続句を切る
  • 「Get All Actors of Class」ノードを追加する
  • 「Find Orb」->「Get All Actors of Class(実行)」に接続する
  • 「Get All Actors of Class」の「Actor Class」を「BP_Orb」にする
  • 「Get All Actors of Class(OutActors)」->「LENGTH」に接続する
  • 「LENGTH」->「>」に接続する
  • 「>」->「Branch」に接続する
  • 「Get All Actors of Class(実行)」->「Branch(実行)」に接続する
  • 「Return Node」を複製して片方の「Success」をOnにする
  • 「Branch(True)」->「Return Node(実行)」(Success On)に接続する
  • 「Branch(False)」->「Return Node(実行)」(Success Off)に接続する
  • 「Get All Actors of Class(OutActors)」->「Get」に接続する
  • 「Get」->「Return Node(OrbActor)」(Success On)に接続する
  • コンパイルを実行して更新する

スクリーンショット

  • 「BP_AIController」の「イベントグラフ」を開く
  • 「FindOrb」関数を選択する
  • 「詳細/グラフ」の「純粋」をONにする
  • 「関数」の「FindOrb」をドラッグ&ドロップしてグラフに入れる
  • 「Branch」ノードを作成する
  • 「Move(実行)」->「Branch(実行)」に接続する
  • 「FindOrb(Success)」->「Branch(Condition)」に接続する
  • 「Branch(True)」->「AI MoveTo(実行)」に接続する
  • 「FindOrb(OrbActor)」->「AI MoveTo(Target Actor)」に接続する
  • 「Move」ノードを作成する
  • 「AI MoveTo(on Success Actor)」->「Move(実行)」に接続する
  • 「Set Timer by Event」の「Looping」を「ON」にする
  • コンパイルを実行して更新する

スクリーンショット

  • プレイボタンを押して実行すると、生成されたBP_OrbにBotが移動する

スクリーンショット 2024-06-24 200823.jpg

  • 「BP_Orb」の編集エディターを開く
  • 「コンポーネント/SM_Pickup_Orb」を右クリックして、「イベントを追加/ComponentBeginOverlapを追加」を選択すると「OnComponentBeginOverlap」が作成される
  • 「Cast to Pawn」を追加する
  • 「OnComponentBeginOverlap(実行)」->「Cast to Pawn(実行)」に接続する
  • 「OnComponentBeginOverlap(Other Actor)」->「Cast to Pawn(Object)」に接続する
  • 「Cast to Pawn」の「As Pawn」から「Is Player Controller」ノードを生成する
  • 「Is Player Controller」の「Return Value」から「Branch」ノードを生成する
  • 「Cast to Pawn(実行)」->「Branch(実行)」に接続する
  • 「Destroy Actor」ノードを作成する
  • 「Branch(False)」->「Destroy Actor(実行)」に接続する
  • コンパイルを実行して更新する

スクリーンショット

  • プレイボタンを押して実行すると、生成されたBP_OrbにBotが触れると消える。これによって生成されたBP_OrbにそってBotが移動する挙動になる

次回

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?