【Unreal Engine】Level BlueprintとBlueprint Classの違いと使い分け

作成: 2025-12-12

Level BlueprintとBlueprint Classはどちらもロジックを書けますが、再利用性や管理の面で大きく異なる。それぞれの特性と選択基準を整理。

Level BlueprintとBlueprint Classの概要

Unreal Engine (UE) でゲームロジックを構築する際、主に2つの選択肢があります。

  • Level Blueprint:レベル全体を制御する、そのレベル専用の設計図。
  • Blueprint Class:再利用可能なアクターやコンポーネントの振る舞いを定義する設計図。

本記事では、この2つの根本的な違いと、それぞれのメリット・デメリット、使い分けの基準を解説します。


Level Blueprintとは

Level Blueprintの基本概念

Level Blueprint は、その名の通り、特定のレベル(マップ)専用 のブループリントです。

これは、レベルを開いたときに自動的に実行されるロジックを記述するために存在します。Level Blueprintは、レベル内の複数のアクターを参照し、それらを連携させる「司令塔」のような役割を果たします。

特徴:

  1. レベルに紐づく: 他のレベルでは使用できません。
  2. アクター参照が容易: レベル内に配置されたアクターを直接参照し、イベントを呼び出すことができます。
  3. シングルトン: 各レベルに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) の振る舞いを定義するための、再利用可能な設計図 です。

例えば、「爆発する樽」「拾えるアイテム」「動くプラットフォーム」など、ゲーム内で何度も登場するオブジェクトの共通の機能やプロパティをカプセル化するために使用されます。

特徴:

  1. 再利用性: 複数のレベルやプロジェクトでインスタンス化して使用できます。
  2. カプセル化: データ(変数)と機能(関数/イベント)が一つにまとまっています。
  3. 継承: 既存の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 BlueprintBlueprint Class
目的特定のレベルのイベント制御、レベル内のアクター連携再利用可能なアクター/コンポーネントの振る舞い定義
再利用性不可 (そのレベル専用)可能 (インスタンス化してどこでも使用)
カプセル化 (レベル内の外部アクターに依存) (データとロジックがクラス内に完結)
継承不可可能 (親クラスの機能を拡張できる)
参照レベル内のアクターを直接参照しやすい他のアクターを参照するには、Get All Actors Of Classなどの間接的な方法が必要
パフォーマンス複雑になると参照が多くなり、管理・最適化が困難になりがち構造化されており、パフォーマンスの最適化がしやすい
推奨度限定的 (レベル固有のイベントに限定して使用) (ゲームロジックの基本)

注意: Get All Actors Of Classは全てのアクターを走査するため、大量のアクターが存在するレベルではパフォーマンスに悪影響 を及ぼす可能性があります。頻繁に呼び出す場合は、参照をキャッシュするか、タグベースの検索を検討してください。

使い分けの基準

迷ったときは、以下の「黄金律」に従って選択してください。

シナリオ選択すべきブループリント理由
ゲーム内の「モノ」の振る舞い (樽、ドア、敵、アイテム)Blueprint Class再利用性、カプセル化、継承による効率的な開発。
特定のレベルの「演出」や「流れ」 (レベル開始時のカメラワーク、レベルクリア判定)Level Blueprintそのレベル固有のロジックであり、再利用の必要がないため。
複数のアクターを連携させる複雑なロジックBlueprint Class +InterfaceLevel 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プロジェクトを構築してください。