ブループリント を使用すると、イマジネーションからさまざまな要素を作成することができます。簡単なゲームやプロシージャル コンテンツ ツールの作成、新機能のプロトタイピング、プログラマーが設計した機能の微調整や改善などを行うことができます。 ブループリントのビジュアル スクリプティング システムには多くの可能性があります。
ただし、そういった作業をブループリントで実行すると、パフォーマンスに影響する要素もあります。 ティックごとに多数の演算と複雑な計算を実行するブループリントを作成した場合は、C++ コードの使用を検討することを お勧めします。ブループリントは、ダメージを受ける処理、コントロールなどのイベント駆動型機能、およびフレームごとに呼び出されないその他の機能を作成するのに適しています。
ブループリントのコーディングやブループリントのコンパイルに関する技術的な詳細については、「ブループリントのテクニカルガイド」を参照してください。
機能がブループリントに適している場合でも、ブループリントをセットアップする際に、よりスムーズに作業を進めるために決定しなければならない事項があります。このガイドでは、 一般的な決定事項と、ブループリント ユーザーのヒントとコツについて説明します。
レベル ブループリントとブループリント クラス
レベル ブループリントは、レベルでオブジェクトを直接選択して操作できるため、UE3 の Kismet の使用経験のある方は簡単に操作することができます。レベル ブループリントは、プロトタイプを作成したり、 ブループリント システムの操作に慣れるうえで役立ちますが、レベル ブループリントはユーザーが使用するレベルに固有のものです。レベル ブループリントは、レベルまたはレベル内のアクタに固有の機能を 設定するために使用できます。たとえば、特定のトリガーがタッチされるとシネマティックが開始したり、すべての敵を倒した後に特定のドアを開けたりするなどが挙げられます。
通常、ブループリント クラスは、プロジェクトで再利用可能な動作を取得するための最適な方法です。ブループリント クラスを作成すると、そのクラスをどのレベルにも追加することができ、 追加スクリプトをコピーする必要がなく、必要なだけクラスのコピーを追加することができます。
レベル ブループリントで作業を開始する場合は、動作をブループリント クラスに移動させる必要があります。(ライトで Set Brightness を呼び出すなど) アクタを操作する関数をレベル ブループリントからコピーして Light アクタに基づくブループリント クラスに貼り付けると、関数が適切なスコープ内に収まるように更新されます。
詳細については、「Level ブループリント」および「ブループリント クラス」を参照してください。
クラス変数とローカル変数
ブループリントで作業しているときは、ブループリント エディタ の My Blueprint タブを使用して 変数 を追加することができます 。 関数内を表示している場合は、ローカル変数 の [My Blueprint (マイ ブループリント)] タブの追加セクションが表示されます。

ローカル変数はスコープ付きです。つまり、ローカル変数を定義した箇所にのみ存在します。特定の関数内のローカル変数は、その関数でのみ表示され、他の関数やイベント グラフでは 表示されません。このことにより、その関数のコンテキスト内のみで関連性のあるローカル変数がその他の場所でも使用されことを抑えることができます。ローカル変数は、関数内で作業するための「スクラッチ パッド」と考えることができます。ローカル変数は、 関数に必要な処理を実行するために使用できます。ただし、関数が完了すると破棄されます。
クラス変数は、ブループリント内の複数の場所からアクセスできることが求められる要素に使用します。メッシュや他のコンポーネントへの参照、または 他のブループリントからアクセスできるようにパブリックにする必要のある変数は、クラス変数にする必要があります。クラス変数は、使用後も認識しておく必要のある要素に使用します。
関数とマクロ
関数 と マクロ は外部的にはどちらも同じ目的を達成します。具体的には、ノードにインプットを送信すると、ノードで処理が行われ、アウトプットが出力されます。関数とマクロでは、これらを実行する方法が異なりますが、 共通点もあります。
-
どちらにも、ノードの機能を編集できる一元的な場所 (マクロはマクロ グラフ、関数は関数グラフ) があり、その一元的な場所が変更されるたびに、 関数やマクロを呼び出すすべてのノードが更新されます。
-
どちらも再利用可能です。
-
どちらもローカル変数を使用することができます。マクロは「匿名」のローカル変数を使用します。これは特定の名前を持たず、単に値を保持します。
-
どちらも、再利用性とわかりやすさの両方を実現するために機能をカプセル化する優れた方法です。
より高度なユース ケースになると明確になる重要な違いがいくつかあります。
-
関数は、関数を呼び出すためのノードを配置するときに、呼び出されます。つまり、関数をターゲットにする (「他のオブジェクトで関数を呼び出す」) ことができます。また、ブループリント間の 通信を提供します。
-
マクロは、マクロ グラフからノードを取得し、マクロ ノードをそれらすべてのノードのコピーに実際に置き換えます。基本的に、ブループリントがコンパイルされると、マクロはすべての グラフ ノードをコピーして、マクロ ノードのある場所に貼り付けます。
内部の仕組みにより、これは、実行できる内容の違いにつながります。
-
マクロは、スコープ付きクラス (新しいマクロ ブループリントを作成するときに選択したクラス、またはローカル マクロの場合は、マクロが定義されているクラス) の任意のノードを使用することができます。 つまり、マクロに置くことができるノードの汎用性が若干向上します。
-
関数とマクロの最大の違いは、マクロには潜在的なノードを配置することができますが、関数には配置できない点です。
-
関数を使用すると、子ブループリントでその機能をオーバーライドすることができます。たとえば、「PlayerInteractedWithMe」という関数を含む車のブループリントがあるとします。その関数では クラクションを鳴らすことができます。自動車ブループリントには、パトカーと消防車の 2 つの子があるとします。パトカーでは、関数をオーバーライドして、サイレンを鳴らし、 ライトを点灯させるようにすることができます。消防車では、水を噴射させるようにすることができます。このような機能のオーバーライドをマクロで行うことはできません。
-
マクロはコンパイル時にグラフにコピー&ペーストするのみであるため、マクロに複数の実行ワイヤーを接続したり、マクロから引き出したりすることができます。関数ではこれを行うことはできません。
通常、再利用したい機能がある場合は、マクロを使用することが推奨されます。ただし、ブループリントの子でその動作を微調整したい場合、または、 別のブループリントからブループリントの子に直接アクセスしたい場合は、関数を使用することをお勧めします。
詳細については、「関数」および「マクロ」を参照してください。
ブループリント通信のタイプ
2 つのブループリント間で通信を行うには、いくつかの方法があります。最も一般的なユース ケースは、ブループリントの直接通信ですが、求める機能によっては、 代わりにイベント ディスパッチャーやブループリント インターフェースを使用する場合もあります。各タイプの通信の概要、ユース ケースの例、チュートリアルについては、 「ブループリント通信の使用方法」を参照してください。
一般的なヒント
ブループリント エディタで作業する
ブループリント エディタで作業する際、使用したいノードや、作成済みのノードやコメントを見つけるために活用できるコツがいくつかあります。
-
変数、関数、コメントなど、既存のブループリントで検索しているものがある場合は、ブループリント エディタの [Search (検索)] ボタンを使用します。このボタンにより、 現在開いているブループリントを検索します。また、[Find in All Blueprints (すべてのブループリントで検索)] ボタンをクリックすると、アンロードされたブループリントを検索できます。これは、ブループリント全体で機能を実装した場所を追跡するうえで役立ちます。
-
コンテキスト メニューには、ドラッグしたピンに接続できるノードのみが表示されます (ライトからドラッグすると、そのライトに関連する機能が表示されます)。 変数やコンポーネントで実行するために利用可能なすべての機能の検出を試みている場合は、コンテキスト メニューをブラウズするだけで、利用可能な機能を確認できます。
-
コンテキスト メニューでもパレットでも、検索バーが役に立ちます。関数にたくさんのキーワードをタグ付けすることで、名前がわからない場合でも、探している関数を見つけることができます!
グラフを設定する
グラフの設定方法はユーザーごとに異なりますが、ここでは、整理された状態を保ち、使いやすくするためのヒントをいくつか紹介します。
-
最初から整理された状態を維持するようにしましょう!コードを大量に作成してから整理するのは、作業進めながらクリーン コードを維持するよりもはるかに困難です。
-
グラフで同じノードのセットを複数回使用することがわかっている場合は、そのノードを関数やマクロにすることで、再利用できるように検討しましょう。
-
ノードをそのコンテキストと重ねて配置することができます。これにより、領域をよりコンパクトに保つことができるからです。たとえば、ライトへの参照があり、そのポイントライト コンポーネントにアクセスする場合、 これら 2 つのノードを 1 つずつ重ねて、1 つのブロックと考えることができます。
-
コメント を多用しましょう!また、コメント ボックスの色を変更することで、グラフのセクションを識別しやすくすることもできます。