Unreal Engine の ブループリント ビジュアル スクリプティング システムは、ノードベースのインターフェースを使ってゲームプレイ要素を作成するためのビジュアル プログラミング言語です。ノードベースのワークフローは、通常はプログラマーだけが使用できる幅広いスクリプトの概念とツールをデザイナーに提供します。また、Unreal Engine の C++ 実装で使用可能なブループリント固有のマークアップを使用することで、プログラマーはデザイナーが拡張できるベースライン システムを作成することができます。
一般的な多くのスクリプト言語と同様に、Engine ではこのシステムを使用してオブジェクト指向 (OO) のクラスやオブジェクトを定義することができます。このシステムは、ユーザー定義のオブジェクトとともに、通常は単に「ブループリント」と呼ばれます。
つまり、ブループリントが UnrealScript に取って替わるということでしょうか?どちらとも言えません。 過去に UnrealScript を使用したゲームプレイ プログラミングやその他すべてのゲームプレイ要素は、今でも C++ 言語で処理することができます。同時に、ブループリントは UnrealScript の代替ではないものの、 UnrealScript で処理していた以下の目的のほとんどを達成することができます。
- クラスの拡張
- デフォルト プロパティの格納および修正
- クラスのサブ オブジェクト (例えばコンポーネント) のインスタンス化の管理
ゲームプレイ プログラマーは、自分達が設定したベースクラスで作成したブループリントで使用および拡張できる便利な関数とプロパティを 公開できるようになることが期待されます。
下表は、ネイティブコードと「ブループリント」の比較だけでなく、エンジンの前のバージョンからの推移しやすいように、 UnrealScript (Unreal Engine 3 より)、 C++、ブループリントにおいて各種アスペクトがどのように処理されるのかを 比較しています。
UnrealScript (UE3) | ブループリント (UE5) | C++ (UE5) |
---|---|---|
.uc file | Blueprint Asset | .h/.cpp files |
UClass | UBlueprintGeneratedClass | UClass |
extends [ClassName] | ParentClass | : [ClassName] |
Variable | Variable | UProperty() |
Function | Graphs/Events | UFunction() |
defaultproperties{} | Class Defaults | native constructor |
Default Components | Components List | native constructor |
ブループリントのタイプ
ブループリントは、他のブループリントが使用するインターフェースやマクロを定義するために、新規タイプからスクリプト レベル イベントの作成まで、 数種類の中のある特定用途タイプに分類されます。
Blueprint クラス
ブループリント クラス は、コンテンツ クリエーターが既存のゲームプレイ クラスに機能を簡単に追加できるアセットで、しばしば省略して ブループリント と呼ばれます。 ブループリントはコード入力ではなく、アンリアル エディタで視覚的に作成します。コンテンツ パッケージにアセットとして保存されます。 これらは実質的に、他のアクタ タイプと同様に動作するインスタンスとしてマップに配置することができる新規のクラスまたはアクタのタイプを定義することができます。
データ専用ブループリント
データのみのブループリント は、親から継承したコード (ノードグラフ形式)、 変数、そしてコンポーネントのみを格納するブループリント クラスです。継承したプロパティは微調整や修正が可能ですが、新規のエレメントは追加できません。 基本的にこれらはアーキタイプの代わりで、デザイナーがプロパティや設定アイテムを変化させるために使用します。
データのみのブループリントはコンパクトなプロパティ エディタで編集されますが、ブループリントエディタ の機能をくまなく使用してコード、変数、またはコンポーネントを単に追加するだけで 完全なブループリントへ変換することができます。
詳細については「クラス ブループリント」を参照してください。
Level ブループリントは、レベル全体のグローバルイベント グラフとしての役割を果たす、特別なタイプの ブループリント です。 プロジェクトの各レベルには、Unreal Editor 内で編集可能な独自の Level ブループリントがデフォルトで作成されます。 ただし、新規の Level ブループリントはエディタ インターフェースによって作成されます。
レベル全体に関連するイベントもしくはレベル内のアクタの特定インスタンスは、 関数呼び出しまたはフロー制御オペレーションという形式でアクションのシーケンスを実行するために使用されます。 Unreal Engine 3 のキズメットの機能と酷似しているため、 Unreal Engine 3 を熟知しているユーザーには馴染みのあるコンセプトです。
Level ブループリント は、マチネ に対する制御メカニズム、 およびレベル内に配置されるアクタにイベントをバインドするための制御メカニズムを提供します。
詳細については「レベル ブループリント」を参照してください。
ブループリント インターフェース
ブループリント インターフェース (Blueprint Interface) は、実装されていない名前だけの 1 つ以上の関数のコレクションで、 他のブループリントへ追加することができます。インターフェースが追加されたブループリントには、必ずこれらの関数が格納されます。インターフェースの 関数には、追加されるそれぞれのブループリントで機能性が与えられます。一般のプログラミングの インターフェースのコンセプトと基本的に一緒で、共通のインターフェースを通じてさまざまなタイプのオブジェクトの 共有やアクセスが可能となります。簡単に言うと、ブループリント インターフェースはブループリントの相互共有やデータの送信を可能にします。
ブループリント インターフェースは他のブループリントと同様に、エディタを使用してコンテンツ クリエーターが作成します。 しかしある程度の制限があり以下の作業はできません。
- 変数の追加
- グラフの編集
- コンポーネントの追加
詳細については「ブループリント インターフェース」と「インターフェース クイックスタート ガイド」を参照してください。
ブループリント マクロ ライブラリ
ブループリント マクロ ライブラリ (Blueprint Macro Library) は マクロ または内蔵グラフのコレクションを保持するコンテナで、 別のブループリントにノードとして配置することができます。実行とデータ移行のための入出力の両方が付いていて、 よく使うノードのシーケンスを格納できるため、時間を短縮できます。
マクロは参照されるすべてのグラフで共有されますが、 コンパイル時の折りたたまれたノードのように、グラフへ自動的に展開されます。つまり、ブループリント マクロ ライブラリではコンパイルが必要ありません。ただし、マクロへの変更は、 これらのグラフを含んだブループリントが再コンパイルされた時に そのマクロを参照するグラフのみに反映されます。
詳細については「マクロ ライブラリ」と「マクロを作成する」を参照してください。
ブループリント ユーティリティ
ブループリント ユーティリティ (Blutility とも呼ばれる) は、 エディタの実行や機能の拡張に使用します。これらは UI のボタンとしてパラメータなしで イベント をエクスポーズすることができます。 「ブループリント」にエクスポーズされた全ての機能を実行する能力があり、現ビューポートで選択されたアクタ一式を実行します。
ブループリントの仕組み
ブループリントの機能はさまざまな要素で定義します。その中にはデフォルトで存在する機能もあれば、 必要な時に追加できる機能もあります。これらの機能により、コンポーネントの定義、初期化の実行、 設定操作、イベントへの対応、操作の構造化およびモジュール化、 プロパティの定義などが可能になります。
Components ウィンドウ
コンポーネントを理解すれば、ブループリント エディタ 内の [Components] ウィンドウを使ってコンポーネントをブループリントに追加することができるようになります。これにより、 CapsuleComponents や BoxComponents や SphereComponents 経由でのコリジョン ジオメトリの追加、 StaticMeshComponents または SkeletalMeshComponents の形でのレンダリングされたジオメトリの追加、 MovementComponents を利用した動作の制御を実現します。コンポーネント リストに追加されたコンポーネントは、 インスタンス変数に割り当てることによって、コンポーネントのイベントグラフや別のブループリントからコンポーネントへのアクセスを可能とします。
コンストラクション スクリプト
コンストラクション スクリプト は、Blueprint クラスのインスタンスが作成されるときに コンポーネント リストに従って実行します。Blueprint クラスのインスタンに初期化オペレーションを実行できるようにするノードグラフが含まれています。 ワールドへのトレースの実施やメッシュやマテリアルの設定などのアクションは、 コンテキスト固有のセットアップを実現するために使用することがあるので、非常に強力です。例えば、Light ブループリントでは、どのタイプのグラウンドに配置するかを決定、および メッシュ一式の中から使用する適切なメッシュを選択できます。 Fence ブループリントでは、距離をカバーするために必要なフェンスの長さを決めるために各方向にトレースを実行します。
イベント グラフ
Level ブループリントの EventGraph は、ブループリントに関連づいているゲームプレイ イベントに反応したアクションを実行するためにイベントおよび関数を呼び出すノード グラフを含んでいます。これを使用して、ブループリントのすべてのインスタンスに共通する機能を追加し、
インタラクティビティと動的応答をセットアップされます。たとえば、ライト ブループリントは LightComponent
をオフにしてそのメッシュで使用されているマテリアルを変更することで、ダメージ イベントに応答することができます。
これにより、ライト ブループリントのすべてのインスタンスにこの動作を自動的に伝播することができます。
詳細については「EventGraph」を参照してください。
関数
関数 は、ブループリントで他のグラフから実行または呼び出しができる 特定の ブループリント に属しているノードグラフです。関数には、ノードによって指定され、単一の実行出力ピンを含む関数名がつけられた エントリーポイントがあります。関数が別のグラフから呼び出されると、出力実行ピンが有効になり、 接続されたネットワークが実行されます。
変数
変数 とは、ワールド内のオブジェクトやアクタの値または参照を保有するプロパティです。これらの プロパティには、それらを含む ブループリント から内部でアクセスすることができます。また、 レベルに配置されたブループリントのインスタンスで作業をしているデザイナーが値を変更を加えられるように、 外部からアクセスすることもできます。