Level BlueprintとBlueprint Classの概要
Unreal Engine (UE) でゲームロジックを構築する際、主に2つの選択肢があります。
- Level Blueprint:レベル全体を制御する、そのレベル専用の設計図。
- Blueprint Class:再利用可能なアクターやコンポーネントの振る舞いを定義する設計図。
本記事では、この2つの根本的な違いと、それぞれのメリット・デメリット、使い分けの基準を解説します。
Level Blueprintとは
Level Blueprintの基本概念
Level Blueprint は、その名の通り、特定のレベル(マップ)専用 のブループリントです。
これは、レベルを開いたときに自動的に実行されるロジックを記述するために存在します。Level Blueprintは、レベル内の複数のアクターを参照し、それらを連携させる「司令塔」のような役割を果たします。
特徴:
- レベルに紐づく: 他のレベルでは使用できません。
- アクター参照が容易: レベル内に配置されたアクターを直接参照し、イベントを呼び出すことができます。
- シングルトン: 各レベルに1つしか存在しません。
Level Blueprintの使用例
Level Blueprintが最も輝くのは、そのレベル固有の、一度きりのイベント を制御する場合です。
使用例:レベル開始時の演出と扉の開閉
例えば、「プレイヤーが特定のトリガーボリュームに入ったら、レベル内の特定の扉を開ける」というロジックを考えてみましょう。
// Level Blueprintの例: 扉の開閉ロジック
// 1. トリガーボリューム (TriggerBox_Door) のOverlapイベント
Event OnActorBeginOverlap (Other Actor == PlayerCharacter)
// 2. 扉アクター (Door_BP) のカスタムイベントを呼び出す
Call Custom Event: OpenDoor (Target: Door_BP)
// 3. イベントが一度きりなら、このトリガーを無効化する
Disable Input (Target: TriggerBox_Door)
このロジックは、このレベルのこの扉に対してのみ適用されるため、Level Blueprintに記述するのが最もシンプルで直感的です。
Blueprint Classとは
Blueprint Classの基本概念
Blueprint Class は、ゲーム内のアクター(Actor) やコンポーネント(Component) の振る舞いを定義するための、再利用可能な設計図 です。
例えば、「爆発する樽」「拾えるアイテム」「動くプラットフォーム」など、ゲーム内で何度も登場するオブジェクトの共通の機能やプロパティをカプセル化するために使用されます。
特徴:
- 再利用性: 複数のレベルやプロジェクトでインスタンス化して使用できます。
- カプセル化: データ(変数)と機能(関数/イベント)が一つにまとまっています。
- 継承: 既存のBlueprint Classを親として、新しい機能を追加した子クラスを作成できます。
Blueprint Classの使用例
Blueprint Classは、ゲームの基本的な要素 や再利用したい機能 を定義するのに適しています。
使用例:ダメージを受ける樽アクター
「プレイヤーが攻撃すると爆発する樽」を作成する場合、樽自体をBlueprint Classとして作成します。
// Blueprint Class (BP_ExplosiveBarrel) の例: ダメージ処理
// 1. ダメージを受けたときのイベント
Event AnyDamage (Damage Amount, Damage Type, Instigator, Damage Causer)
// 2. 体力変数 (Health) を減らす
Set Health = Health - Damage Amount
// 3. 体力が0以下になったかチェック
If (Health <= 0)
// 4. 爆発処理を実行するカスタムイベントを呼び出す
Call Custom Event: Explode
この BP_ExplosiveBarrel は、レベル内のどこに配置しても同じ振る舞いをします。これがBlueprint Classの最大の強みである再利用性 です。
Level BlueprintとBlueprint Classの比較
| 項目 | Level Blueprint | Blueprint Class |
|---|---|---|
| 目的 | 特定のレベルのイベント制御、レベル内のアクター連携 | 再利用可能なアクター/コンポーネントの振る舞い定義 |
| 再利用性 | 不可 (そのレベル専用) | 可能 (インスタンス化してどこでも使用) |
| カプセル化 | 低 (レベル内の外部アクターに依存) | 高 (データとロジックがクラス内に完結) |
| 継承 | 不可 | 可能 (親クラスの機能を拡張できる) |
| 参照 | レベル内のアクターを直接参照しやすい | 他のアクターを参照するには、Get All Actors Of Classなどの間接的な方法が必要 |
| パフォーマンス | 複雑になると参照が多くなり、管理・最適化が困難になりがち | 構造化されており、パフォーマンスの最適化がしやすい |
| 推奨度 | 限定的 (レベル固有のイベントに限定して使用) | 高 (ゲームロジックの基本) |
注意: Get All Actors Of Classは全てのアクターを走査するため、大量のアクターが存在するレベルではパフォーマンスに悪影響 を及ぼす可能性があります。頻繁に呼び出す場合は、参照をキャッシュするか、タグベースの検索を検討してください。
使い分けの基準
迷ったときは、以下の「黄金律」に従って選択してください。
| シナリオ | 選択すべきブループリント | 理由 |
|---|---|---|
| ゲーム内の「モノ」の振る舞い (樽、ドア、敵、アイテム) | Blueprint Class | 再利用性、カプセル化、継承による効率的な開発。 |
| 特定の レベルの「演出」や「流れ」 (レベル開始時のカメラワーク、レベルクリア判定) | Level Blueprint | そのレベル固有のロジックであり、再利用の必要がないため。 |
| 複数のアクターを連携させる複雑なロジック | Blueprint Class +Interface | Level Blueprintで複雑化する前に、Blueprint ClassとBlueprint Interfaceを使ってアクター間の通信を構造化すべき。 |
よくある間違い:Level Blueprintへのロジック集中
初心者が陥りがちなのは、ゲームのコアロジック(例:プレイヤーの体力管理、スコアシステム)までLevel Blueprintに記述してしまうことです。これは、レベルを変更するたびにロジックをコピー&ペーストする必要が生じ、バグの温床となります。
❌ 悪い例: プレイヤーのダメージ処理をLevel Blueprintに記述する。 ✅ 良い例: プレイヤーキャラクターのBlueprint Class内にダメージ処理を記述する。
Interfaceを使った連携パターン
Level Blueprintの使用を最小限に抑えつつ、レベル内のアクターを連携させるには、Blueprint Interface の活用が鍵となります。
ここでは、「Level Blueprintから特定の扉を開ける」というロジックを、より構造化された方法で実現する例を紹介します。
インターフェースの定義
まず、扉が 開くための「契約」となるBlueprint Interface (BPI_Interactable) を作成します。
| 関数名 | 入力 | 出力 | 目的 |
|---|---|---|---|
OpenDoor | なし | なし | 扉に「開け」と指示する |
Blueprint Classでの実装
扉のアクター (BP_Door) は、このインターフェースを実装します。
// BP_Door (Blueprint Class)
// BPI_Interactable の OpenDoor イベントを実装
Event OpenDoor (Interface Message)
// 扉を開けるためのTimelineやAnimationを再生
Play Timeline: DoorOpenAnimation
// ログ: 扉が開いた
Print String: "Door Opened by Interface Call"
Level Blueprintからの呼び出し
Level Blueprintでは、扉のアクターを直接参照するのではなく、インターフェースメッセージを送信します。
// Level Blueprint
// 1. トリガーボリューム (TriggerBox_Door) のOverlapイベント
Event OnActorBeginOverlap (Other Actor == PlayerCharacter)
// 2. 扉アクター (Door_BP) を参照
// 3. インターフェースメッセージを送信
Call OpenDoor (Target: Door_BP) // インターフェース関数として呼び出す
この方法のメリットは、Level Blueprintが扉の内部実装(Timelineやアニメーション)を知る必要がない 点です。Level Blueprintは「このアクターに OpenDoor を実行してほしい」と伝えるだけで済み、ロジックの分離が実現します。
Level BlueprintとBlueprint Classの選択指針
Level BlueprintとBlueprint Classは、Unreal Engine開発における車の両輪のようなものです。どちらも強力ですが、その役割を理解し、適切に使い分けることが、プロジェクトの品質を決定します。
| ブループリント | 役割 | 選択の基準 |
|---|---|---|
| Blueprint Class | ゲームの部品 (アクター、コンポーネント) | 再利用が必要 なロジック、カプセル化すべき振る舞い |
| Level Blueprint | レベルの演出 (レベル固有のイベント) | そのレベルでのみ発生 し、再利用の必要がないロジック |
特に、プロジェクトが大きくなるにつれて、Blueprint Classを主体 とし、Level Blueprintの使用はレベル固有の連携や演出に限定 する意識を持つことが、プロフェッショナルな開発の第一歩です。
この知識を活かし、より整理された、拡張性の高いUnreal Engineプロジェクトを構築してください。