Un objeto personalizable sin datos es un objeto personalizable normal cuyos nodos de entrada son nodos de parámetros modificables en el juego.
Puedes convertir cualquier objeto personalizable en un modo sin datos sustituyendo los siguientes nodos:
| Nodos Constant | Nodos de parámetro |
|---|---|
Nodo de textura | Nodo de parámetro de textura |
Nodo de malla esquelética | Nodo de parámetro de malla esquelética |
Material Nodo | Nodo de parámetro de material |
Nodo de tabla | Nodo T / SK / M |
No es obligatorio reemplazar todos los nodos. Puedes mezclar y combinar nodos Constant y de parámetros. En resumen, solo aprovecharás la función sin datos en aquellas entradas que sean nodos de parámetros.
Mejoras con respecto a los objetos personalizables
Tiempo de compilación más rápido: las entradas de los nodos de parámetros no se compilan, sino que se convierten en tiempo de ejecución.
Cifrado: ahora el cifrado funciona de forma inmediata. Dado que las entradas ya no se compilan (son UObjects normales), ahora se pueden cifrar como de costumbre.
Proceso de trabajo UE normal: con los antiguos nodos Constant, había que tener en cuenta que las mallas y los parámetros se incrustaban en el objeto personalizable mediante un proceso de cooking especial, y que los recursos originales solo estaban disponibles en el editor. Con el nuevo sistema sin datos, funciona igual que cualquier otro sistema UE similar.
Posiblemente paquetes más pequeños: anteriormente, si se hacía referencia a una entrada fuera de Mutable, se incluía dos veces en el paquete: una como recurso Mutable compilado y otra como UObject, por lo que no era recomendable. Puesto que las entradas de parámetros ya no se compilan, esto ya no es así.
Limitaciones
Menor rendimiento: las conversiones en tiempo de ejecución y algunas optimizaciones, como la generación de constantes, no se pueden aplicar en tiempo de compilación.
Sin opciones disponibles: los parámetros de entrada no tienen una lista de opciones disponibles. Esto significa que los programadores de jugabilidad ahora son responsables de restringir qué entradas pueden pasarse en los parámetros.
Nuevos parámetros
Como parámetros habituales, los nuevos parámetros de Textura, Malla esquelética y Material se pueden configurar creando una Instancia de objeto personalizable y llamando a las siguientes funciones (Blueprint o 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);
Además, en cada nodo de parámetro puedes especificar un valor por defecto. Este valor por defecto es opcional y, si no se especifica, será nullptr. Puedes obtener estos valores por defecto en el objeto personalizable:
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;
Ten en cuenta que si se establece un valor por defecto, se realizará el cook a los objetos a los que se hace referencia. Además, el ciclo de vida de estos objetos es el mismo que el de los objetos personalizables, ya que son referencias fuertes.
Una vez que se hayan establecido todos los parámetros. Para ver los resultados, tienes que llamar a:
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstance)
void UpdateSkeletalMeshAsync(
bool bIgnoreCloseDist = false,
bool bForceHighPriority = false);
Ejemplo
Nodos normales: Las referencias de malla esquelética se muestran en el visor de referencias debido a que tienen una referencia exclusiva del editor.
En un juego empaquetado, no se incluyen como UObjects, sino como recursos mutables:
Nodos sin datos: Fíjate en que solo los nodos de malla esquelética se han convertido a sin datos.
El material sigue siendo una constante (no un parámetro):