13.

UE5のレベルブループリントでキャラクターをスポーンさせる方法

編集

Unreal Engine 5(UE5)のレベルブループリントでキャラクターを出現(スポーン)させるには、レベルブループリント内に「Event BeginPlay」などのイベントを置き、そこから「Spawn Actor from Class」ノードを実行して、スポーンしたいクラスと出現位置(Spawn Transform)を指定します。これにより、ゲーム開始時やトリガー発火時など、任意のタイミングで指定したアクターやキャラクターをレベル上に生成できます。この記事では、レベルブループリントの基本から具体的な手順、出現位置・タイミングの決め方、つまずきやすい落とし穴までを順に解説します。

この記事の要点
  • レベルブループリントはそのレベル専用のブループリントで、レベルを開いた状態でツールバーなどから「Open Level Blueprint」を選んで開きます。
  • キャラクターを出現させる中心となるノードは「Spawn Actor from Class」で、出現させるクラスSpawn Transform(位置・回転・スケール)を入力します。
  • 出現タイミングはEvent BeginPlay(ゲーム開始時)や、トリガーボックスのオーバーラップ、入力イベントなど、起点となるイベントで決めます。
  • 出現位置は座標を直接指定するほか、レベル上のPlayer StartやTarget Pointなどのアクターの位置を取得して使うと管理しやすくなります。
  • つまずきやすいのはクラスの指定漏れTransformの未接続出現位置のコリジョン(Collision Handling Override)の3点です。

レベルブループリントとは

レベルブループリントは、現在開いているレベル(マップ)専用に用意されたブループリントです。プロジェクト全体やアクター単体ではなく、「そのレベルでだけ起きる処理」をまとめて記述する場所として使われます。たとえば、特定のレベルでゲームが始まった瞬間に敵を配置する、レベル内の特定のドアを開いたら別のアクターを出現させる、といったレベル固有の演出やイベント処理に向いています。

レベルブループリントは各レベルに1つずつ存在し、レベルを切り替えると参照するレベルブループリントも切り替わります。そのため、汎用的に再利用したい処理は通常アクターのブループリントやゲームモードなどに置き、レベル固有の処理だけをレベルブループリントに書くのが一般的な使い分けです。

レベルブループリントの開き方

レベルブループリントは、出現処理を設定したいレベルを開いた状態から開きます。一般的な手順は次のとおりです(UEのバージョンやレイアウトによりメニュー名や位置が異なる場合があります)。

1. 設定したいレベルをエディタで開きます。

2. メインツールバーの「Blueprints(ブループリント)」ボタンを開き、メニューから「Open Level Blueprint(レベルブループリントを開く)」を選びます。

3. レベルブループリントのグラフエディタが開き、ノードを配置できる状態になります。

レベルブループリントを開くと、初期状態で「Event BeginPlay」や「Event Tick」などのイベントノードが用意されていることがあります。出現処理は、これらのイベントを起点に組み立てていきます。

キャラクターを出現させる手順

ここでは、ゲーム開始時にキャラクターを1体スポーンさせる基本的な流れを示します。大まかには「起点となるイベントを置く」→「Spawn Actor from Classを置く」→「クラスとTransformを指定する」→「(必要なら)操作可能にする」という順序です。

1. 起点となるイベントを用意する

まず、いつ出現させるかを決めるイベントを置きます。ゲーム開始時に出現させたい場合は「Event BeginPlay」を使います。レベルブループリントのグラフ上で右クリックして「Begin Play」と検索し、「Event BeginPlay」を追加します。これはレベルのプレイが開始された直後に一度だけ実行されるイベントです。

2. Spawn Actor from Classノードを追加する

次に、実際に生成を行う「Spawn Actor from Class」ノードを追加します。グラフ上で右クリックし、「Spawn Actor from Class」と検索して追加してください。このノードは指定したクラスのアクターをワールド上に新しく生成します。Event BeginPlayの実行ピン(白い矢印)を、このノードの実行ピンに接続します。

3. 出現させるクラスを指定する

「Spawn Actor from Class」ノードの「Class」入力に、出現させたいキャラクターやアクターのクラスを指定します。あらかじめ作成しておいたキャラクターのブループリント(たとえば Character を継承したブループリント)や、C++クラスを選択します。ここを指定しないとノードは生成対象を決められず、意図したアクターは出現しません。

4. Spawn Transform(位置・回転)を指定する

「Spawn Actor from Class」ノードには「Spawn Transform」という入力があり、ここで出現位置(Location)・回転(Rotation)・スケール(Scale)を指定します。座標を直接決めたい場合は、「Make Transform」ノードを追加して Location や Rotation を入力し、その出力を Spawn Transform に接続します。たとえば Location を X=0, Y=0, Z=100 にすると、ワールド原点から少し上の位置に出現します。後述するように、Player StartやTarget Pointなどのアクターの位置を取得して指定する方法もよく使われます。

5. 必要に応じて操作可能にする(Possess)

スポーンしたものをプレイヤーが操作するキャラクターにしたい場合は、生成しただけでは操作対象になりません。プレイヤーコントローラー(Get Player Controller などで取得)の「Possess」ノードに、スポーンしたアクター(「Spawn Actor from Class」ノードの「Return Value」出力)を渡して憑依(ポゼス)させます。これにより、入力がそのキャラクターに反映されるようになります。なお、敵やNPCのように操作しないアクターであればPossessは不要です。

処理の流れ(イメージ)

Event BeginPlay

 └─▶ Spawn Actor from Class

   ・Class … 出現させるキャラクターのクラス

   ・Spawn Transform … Make Transform(Location / Rotation)

   ・Collision Handling Override … 出現時のコリジョン処理

   ・Return Value … スポーンしたアクターの参照

     └─▶(必要なら)Possess(Player Controller)

出現位置の決め方

出現位置は座標で直接指定することもできますが、レベルの編集に合わせて位置を調整しやすくするために、レベル上に置いたアクターの位置を参照する方法がよく使われます。

位置の指定方法概要向いている場面
座標を直接指定Make Transform に X / Y / Z を入力する位置が固定で、レベル編集で動かさない場合
Player Startを参照レベル上のPlayer Startアクターの位置を取得して使うプレイヤー開始位置に合わせて出したい場合
Target Point等を参照目印として置いたTarget Pointなどの位置を取得して使う出現位置をエディタ上で見ながら調整したい場合

アクターの位置を使う場合は、対象アクターを取得(参照を変数に保持する、または Get Actor of Class などで取得する)してから「GetActorLocation」「GetActorRotation」で位置・回転を取り出し、それを Make Transform に渡します。エディタ上でTarget Pointなどを動かすだけで出現位置を調整できるため、レベルデザインとの相性が良い方法です。

出現タイミングの決め方

「いつ出すか」は起点となるイベントで決まります。代表的なものは次のとおりです。

  • ゲーム開始時:Event BeginPlay を起点にします。レベルのプレイ開始直後に一度実行されます。
  • プレイヤーがエリアに入ったとき:トリガーボックス(Box Collision を持つアクターなど)の OnComponentBeginOverlap といったオーバーラップイベントを起点にします。レベルブループリントからレベル上のトリガーを参照してイベントを受け取る形になります。
  • 入力やゲーム内イベントに応じて:キー入力イベントや、独自に作成したカスタムイベントを起点にして、任意のタイミングでスポーンさせます。

同じ「Spawn Actor from Class」でも、どのイベントから実行するかを変えるだけで「開始時に出す」「踏んだら出す」「ボタンで出す」といった挙動を作り分けられます。

具体例:開始時に敵を1体出現させる

たとえば、レベル開始時に決まった位置へ敵キャラクターを1体出現させる場合の組み立て方は次のようになります。

1. レベルブループリントを開き、「Event BeginPlay」を配置します。

2. 「Spawn Actor from Class」を配置し、BeginPlayの実行ピンと接続します。

3. 「Class」に、出現させたい敵キャラクターのブループリントクラスを指定します。

4. 「Make Transform」を追加し、Location に出現させたい座標(例:X=500, Y=0, Z=100)を入力して、Spawn Transform に接続します。位置をエディタで調整したい場合は、レベルにTarget Pointを置き、その GetActorTransform を Spawn Transform に渡します。

5. 敵は操作しないため Possess は不要です。プレイ開始時に指定位置へ敵が1体出現します。

複数体を出したい場合は、座標を変えて「Spawn Actor from Class」を複数つなぐ、あるいは For Loop などの繰り返しと位置の計算を組み合わせて、まとめて生成する方法があります。

つまずきやすい落とし穴

症状よくある原因と対処
何も出現しない/nullになる「Class」が未指定、または出現位置がコリジョンにより生成を拒否されている可能性があります。クラスを正しく選択し、後述のCollision Handling Overrideを見直します。Return Valueが空(None)になっていないかも確認します。
出現位置がおかしい/原点に出るSpawn Transform が未接続だと意図しない位置(初期値)に出ることがあります。Make Transform や対象アクターのTransformを接続できているか確認します。
床にめり込む/弾かれる出現位置に既存のコリジョンが重なっているケースです。出現Zを少し高くする、出現位置を空いた場所にする、またはCollision Handling Overrideの設定を見直します。
出したキャラクターを操作できないプレイヤーが操作する想定なら、生成後にPlayer ControllerでPossessしているか確認します。逆に敵・NPCならPossessは不要です。

コリジョン(Collision Handling Override)について

「Spawn Actor from Class」ノードには「Collision Handling Override」という入力があり、出現位置に他のオブジェクトのコリジョンが重なっていたときの挙動を指定できます。主な選択肢は次のとおりです(名称はバージョンにより表記が異なる場合があります)。

設定挙動の概要
Default生成するクラス側に設定された既定の挙動に従います。
Always Spawn, Ignore Collisionsコリジョンを無視して指定位置に必ず生成します(重なって出ることがあります)。
Try To Adjust Location, But Always Spawn重なりを避ける位置への調整を試み、無理でも必ず生成します。
Try To Adjust Location, But Don't Spawn If Still Colliding調整を試み、それでも重なる場合は生成しません(出現しないことがあります)。
Do Not Spawn指定位置でコリジョンが重なっていれば生成しません。

「出現するはずなのに出ない」という場合、この設定が「重なっていたら生成しない」系になっていて、出現位置が壁や床、他アクターと重なっているケースが少なくありません。確実に出したいときは「Always Spawn, Ignore Collisions」を使い、出現後に位置を調整するといった対処が考えられます。ただしコリジョンを無視すると物理的に不自然な重なりが起きることもあるため、出現位置自体を空いた場所に取り直すことも検討してください。

よくある質問(FAQ)

Q. レベルブループリントとゲームモードのどちらでキャラクターを出すべきですか?

プレイヤーが操作する主人公キャラクターのように「どのレベルでも共通して出したいもの」は、ゲームモードのDefault Pawn ClassやPlayer Startの仕組みに任せると管理しやすくなります。一方、「このレベルだけで起きる演出」「特定の場所で敵を湧かせる」といったレベル固有の出現は、レベルブループリントで組むのが向いています。用途に応じて使い分けるのが基本です。

Q. スポーンしたキャラクターを後から操作したり、動かしたりできますか?

できます。「Spawn Actor from Class」ノードの「Return Value」が生成したアクターへの参照(リファレンス)なので、これを変数に保存しておけば、後からアニメーションを再生する、移動させる、プロパティを変更するなどの処理を続けて行えます。プレイヤー操作にしたい場合はPossessを使います。

Q. プレイヤーキャラクターが二重に出てしまうのですが?

ゲームモードのDefault Pawn ClassとPlayer Startによる自動スポーンと、レベルブループリントでの手動スポーンが両方走っていると、プレイヤーが重複して出ることがあります。手動でスポーン・Possessする運用にする場合は、ゲームモード側の自動スポーンを使わない構成にするなど、どちらか一方に出現の責任を寄せると整理しやすくなります。

レベルブループリントによるスポーンは、出現タイミングと位置を細かく制御できるのが利点です。まずはEvent BeginPlayから「Spawn Actor from Class」へつなぐ最小構成で1体出すところから始め、位置の参照方法やコリジョン設定、Possessの有無を必要に応じて足していくと、無理なく目的の出現処理を組み立てられます。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 床の上に乗ったらイベントを発生させる方法
  2. OverlapAllDynamicとOverlapAllの違い
  3. タイトル画面を作る方法
  4. サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
  5. ボタンに文字を記載する方法
  6. Event ActorBeginOverlapとOn Component Begin Overlapの違い
  7. キャラクターに特定のオブジェクトとの当たり判定を付ける
  8. 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
  9. 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
  10. 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
  11. Blenderファイルをインポートする方法
  12. 鏡を作成する方法
  13. レベルブループリントでキャラクターの出現を設定する方法
  14. サードパーソンテンプレートにおけるキャラクター出現の定義
  15. アイテムに近づいたらボタンを押してイベントを発火させる方法
  16. 画面の中央にメッセージを表示する方法
  17. どこからでも呼び出せるカスタムイベントを作成する方法
  18. カスタムイベントに引数を追加する方法
  19. 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
  20. オブジェクトに近づいている間だけメッセージを表示する方法
  21. PCの画面を操作するUIを作る方法
  22. コンテンツブラウザに画像を追加する方法
  23. SetInputMode_UIOnlyを取り消す方法
  24. 特定の画像の上にマウスカーソルを置いたら手マークにする方法
  25. オブジェクトがアウトライナーで選択できない原因と解決策
  26. PlayerStartを作成する方法
  27. メニュー画面を作成して開く方法
  28. 「Esc」キーを押してメニュー画面を開く方法
  29. イベントの「On Clicked」と「On Pressed」の違い
  30. 「Set Input Mode」の種類と使い方
  31. 「Set Game Paused」の使い方と詳細解説
  32. Motion Matchingとは?
  33. 「GameMode」と「GameModeBase」の違い
  34. マップに配置したTargetPointを取得する方法
  35. TargetPointにタグをつけて取得する方法
  36. Spawnしたインスタンスがイベントを実行する方法
  37. 特定の時間ごとに処理を実行する方法
  38. 数値をランダムで出力する方法
  39. ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
  40. MaxWalkSpeedを変更する方法
  41. しゃがむ動作を導入する方法
  42. キャラクターのアニメーションを設定する方法
  43. 導入済みのプラグインを確認する方法
  44. Motion Matchingの導入と必要なプラグイン
  45. プレイヤーを非表示にする方法
  46. カメラを傾ける角度を制限させる方法
  47. 配列からランダムに重ならない要素を特定の数取得する方法
  48. カメラの映す画面に文字やエフェクトを付ける方法
  49. キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
  50. プライマリーデータアセットを活用する方法
  51. プレイヤーのHPといった変数を定義する最適な場所
  52. カメラに映った画面をスクリーンショットとして保存する方法
  53. ゲーム内のカメラ映像を保存して再表示する方法
  54. HighResShot を使って高解像度の画像を保存する方法(UE5)
  55. HighResShotで保存した画像のファイル名を取得する方法
  56. SceneCapture2DとFrameGrabberの画像保存方法の比較
  57. SceneCapture2Dを使用して画像を保存・取得する方法
  58. HighResShotとTake High Res Screenshotの違い
  59. ゲーム終了ボタンを作成する方法
  60. 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
  61. 画面上にメッセージを指定された時間表示させる方法
  62. シェーダコンパイル時間を短縮する方法
  63. 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
  64. データベースを活用する方法
  65. UE5.5がインストールされた環境にUE5.4を追加で導入する方法
  66. World PartitionとWorld Compositionの違い
  67. オープンワールドテンプレートとは?
  68. ポーンをスポーンさせても視点を切り替えない方法
  69. キャラクター同士がすり抜けてしまう問題の解決方法
  70. キャラクターの外見を動的に変更
  71. World Partitionでインスタンスが「アンロード済み」になる問題
  72. データ アセットとデータ テーブルの違い
  73. コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
  74. エディターのソースコードの自動保存の頻度を高める方法
  75. SpawnActorでSpawn Transform Rotationが反映されない理由
  76. ミニマップを表示しポーンの位置を反映する方法
  77. RInterp ToとVInterp Toの違い
  78. 毎秒実行するイベントの定義方法
  79. Niagara のエフェクトにコリジョンを持たせる方法
  80. 「Overlap」と「Hit」の違い
  81. OverlapはあるがHitがない原因
  82. Overlapした位置の座標を取得する方法
  83. ブループリントでレベル間のパラメータを受け渡す方法

最近更新/作成されたページ