Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE5 新機能ブループリント 名前空間について

UE5からのマイナーな新機能として、ブループリント 名前空間(Blueprint Namespace)というものが実装されています。

ブループリント名前空間は既存のプログラミング言語のように名前空間というグループを作り、別空間にあるものとは違うものとして扱えるようにしようという考え方です。ブループリントの場合は同じ名前空間に存在するBPアセットに対してのみしか読み込まないようにします。

ブループリント 名前空間で区切った場合、本来必要になるタイミングぎりぎりまでアセット読み込みを行なわないので、名前空間が違うもの同士の場合には余計なものを読み込まなくなるためにノード検索などで余計な表示を行わなくなります。これはグローバルな関数ライブラリーやマクロライブラリーを使う時に重宝します。

関数ライブラリーやマクロライブラリーはエディターが起動時にメモリーへと読み込まれます。これは起動時点からライブラリーがグローバルに存在しているものと認識するからです。更にあらゆるBP上で検索候補に出現するので余計な情報が沢山表示されがちです。これをフィルターし、同じ名前空間に存在するものしか認識しないようにしてくれるのがブループリント 名前空間ということです。

ブループリント名前空間はUE5.0でも実装されていますが、本格的に導入されるのがUE5.1以降となっています。今回はUE5.0で検証しているので、UE5.1と今後差異がでてくるかもしれません。

ブループリント 名前空間の設定

UE5.0では名前空間を扱うことはできますが、エディタの設定を少し変える必要があります。

『エディタの環境設定』→『ブループリントエディタの設定』→『名前空間エディタ機能を有効にする』にチェックをつけます。※UE5.1では標準でチェックがついているようです。

これでエディタ内に名前空間の機能がでてくるようになります。試しに何かしらのBPアセットを開いて、『クラス設定』ボタンを押すと、『詳細』内に『Blueprint Namespace』という項目があることに気づきます。更にその下には『インポートした名前空間』という項目もあります。

『Blueprint Namespace』で明示的に名前空間を追加することができます。この状態になっていれば既に名前空間が扱えるようになっていることになります。では次に実際に名前空間が使えると、どのようになるのかを見てみましょう。

関数ライブラリーを名前空間でフィルターする

まずは何かしらのBP関数ライブラリーを作ってみます。今回はBP_FilterFuncLibraryという名前で作ってみました。その関数ライブラリー上にFilterFuncという関数をひとつ作ってみます。

次に『クラス設定』ボタンを押して『Blueprint Namespace』にFilterFuncLibraryという名前空間を追加してみます。追加後には必ずコンパイルを行っておかないと正しく動作しないようなので注意が必要です。

名前空間が追加された後にコンテンツブラウザ上でアセットにカーソルを合わせた時に表示されるポップアップを確認すると、どのような名前空間が追加されているかを確認できます。

これで名前空間が追加されました。試しに別のBPアセットからBP_FilterFuncLibraryのFilterFuncを検索してみます。

関数ライブラリーなので、本来はどこからでも使えるはずなのですが、フィルターされた内容には表示されません。ここで『クラス設定』を表示させて、『インポートした名前空間』に『追加』ボタンからFilterFuncLibraryという名前空間をインポートしてみます。

名前空間がインポートされた状態を確認したら再度同様の検索を行ってみます。

インポート後はFilterFuncが検索対象として表示されるようになりました。これは同じ名前空間がインポートされたため、可視化されるようになったためです。ただしこの機能は『状況に合わせた』表示機能がオンになっている時にのみ効果があります。※チェックがない場合は名前空間を無視して検索を行います。

暗黙的に名前空間をインポート

名前空間は暗黙的(見えないところで)に自動でインポートしてくれるようになっています。例えばBP_NamespaceというActorを継承したBPアセットがあった場合に『Blueprint』という名前空間を手動で追加したとします。

次に別のBPアセットを開いて変数を追加します。変数タイプを変更してBP_Namespaceのオブジェクト参照型に切り替えます。この時に『インポートされないタイプを非表示』にチェックがついていると、名前空間がインポートされていないので、検索の中に表示されませんので、チェックを外しておきましょう。変数が出来たらコンパイルして保存します。

『クラス設定』を押して『インポートした名前空間』に先程追加した名前空間である『Blueprint』が存在していれば暗黙的にインポートされたことになります。

インポートされた名前空間は手動で追加を削除することも可能なので、インポート不要の場合には手動で削除を行う必要があります。

名前空間を全体にインポートする

『エディタの環境設定』と『プロジェクト設定』では名前空間を全体にインポートすることができます。

前者は『ブループリント エディタの設定』カテゴリーから『常に含める名前空間』から追加し、こちらはローカルプロジェクト内でのみ名前空間を全てのBPに含めるようにします。

後者は『ブループリント』カテゴリーから『常に含める名前空間』から追加、こちらはプロジェクト全体に名前空間を全てのBPに含めるようにします。

ただしUE5.0で前者は追加しても自動的には名前空間がインポートされませんでした。※5.1以降で修正されているかもしれません。

まとめ

名前空間機能はC++などのオブジェクト指向言語はではメジャーな機能ですが、ブループリントでは少し特殊な機能として実装されています。名前空間でBPアセットをグループ化するため、よりBPの依存関係が薄くなり、同じ名前空間同士のBPしか無駄な読み込みが発生しなくなることになります。

うまく使えば一定以上の開発規模でBPアセット読み込みの最適化ができるようになり、不要な読み込みを避けることができるようになるはずです。