高度なブループリントのネイティブ化

ゲームプレイ要素をブループリントに公開するテクニカル ガイド (ゲームプレイ プログラマー向け)

Choose your operating system:

Windows

macOS

Linux

前提トピック

このページは以下のトピックへの知識があることを前提にしています。まず以下のトピックの内容についてご確認をお願いします。

Unreal Automation ツールでビルドする

Unreal Automation ツールでのビルド中にコマンドラインからブループリントをネイティブ化するには BuildCookRun コマンドラインに -nativizeAssets スイッチを追加します。

ヘッダ宣言

ネイティブ化されたブループリントは、別の新しいモジュールに格納されます。つまり、ゲームプレイ モジュールのヘッダは、オリジナルのモジュール以外でも使用が可能になります。 すべてのヘッダが、使用中のすべてのクラスと構造体を、インクルード ヘッダもしくは前方宣言として宣言していることを確認してください。

不足ヘッダの修正

多くのプロジェクトには "修正型" ヘッダである [GameName]/[GameName].h あるいは [GameName]/Public/[GameName].h のいずれかが付いています。

  • このヘッダのパスを DefaultEditor.ini [BlueprintNativizationSettings] FilesToIncludeInModuleHeader に追加すると、 ヘッダ不足が原因の問題をほぼ解決することができます。

コード連携の促進

手書きのコードとネイティブ化したコード間の連携の信頼性と効率を促進するために、いくつかの制約が発生します。これを念頭に置いて、 以下のインプリメンテーションはサポートされていません:

  • BlueprintPure あるいは`BlueprintCallable` としてマークされた Private 関数および Protected 関数

  • noexport 構造体およびクラス

  • BlueprintVisible タグ、または Editable タグのあるビットフィールド変数

  • Private ビットフィールド変数

  • UBlueprintGeneratedClass UUserDefinedStruct UUserDefinedEnum 変数 (もしくはそれらをベースにした変数型)

技術的な詳細

コンパイル エラーまたはリンク エラー (LNK1000 や LNK1248) になった場合、ブループリント タイプまたは特定のブループリントを DefaultEngine.ini 設定ファイルから排除して、 プロジェクトでネイティブ化したブループリント数を減らしてみてください。ブループリントを変換対象から除外する方法は、 ブループリントのネイティブ化 を参照してください。

以下のモジュールでは、ブループリント ネイティブ化の処理の仕組みが分かります。

  • BlueprintCompilerCppBackend モジュール (格納場所: Engine\Source\Developer\BlueprintCompilerCppBackend\ ) はブループリント記法のツリーを C++ に変換します。

  • BlueprintNativeCodeGen モジュール (格納場所: Engine\Source\Developer\BlueprintNativeCodeGen\ ) は、クックおよびパッキング中に「素晴らしいこと」がいろいろできます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる