データレス カスタマイズ可能オブジェクトは、その入力ノードがゲーム内で変更可能なパラメータ ノードである通常のカスタマイズ可能オブジェクトです。
次のノードを置き換えることで、あらゆるカスタマイズ可能オブジェクトをデータレスに変換できます。
| 定数ノード | パラメータ ノード |
|---|---|
テクスチャ ノード | テクスチャ パラメータ ノード |
スケルタル メッシュ ノード | スケルタル メッシュ パラメータ ノード |
マテリアルノード | マテリアル パラメータ ノード |
テーブル ノード | T / SK / M ノード |
全てのノードを置き換える必要はありません 定数ノードとパラメータ ノードを組み合わせて一致させることができます。 つまり、パラメータ ノードである入力でのみデータレスを有効活用できます。
カスタマイズ可能オブジェクトと比較した改善点
コンパイル時間の短縮:パラメータ ノードからの入力はコンパイルされず、ランタイム時に変換されます。
暗号化:そのまま暗号化できるようになりました。 入力はコンパイルされなくなったため (それらは通常の UObjects です)、引き続き通常どおり暗号化できます。
通常の UE ワークフロー:古い定数ノードでは、メッシュとパラメータは特別なクック プロセスによりカスタマイズ可能オブジェクトに埋め込まれ、元のアセットはエディタ専用になることに注意する必要がありました。 新しいデータレス システムでは、他の UE システムに類似したマテリアルと同じように機能します。
パッケージが小さくなる可能性:以前は、入力が可変外で参照されていた場合、入力はパッケージに 2 回 (1 回はコンパイルされた可変リソースとして、もう 1 回は UObject として) 含まれていたため、推奨されていませんでした。 パラメータ入力がコンパイルされなくなったため、これは当てはまらなくなりました。
制限事項
パフォーマンスの低下:ランタイム変換と、定数の生成などの一部の最適化をコンパイル時に適用できません。
利用可能なオプションの不在:入力パラメータに利用可能なオプションのリストがありません。 これは、ゲームプレイ プログラマーがパラメータで渡すことができる入力を制限する必要があることを意味します。
新しいパラメータ
通常のパラメータとして、新しいテクスチャ、スケルタル メッシュ、およびマテリアル パラメータは、カスタマイズ可能オブジェクト インスタンスを作成し、以下の機能 (ブループリントまたは C++) を呼び出すことで設定できます。
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstance)
void SetTextureParameterSelectedOption(
const FString& TextureParamName,
UTexture* TextureValue);
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstance)
void SetSkeletalMeshParameterSelectedOption(
const FString& SkeletalMeshParamName,
USkeletalMesh* SkeletalMeshValue);
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstance)
void SetMaterialParameterSelectedOption(
const FString& MaterialParamName,
UMaterialInterface* MaterialValue);
さらに、各パラメータ ノードでは、デフォルト値を指定できます。 このデフォルト値はオプションであり、指定されていない場合は nullptr になります。 カスタマイズ可能オブジェクトでこれらのデフォルト値を取得できます。
UFUNCTION(BlueprintCallable, Category = CustomizableObject)
UTexture* GetTextureParameterDefaultValue(
const FString& InParameterName) const;
UFUNCTION(BlueprintCallable, Category = CustomizableObject)
USkeletalMesh* GetSkeletalMeshParameterDefaultValue(
const FString& ParameterName) const;
UFUNCTION(BlueprintCallable, Category = CustomizableObject)
UMaterialInterface* GetMaterialParameterDefaultValue(
const FString& ParameterName) const;
デフォルト値が設定されると、参照されたオブジェクトがクックされることに注意してください。 また、これらのオブジェクトは強い参照であるため、これらのオブジェクトのライフサイクルはカスタマイズ可能オブジェクトと同じです。
全てのパラメータの設定が完了したとき。 結果を確認するには、次をのものを呼び出す必要があります。
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstance)
void UpdateSkeletalMeshAsync(
bool bIgnoreCloseDist = false,
bool bForceHighPriority = false);
例
通常のノード: スケルタル メッシュの参照は、エディタ専用の参照を持っているため、Reference Viewer に表示されます。
パッケージ化されたゲームでは、これらは UObject としてではなく可変リソースとして含まれます。
データレス ノード: スケルタル メッシュ ノードのみがデータレスに変換されていることがわかります。
マテリアルは (パラメータではなく) 定数のままです。