ブループリントで大規模なプロジェクトを構築する場合、あっという間に大量のノードができてしまいます。しかし、それには、カプセル化とコード再利用に役立つさまざまなメカニズムを用意されています。皆さんはカオスに立ち向かうことができるのです。
何かをカプセル化するということは、「メインとなる考え方や (何らかの) 量を簡潔なやり方で表示または表現すること」です。言い換えると、複雑な一連のノードを、同じ意味または同じ考え方を伝える簡単な代用物で隠蔽すること、ということになります。それが裏側でどのように機能しているのかということを調べることはできますが、より大きな視点では細かいことを気にしなくて済むようになります。
コードの再利用という言葉は、しばしば、カプセル化と結びつきますが、基本的には、同じ考え方 (ノードのセット) を、いちいち複製しないで異なる状況に応用する手法のことを言います。毎回複製するとなると明らかに大変です。バグや機能変更も各コピー物で別々に処理しなければなりません。
次は、さまざまな手法の利点と制約をまとめたものです。
|
関数 |
イベント |
マクロ |
コラプスされたグラフ |
実行パス |
1 |
1 |
任意 |
任意 |
非実行出力 |
任意 |
なし |
任意 |
任意 |
潜在的アクション |
不可 |
可 | 可 |
可* |
コンポーネント/タイムラインの追加 |
不可 |
可 | 不可 |
可* |
他のイベント |
不可 |
該当せず |
不可 |
可* |
* コラプスされた (畳まれた) グラフは、それを含んでいるグラフの制約を継承します。たとえば、ある関数内にあるコラプスされたグラフは、潜在的アクションまたはタイムラインを含むことができません。
コラプスされたグラフ
選択したノードから、コラプスされたグラフを作ることができます。そのためには、ノードの 1 つを右クリックして、Collapse Nodes (ノードをコラプスする) を選択します。選択したノードのセットの外にあるノードに接続したワイヤーは、新たにコラプスされたノードの input または output になります。コラプスを完了して、ノードの上をマウスオーバーすると、そこに含まれているグラフの中のノードをプレビューできます。
コラプスされたグラフには、現在のコンテキストで許されているあらゆる種類のノードを含めることができます。input と output に関する制約はありません。コラプスされたグラフは、そこに含まれるノードに制約がないため、最善の選択と思えるかもしれません。しかし、コラプスされたグラフは、カプセル化に限られています (コードの再利用に、ではありません)。コラプスされたグラフをコピーペーストすると、中のノードもすべて複製され、オリジナルのグラフを参照するのではなく、コラプスされたグラフが新たに作られることになります。
関数とイベント
カスタムの空の関数を作るには、My Blueprints のツールバーにある Add Function (関数を使いする) ボタンを使います。また、選択したノードを関数にかえる (制約条件をクリアしている場合) には 、選択したノード上で右クリックして Collapse to Function (関数にコラプスする) を選択します。新たなイベントは、グラフのコンテキスト メニューの Add Custom Event… (カスタムのイベントを追加) アクションを選択します。関数は、My Blueprints リストの中に個別のグラフとして表示されます。一方イベントは、さまざまなイベントを多数含むことができるイベント グラフの中に入ります。
関数とイベントは両方とも、C++ で定義された関数を呼び出すのと同じように、ブループリントの他の場所から呼び出すことができます。両方とも、外の呼び出し元の視点による実行パスを 1 個定義します。ただし、両者とも分岐およびループを内部にもつことができます。イベントの実行フローは、潜在的アクションによって遅延させることができます。あるいは、別のイベントのフローに統合させることも可能です。
関数の中に配置できるノードの種類は限定されているため (潜在的アクション、タイムラインなどはすべて禁じられています)、関数は即座に実行され、値を返すことが保証されています。これによって、C++ の呼び出し元に値を返すことができるようになりますが、このことはイベントまたはマクロを使用している場合には不可能です。
関数とイベントによって、C++ を ブループリントで使用できるようにすることもできます。C++ は関数を BlueprintImplementableEvent として定義することができ、これをブループリントで実装することができます。これらの関数には、デフォルトの動作がなく、ブループリントでの実装がなければ呼び出されても何も実行されません。ただし、これらは、BlueprintNativeEvent として宣言することができ、C++ による定義を与えることもできます。これらの UFUNCTION() のキーワードは、イベントについてのものだけでしたが、上記関数は、ブループリントで実装する際に、返り値の有無に応じて、ブループリントのイベントまたは関数のどちらかに変換することができます。
マクロ
新たな空のマクロを作成するには、My Blueprints ツールバーの Add Macro (マクロを追加) オプションを選択します。また、選択したノードを右クリックして Collapse to Macro (マクロにコラプス) オプションを使って、選択したノードをマクロに変換できます。さらに、ブループリント マクロ ライブラリを作成することによって、多数のブループリント間でマクロを共有することもできます。この機能があるため、マクロは、ブループリント コードを再利用するための最も効果的な方法の 1 つと言えます。マクロとマクロのライブラリについては、今後、さらに詳しい記事を投稿しようと思います。
マクロには、実行ワイヤーを含めて任意に input と output を置くことができます。マクロは、関数やイベントと同じようにブループリントから呼び出すことができます。ただし、C++ のコードからは見えません。コラプスされたグラフと同様に、マクロは、コンパイルされたブループリントの中に実際に存在しているわけではありません。あらゆるインスタンスは、コンパイル中にユニークなノードのセットに展開されます。
マクロのインスタンスは 2 個以上置くことができます。カスタムのイベントのようなものはマクロに入れることが禁じられています。どちらを (またはどのような順序で) 実行すべきか不明確だからです。タイムラインおよび Add Componet ノードも、実装の詳細により現在禁じられています。ただし、将来的には解禁したいと考えています。
コメント
基本的にコメントは、現在のあなたから将来のあなたへの贈り物です。意図したことや潜在的な問題、今後の課題などを書いておきます。
選択したノードのまわりにコメントボックスを配置するには、C を押します。デフォルトでは、これらのコメントボックスによって、中に入っているノードすべてがいっしょに動きます。この動作を変更したい場合は、色の場合と同様に、Details (詳細) パネルで可能です。コメントを編集するには、他の編集可能なタイトルと同じように、コメントをダブルクリックするか、F2 ボタンを押します。他の個々のノードにコメントを付けるには、そのノードのためのコンテキスト メニューのフィールドを使用します。これによって、そのノードの上方にコメントの吹き出しが表示されるようになります。
最後に、カスタムのブループリントのために、コンテンツブラウザのツールチップでコメントを表示させるには、Blueprint Properties を使い、Details パネルで Blueprint Description (ブループリントの説明) を編集します。この機能は、サムネイル プレビューがないゲームプレイ ブループリントには実に便利です。ただし、サムネイルがあるレベルのプロップ (小道具) のようなものにも、使用方法のメモを追加することは有益なことです。
質問またはコメントがありましたら、アンリアル・エンジンのフォーラムまでお越しください。または、Twitter で @joatski をフォローしてください。