[UE C++] Estructura
Estructura estilo C++
Como otras estructuras ordinarias de C++:
struct TestStruct
{
FName StructName = FName("TestStruct");
AActor* TargetActor;
};
Nota: No se recomienda utilizar objetos del UE como AActor para esta estructura. La razón es que esta estructura no es visible para el sistema de recolección de basura del UE. El uso de esta estructura puede causar problemas de referencia de puntero nulo.
Estructura estilo U++
Es necesario USTRUCT()
agregar GENERATED_USTRUCT_BODY()
:
USTRUCT()
struct FTestStruct
{
GENERATED_USTRUCT_BODY()
UPROPERTY()
FName StructName = FName("TestStruct");
UPROPERTY()
AActor* TargetActor;
};
Precauciones:
- UE no realizará automáticamente la administración de memoria en UStruct
- Puede utilizar para
UPROPERTY
marcar las variables miembro de una estructura para hacerla visible para el sistema de reflexión y los scripts de planos de UE. - La estructura debe comenzar con F , TestStruct -> FTestStruct
GENERATED_USTRUCT_BODY()
Puedes usarGENERATED_BODY()
en su lugar- El UStruct creado de esta manera no es visible en el plano.
Estructura visible del plano
Debe agregar BlueprintType
la palabra clave y agregar UPROPERTY
los atributos correspondientes a las variables miembro de la estructura visible:
USTRUCT(BlueprintType)
struct FTestStruct
{
GENERATED_USTRUCT_BODY()
//蓝图图表可以访问
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Test Struct")
FName StructName = FName("TestStruct");
//蓝图图表无法访问
UPROPERTY()
AActor* TargetActor;
};
Precauciones:
- La función Make se muestra para cualquier UStruct con una etiqueta BlueprintType
- Si hay al menos un atributo
BlueprintReadOnly
oBlueprintReadWrite
en UStruct, se mostrará Break - Los nodos puros creados por Break proporcionan un pin de salida para cada propiedad marcada con
BlueprintReadOnly
oBlueprintReadWrite
EditAnywhere
La función es especificar valores predeterminados para las variables miembro de Struct en la interfaz del panel de detalles del editor.
Tabla de datos
Ninguna de las estructuras anteriores se puede aplicar a la tabla de datos. Si desea utilizar la tabla de datos, la estructura debe heredarse FTableRowBase
como clase principal:
USTRUCT(BlueprintType)
struct FTestStruct : public FTableRowBase
{
GENERATED_USTRUCT_BODY()
//Data Table 可以编辑
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Test Struct")
FName StructName = FName("TestStruct");
//Data Table 无法编辑
UPROPERTY()
AActor* TargetActor;
};
Cosas a tener en cuenta :
- Necesidad de introducir archivos de encabezado
#include"Engine/Datatable.h"
- Las variables que no estén marcadas con
EditAnywhere
oEditDefaultsOnly
se mostrarán en la tabla de datos, pero no se podrán editar.
Otros detalles
- Ustructs puede utilizar los punteros inteligentes y el sistema de recolección de basura de UE para evitar que la recolección de basura elimine los Uobjects.
- Las estructuras se diferencian de los Uobjects en que funcionan mejor con tipos de datos simples. Para interacciones más complejas en su proyecto, es posible que desee crear subclases UObject o AActor.
- No considere el uso de replicación de red para UStructs. Puede considerar las variables UProperty al replicar a través de la red (todas las propiedades UPROPERTY en USTRUCT se replican en la red de manera predeterminada).
- Las funciones creadas en UStructs solo se pueden usar en C++ y no se pueden usar en planos (puede considerar usar BlueprintFunctionLibrary en su lugar, el método de implementación BPLibrary )
Enlaces de referencia:
Finalmente, el autor también es un novato, escribe artículos principalmente para registrar el proceso de aprendizaje, la portada proviene de Internet y cualquier infracción será eliminada.