Ein Dataless Customizable Object ist ein normales Customizable Object, dessen Input-Knoten in-game veränderbare Parameterknoten sind.
Du kannst jedes Customizable Object zu Dataless konvertieren, indem du die folgenden Knoten ersetzt:
| Konstante Knoten | Parameterknoten |
|---|---|
Texturknoten | Texturparameterknoten |
Skelett-Mesh-Knoten | Skelett-Mesh-Parameterknoten |
Material Knoten | Materialparameter-Knoten |
Table-Knoten | T / SK / M Knoten |
Es ist nicht erforderlich, alle Knoten zu ersetzen. Du kannst Konstanten- und Parameter-Knoten mischen und matchen. Kurz gesagt: Du profitierst von Dataless nur bei Inputs, die Parameterknoten sind.
Verbesserungen gegenüber Customizable Objects
Schnellere Kompilierzeit: Inputs von Parameter-Knoten werden nicht kompiliert, sondern zur Laufzeit konvertiert.
Verschlüsselung: Die Verschlüsselung funktioniert jetzt out of the Box. Da Inputs nicht mehr kompiliert werden (es sind normale UObjects), kannst du sie nun wie gewohnt verschlüsseln.
Regulärer UE-Workflow: Bei den alten Konstanten-Knoten musstest du bedenken, dass Meshes und Parameter durch einen speziellen Cook-Prozess in das anpassbare Objekt eingebettet wurden und die ursprünglichen Assets Editor-exklusiv waren. Mit dem neuen datenlosen System funktioniert es genau wie alle anderen UE-System-ähnlichen Materialien.
Möglicherweise kleinere Pakete: Bisher wurde ein Input, der außerhalb von Mutable referenziert wurde, zweimal im Paket enthalten: einmal als kompilierte Mutable Resource und einmal als UObject, weshalb dies nicht empfohlen wurde. Da Parameter-Inputs nicht mehr kompiliert werden, ist dies nicht mehr der Fall.
Einschränkungen
Weniger performant: Laufzeit-Konvertierungen und einige Optimierungen, wie die Generierung von Konstanten, können zur Kompilierzeit nicht angewendet werden.
Keine verfügbaren Optionen: Input-Parameter haben keine Liste mit verfügbaren Optionen. Dies bedeutet, dass Gameplay-Programmierer nun dafür verantwortlich sind, einzuschränken, welche Inputs in den Parametern übergeben werden können.
Neue Parameter
Die neuen Textur-, Skelett-Mesh- und Material-Parameter können als reguläre Parameter eingerichtet werden. Erstelle dazu eine Customizable Object Instance und rufe die folgenden Funktionen ab (Blueprint oder 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);
Zusätzlich kannst du in jedem Parameter-Knoten einen Default Value angeben. Dieser Standardwert ist optional, und wenn er nicht angegeben wird, ist er nullptr. Du kannst diese Standardwerte in dem Customizable Object abrufen:
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;
Beachte, dass die referenzierten Objekte gebaket werden, wenn ein Standardwert festgelegt wird. Außerdem ist der Lebenszyklus dieser Objekte der gleiche wie der des anpassbaren Objekts, da es sich um starke Referenzen handelt.
Sobald alle Parameter gesetzt sind. Um die Ergebnisse zu sehen, musst du aufrufen:
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstance)
void UpdateSkeletalMeshAsync(
bool bIgnoreCloseDist = false,
bool bForceHighPriority = false);
Beispiel
Reguläre Knoten: Skelett-Mesh-Referenzen werden im Referenz-Viewer angezeigt, da es eine Editor-exklusive Referenz ist.
In einem verpackten Spiel sind sie nicht als UObjects, sondern als Mutable Resources enthalten:
Dataless Nodes: Beachte, dass nur die Skelett-Mesh-Knoten in den datenlosen Zustand umgewandelt wurden.
Das Material ist weiterhin eine Konstante (kein Parameter):