Unreal Engine のブループリント ビジュアル スクリプティング システム (単に「ブループリント」と呼ばれることが多いです) は、ノードベースのインターフェースを使って、コードを書かずにゲームプレイ機能を作成するためのビジュアル スクリプティング言語です。 記述されたスクリプト言語と同様に、ブループリント システムは数値、ブール値、配列、構造体などの型付きデータで動作します。 ロジックは実行ワイヤーを通じて流れます。つまり、各ノードは明示的に実行を指示されたときにのみ実行されます。
ブループリント クラスを使用すると、物理コンポーネントをスクリプト動作と組み合わせることができます。 たとえば、ブループリントには、コインのスタティック メッシュと、プレイヤーがコインに触れたときにコインを拾わせる動作を含めることができます。
一般的な多くのスクリプト言語と同様に、Engine ではこのシステムを使用してオブジェクト指向のクラスやオブジェクトを定義することができます。 プログラマー向けに、Unreal Engine の C++ 実装にはブループリント固有のマークアップが含まれており、デザイナーが拡張できるベースライン システムを作成できます。
この概要では、さまざまなタイプのブループリント アセットについて学び、サンプルのブループリント クラスを見てみましょう。そのブループリントの特定の要素を変更し、これらの変更がレベル エディタおよびゲームプレイにおいてブループリント アクタにどのように影響するかを確認します。
ブループリントの種類
ブループリント アセットにはさまざまなタイプがあり、それぞれに独自の役割があります。 ブループリントを作成して保存すると、コンテンツ パッケージ内のアセット ファイルになります。
ブループリントクラス
ブループリント クラス (よく「ブループリント」と略されます) は、コンテンツ クリエイターが既存のゲームプレイ クラスに機能を簡単に追加できるようにするためのアセットです。 ブループリントは、コードを入力するのではなく、Unreal Editor 内で視覚的に作成され、コンテンツ パッケージのアセットとして保存されます。 これらは基本的に、新しいアクタのクラスまたはタイプを定義し、他のタイプのアクタと同じように動作するインスタンスとしてマップに配置できます。
ブループリント クラスは、コンポーネント、変数、ブループリント ビジュアル スクリプティングを使用して、ゲーム内のオブジェクトのプロパティと動作を記述するレシピのようなものです。 ブループリント クラスのインスタンスをレベルに追加します。
これは、最も一般的なタイプであり、ブループリント クラスという名前ですが、ブループリントと略されることが多いです。
ブループリント クラスは、実行ロジックを含まず、親ブループリントから継承した変数またはコンポーネントのみをオーバーライドする場合、データのみにすることができます。 データのみのブループリント クラスはコンパクト エディタで開きますが、新しいロジック、グラフ、またはその他のスクリプト化された要素を追加すると、フル ブループリント エディタに変換されます。
追加のドキュメントについては、「クラス ブループリント」を参照してください。
レベル ブループリント
全てのレベルにはレベル ブループリントがあります。 新しいレベルを作成すると、Unreal Engine はそのレベルのレベル ブループリントを自動的に作成します。 このタイプのブループリントは、レベル全体のグローバル イベント グラフとして機能します。
レベル ブループリントは、レベル ストリーミングや シーケンサー シネマティックスの制御メカニズムに加え、レベル内に配置されたアクタにイベントをバインドするための制御メカニズムも提供します。
レベルのレベル ブループリントを開くには、レベル エディタのメイン ツールバーにある [Blueprint (ブループリント)] メニューを使用します。
追加のドキュメントについては、「レベル ブループリント」を参照してください。
ブループリント インターフェース
ブループリントインターフェース アセットは、他のブループリントに追加できる 1 つ以上の関数 (名前のみで、実装がない) のコレクションです。 インターフェースが追加されたブループリントは、それらの関数を持つことが保証されます。 インターフェースの関数は、インターフェースを追加した各ブループリントで機能を付与できます。 これは基本的に、一般的なプログラミングにおけるインターフェースの概念に似ており、複数の異なるタイプのオブジェクトを全て、共通のインターフェースを介して共有し、アクセスできるようになります。 簡単に言えば、ブループリント インターフェースを使用すると、複数のブループリント間でデータを共有したり送信したりできます。
ブループリント インターフェースには次の機能はありません。
新しい変数を追加する
グラフを編集する
コンポーネントを追加
詳細については、「ブループリント インターフェース」および「インターフェース クイックスタート ガイド」を参照してください。
ブループリント ライブラリ
関数とマクロを「ライブラリ」アセットに作成することでロジックを再利用でき、プロジェクト内の全てのブループリントからアクセスできるようになります。
ブループリント関数ライブラリ
ブループリント関数ライブラリは、再利用可能な関数のコレクションを格納するブループリント アセットです。 これらの関数は、特定のブループリントやアクタに関連付けられていません。 代わりに、プロジェクト全体でグローバルにアクセス可能であり、ブループリント クラスから呼び出しできます。 ライブラリを使用すると、便利な関数を 1 か所に保持できるため、同じノードを複数のブループリントにコピーして貼り付ける必要がありません。
ブループリント関数ライブラリの関数は静的であり、呼び出し間で情報を保存したり記憶したりせず、そのデータをパラメータとして渡さない限り、特定のブループリント インスタンスに関する情報を認識しません。 このため、関数ライブラリは、入力に対して操作を行い、結果を返す汎用ロジックに最適です。 機能がオブジェクトの内部変数 (プレイヤーのインベントリなど) に依存する場合、通常はライブラリではなく、そのオブジェクトのブループリントに属します。
ブループリントマクロライブラリ
ブループリント マクロライブラリは、他のブループリントにノードとして配置可能なマクロ コレクションや自己完結型のグラフを保持するためのコンテナです。 ブループリント マクロ ライブラリを使用すると、実行とデータ転送の両方の入出力を備えた、使用頻度の高いノードのシーケンスを格納できるため、時間を節約できます。
マクロは、マクロを参照する全てのグラフで共有されますが、コンパイル中に折りたたまれたノードであるかのように、グラフに自動展開されます。 つまり、ブループリント マクロライブラリをコンパイルする必要はありません。 ただし、マクロへの変更は、それらのグラフを含むブループリントが再コンパイルされたときにのみ、そのマクロを参照するグラフに反映されます。
詳細については、「ブループリント マクロ ライブラリ」および「マクロの作成」を参照してください。
関数は、入力を受け取り、一度実行され、結果を返すことができる再利用可能なロジックのブロックです。 計算やチェックに最適です。 マクロは、使用されるブループリントに直接展開される再利用可能なグラフ レイアウトです。 複数の実行出力を持つことができ、ビジュアル フロー制御に役立ちます。
ブループリント ユーティリティ
ブループリント ユーティリティ (エディタ ユーティリティ とも呼ばれます) は、エディタ のアクションの実行やエディタ機能の拡張のために使用できるエディタ専用のブループリントです。 これらは、パラメータのないイベントを UI のボタンとして公開でき、ブループリントに公開されている任意の関数を実行し、ビューポートで選択されているアクタの現在のセットに対してアクションを実行する機能を備えています。
ブループリント クラスの紹介
開始するには、ファースト パーソンまたはサード パーソン テンプレート (任意のバリアント) に基づく Unreal Editor プロジェクトが必要です。
Unreal Engine で新規プロジェクトを作成する方法については、「Unreal で最初のプロジェクトを作成する」を参照してください。
既存のブループリントを開く
テンプレートからプロジェクトを作成したため、プロジェクトにはすでにいくつかのブループリントが含まれており、それらを確認して使用できます。 含まれているブループリント クラスの 1 つの例は、プレイヤーを上方向にブーストする機能があるジャンプ パッド ブループリントです。 このブループリントのインスタンスをレベルの任意の場所に追加できます。
ジャンプ パッド ブループリントを開くには、次の手順を実行します。
Unreal Engine で、画面の左下隅にある [Content Drawer (コンテンツ ドロワー)] ボタンをクリックします。 または、CTRL キーを押しながらスペース キーを押します。
[Content (コンテンツ)] > [LevelPrototyping] > [Interactable] > [JumpPad] フォルダに移動します。
BP_JumpPadアセットが表示されます。これはブループリント クラスです。 アセットをダブルクリックして、Blueprint Editor (ブループリント エディタ) で開きます。デフォルトでは、ブループリントは新しいウィンドウで開きます。 メイン エディタで、アセットの名前が表示されたタブをレベルのタブの隣にドラッグすると、ウィンドウをドッキングできます。
ブループリント エディタでは、コンポーネントを定義したり、セットアップ操作を実行したり、イベントに応答したり、操作を整理してモジュール化したり、プロパティを定義したりできます。 ブループリントに追加するビジュアルと機能は、ゲーム内にあるそのブループリントの全てのインスタンスに適用されます。
BP_JumpPad を見てみましょう。 ウィンドウの上部には、[Viewport (ビューポート)]、[EventGraph (イベント グラフ)]、[Construction Script (コンストラクション スクリプト)]の 3 つのタブが表示されます。
コンポーネントを使用してレベル オブジェクトをビルドする
[Viewport (ビューポート)] タブをクリックします。 メイン レベル エディタでビューポートを使用するのと同様に、ブループリントのビューポートを使用してブループリントを表示および編集します。
このタブには、プラットフォーム、ライト、パーティクル エフェクトを含むジャンプ パッドの視覚表現が表示されます。
ウィンドウの左側には、ブループリントのコンポーネント、つまりブループリントが何で構成されており、レベルに何が表示されるかを定義する要素も表示されます。 [Components (コンポーネント)] パネルを使用して、ブループリントのコンポーネントを追加、削除、整理します。
コンポーネントを使用してブループリントに追加できる構成要素は次のとおりです。
カプセル コリジョン、ボックス コリジョン、または球体コリジョン コンポーネントを使用したコリジョン ジオメトリ。
スタティック メッシュ コンポーネントまたはスケルタルメッシュ コンポーネントの形式でレンダリングされたジオメトリ。
移動コンポーネントによる移動制御。
コンポーネントのみを含み、スクリプト化された動作を含まないブループリントを作成し、1 か所で編集できる再利用可能なレベル オブジェクトとして機能させることができます。
EventGraph でブループリントのコンポーネントまたはそのプロパティを参照することもできるため、ランタイム中にそれらのコンポーネントに対してアクションを実行できます。
BP_JumpPad の一部となっているコンポーネントを詳しく見てみましょう。
BP_JumpPad にはポイント ライト コンポーネントがあります。 [Components (コンポーネント)] リストまたは [Viewport (ビューポート)] でポイント ライト オブジェクトをクリックします。 トランスフォーム ツールを使用して、この光源を移動および回転できます。
ブループリント エディタの右側には、選択したコンポーネントに関連するプロパティが一覧表示される詳細パネルが表示されます。 この光源の [Intensity (強度)]、[Light Color (ライトの色)] などを編集できます。
ブループリント機能を作成する
[Viewport (ビューポート)] タブの隣に、[EventGraph (イベント グラフ)] タブと [Construction Script (コンストラクション スクリプト)] タブが表示されます。 ブループリントで関数を作成すると、それらの関数グラフのタブもここに表示されます。
グラフには、ブループリントのデザイン時間およびゲーム時間動作および機能が含まれています。 ここでは、ブループリントのコンポーネントの動作方法を指示するロジックを作成します。
ロジックとは、ブループリントのノードと接続のことです。
コンストラクション スクリプト
ブループリント アクタがレベル エディタ ビューポートまたはゲームプレイにおいてレベルにスポーンすると、Unreal Engine はまずそのコンポーネントをビルドした後、そのコンストラクション スクリプトを実行します。 アクタのプロパティをトランスフォームまたは変更すると、エディタでも実行されるため、ビューポートで結果をすぐに確認できます。 ゲームプレイ用にブループリント アクタを設定する初期化アクションを実行するために使用されます。 これらの初期化アクションはコンテキストに固有である場合があります。たとえば、オブジェクトが配置されている地面のタイプに応じて、異なるマテリアルをオブジェクトに適用します。
BP_JumpPad の [Construction Script (コンストラクション スクリプト)] タブをクリックすると、レベルに初めて表示 (またはスポーン) されたときにジャンプ パッドの色やその他のプロパティを設定する一連のアクションを実行する Construction Script ノードが表示されます。
ブループリント グラフの操作:
パン:右クリックしてドラッグします。
ズーム:マウス ホイールを使用します。
フレーム選択:F キーを押すと、選択したノードの中心に合わせて配置されます。
全体表示:A を押すと、グラフ全体が表示されます。
ジャンプ:関数またはイベント ノードをダブルクリックすると、グラフまたはそのグラフ タブで検索されます。
イベント グラフ
ブループリントのイベント グラフは、イベントと関数呼び出しを使用して、ゲームプレイ イベントに応じて一連のアクションを順番に実行するノード グラフです。 ここでは、インタラクティビティと動的な応答が設定されます。 たとえば、ライト ブループリントは、ライト コンポーネントをオフにしてマテリアルを変更することでダメージ イベントに応答できます。
イベント グラフの全てのロジックは、ゲームプレイ中に発生する事柄への応答です。たとえば、プレイヤー入力への応答、アニメーションのトリガー、サウンドの再生などです。 「これが起こったら、あれをしたい」と思ったときは必ず、イベントから始める必要があります。
ブループリントには、全て同じブループリントの一部として実行される複数のイベント グラフを含めることができます。 複数のイベント グラフは、ロジックを別々のセクションに整理するためだけに使用され、ブループリントの動作には影響しません。
[BP_JumpPad EventGraph] タブには、プレイヤーがゲーム内でジャンプ パッドの上を歩くときなど、アクタがこのブループリントとオーバーラップしたときに実行されるノードのシーケンスが表示されます。 このイベントが発生すると、ブループリントは、そのアクタに通常よりも高い速度でジャンプ動作を実行させます。
グラフ内の特定のノードを見つけるには、グラフ ビューで CTRL + F ショートカットを使用してノードを検索します。 たとえば、Event ActorBeginOverlap ノードを確認するには、CTRL + F ショートカットを使用して、検索フィールドにEvent ActorBeginOverlap と入力します。 結果を選択すると、そのノードにビューがパンされます。
アクションを実行できるノードには、実行ピンがあります。これは実行ピンとも呼ばれ、ノード上に白い三角形で表されます。 ノードの実行ピンが別のノードに接続されていない場合、三角形には白いアウトラインがあります。
お気づきかと思いますが、イベント ノードには入力実行ピンがありません。 これは、定義されたイベントがゲーム ワールドでトリガーされるとすぐにイベント ノードが実行されるためです。 この例では、ゲーム内でアクタが BP_JumpPad のアクタとオーバーラップすると、このイベントがトリガーされます。
ノードはデータ ピンを持つこともできます。 たとえば、Event ActorBeginOverlap には、Other Actor のピンがあります。これは、BP_JumpPad レベル オブジェクトとオーバーラップするレベル オブジェクト (アクタ) への参照です。 データピンはノード間で値を渡し、実行ピンはノードが実行される順序を制御します。
Event ActorBeginOverlap ノードの実行ピンは、Cast To キャラクター ノードに接続されています。 これは、ワールドのアクタ (プレイヤーなど) がジャンプ パッド アクタとオーバーラップすると、このブループリントが Cast To Character ノードを実行することを意味します。
ノード間の接続は、ワイヤーと呼ばれることがよくあります。
Event ActorBeginOverlap ノードの実行ピンを Cast To Character ノードから切断し、Other Actor ピンを接続したままにすると、実行ピンが接続されていないため、何も起こりません。つまり、Event ノードは Cast To Character ノードをトリガーしません。
接続 (またはワイヤー) を削除するには、Alt キーを押しながらそのワイヤーをクリックします。 あるピンから別のピンへドラッグしてワイヤーを接続します。
ワイヤーを再ルーティングするには、ワイヤーをダブルクリックして再ルーティング ノードを作成します。 再ルーティング ノードにカーソルを合わせ、カーソルが 4 つの矢印に変わったら、再ルーティング ノードをドラッグして移動します。
イベント グラフでのノード アクションの操作について詳しくは、「ノードを配置する」および「ノードを接続する」を参照してください。
変数
変数は、次のいずれかの条件に当てはまるプロパティです。
距離測定やキャラクターが移動できる速度などの値を保持する。
アクタが使用するスタティック メッシュなど、ワールド内の何かを参照する。
変数をブループリントのみがアクセスできるように設定したり、レベル エディタで編集可能にしたりできます。これにより、デザイナーはレベルに配置されたブループリント インスタンスを簡単にカスタマイズできます。
BP_JumpPad の [EventGraph (イベント グラフ)] タブで、ブループリント エディタの左側にある [My Blueprint (マイ ブループリント)] パネルを見てみましょう。
[Variables (変数)] セクションには、[速度 (Velocity)] と [カラー ターゲット (Color Target)] という 2 つの変数が表示されます。
Velocity 変数をクリックして選択します。 詳細パネルには、この変数に関連するさまざまなプロパティがあります。 リストの一番下には、[Default Value (デフォルト値)] カテゴリがあり、ここで [Velocity (速度)] 変数の値を設定できます。
この場合、[Velocity (速度)] は 0、0、800 に設定されます。 これは、プレイヤーに適用される速度が Z 軸、つまり上方向に 800 単位であることを意味します。
つまり、ジャンプ パッドの機能は、「プレイヤーがこのジャンプ パッドの上を歩くと、800 cm/秒で上向きに移動させる」というものです。
ジャンプ パッドの変数を見ると、隣に開いた目のアイコンがあることがわかります。 つまり、これらの変数はパブリックかつ編集可能な変数であり、レベル内のそのブループリントの全てのインスタンスで編集できます。
ブループリントを開いて編集することなく、レベル エディタから編集可能な変数のデフォルト値をインスタンスごとにオーバーライドできます。
ブループリントの外部で変数を編集する方法の例を確認するには、次のステップを実行します。
Unreal Editor の左上隅にあるレベルのタブをクリックして、レベル エディタに戻ります。
コンテンツ ブラウザを開き、[JumpPad] フォルダにある
BP_JumpPadアセットを地面のレベルにドラッグします。 選択されていることを確認します。詳細パネルで、[Default (デフォルト)] という名前のカテゴリを見つけます。 このカテゴリでは、先ほど見た 2 つの変数 ([Velocity (速度)] と [Color Target (カラー ターゲット)]) を確認できます。 これら 2 つの変数はブループリントで編集可能として設定されているため、ここに表示されます (目のアイコンが開いています)。
BP_JumpPadタブに戻ります。 [My Blueprint (マイ ブループリント)] > [Variables (変数)] セクションで、Velocity 変数の目のアイコンをクリックして、公開せず、編集不可にします。 開いている目が閉じている目に変わります。変更を適用するには、ブループリント エディタの左上隅にある [Compile (コンパイル)] ボタンをクリックします。
コンパイルすると、ブループリントのエラーがチェックされ、最新の変更がレベルで機能するようにブループリントがアップデートされます。
レベル エディタに戻り、BP_JumpPad アクタを選択し、[Details (詳細)] > [Default (デフォルト)] セクションをもう一度確認します。 編集可能インスタンスではなくなったため、Velocity 変数がありません。
ブループリントを元の設定に戻すには、ブループリント エディタに戻り、Velocity 変数の横にある目のアイコンをもう一度クリックします。
[Compile (コンパイル)] と [Save (保存)] をクリックします。
変数がパブリックかつ編集可能な場合、他のブループリントでも使用できます。 たとえば、レベルのレベル ブループリントは、ジャンプ パッドの Color Target 変数にアクセスして使用し、パッドの色を変更できます。
変数タイプ、変数の作成と編集、ブループリント グラフでの変数の参照について詳しくは、「ブループリント変数」を参照してください。
機能
関数は、ブループリント内の別のグラフから実行または呼び出すことができる特定のブループリントに属するノード グラフです。 関数には、単一の実行出力ピンを含む関数の名前があるノードによって指定される単一のエントリ ポイントがあります。 別のグラフから関数を呼び出すと、関数エントリ ノードから始まる関数内のロジックが実行されます。
ブループリント クラスをビルドするとき、複数の場所や他のブループリントでイベント グラフのロジックの一部を再利用することをおすすめします。 多くの場所で同じロジックを再構築する代わりに、ノードを追加する関数を作成した後、任意のブループリントからその関数を呼び出すことができます。
別のブループリントに存在する関数を呼び出す場合、関数は作成されたブループリントで引き続き実行されます。 この呼び出しにより、外部からその関数にアクセスできるようになります
たとえば、必須キーを受け取り、そのキーをプレイヤーのインベントリと比較して、true または false を返す HasKey 関数を、プレイヤー キャラクター ブループリントに作成できます。 その後、他のブループリント (ドア、宝箱、NPC キャラクター) は全てその関数を呼び出して、プレイヤーが特定のキーを持っているかどうかをチェックしてから、他の動作を実行できます。 これらのレベル オブジェクトはそれぞれ、ブループリントで再作成する必要なく、プレイヤー キャラクターの HasKey 関数のロジックを再利用できます。
グラフで同じノードのセットを複数回使用することがわかっている場合は、そのノードを関数やマクロにすることで、再利用できるように検討しましょう。
詳しくは、「関数」を参照してください。
ブループリント ロジックにコメントを追加する
ブループリントにコメントを追加して、ノードをグループ化し、ブループリントの各部分の機能を説明する視覚的なメモを作成することができます。 コメントを記述すると、作成したノードやチーム メンバーが一目で実行している機能を把握し、ブループリントを整理することができます。
ブループリント ロジックを構築する際は、まず機能の作成に注力してから、追加したノードをハイライトし、それらのノードに含まれる説明するコメントを追加します。
ブループリントにコメントを追加するには、次の手順に従います。
グラフをクリックして、有効なパネルであることを確認します。
キーボードの C を押します。 これによりコメント ボックスが追加されます。
コメントを入力するには、ボックス上部のテキスト フィールドをダブルクリックします。
コメントのサイズを変更するには、コメントを選択 (黄色い輪郭でハイライト) した状態で、エッジまたはコーナーをドラッグします。
コメント内でメモをグループ化するには、それらのノードをコメントのバウンド内にドラッグします。
1 つまたは複数のノードを選択して C キーを押すと、選択したノードを含むコメントを追加することもできます。
コメントの色を変更することもできます。これにより、グラフのさまざまな領域を一目で識別しやすくなります。
ブループリントの探索を続ける
これで基本を理解できたので、以下のトピックやチュートリアルを参照してブループリントについてさらに学習しましょう。