Uso de la estructura UE C++

[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 UPROPERTYmarcar 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 usar GENERATED_BODY()en su lugar
  • El UStruct creado de esta manera no es visible en el plano.

Estructura visible del plano

Debe agregar BlueprintTypela palabra clave y agregar UPROPERTYlos 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 BlueprintReadOnlyo BlueprintReadWriteen UStruct, se mostrará Break
  • Los nodos puros creados por Break proporcionan un pin de salida para cada propiedad marcada con BlueprintReadOnlyoBlueprintReadWrite

    Estructura de hacer y romper
  • EditAnywhereLa función es especificar valores predeterminados para las variables miembro de Struct en la interfaz del panel de detalles del editor.

    Editar en cualquier lugar

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 FTableRowBasecomo 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;
};

Crear tabla de datos
Cosas a tener en cuenta :

  • Necesidad de introducir archivos de encabezado#include"Engine/Datatable.h"
  • Las variables que no estén marcadas con EditAnywhereo EditDefaultsOnlyse mostrarán en la tabla de datos, pero no se podrán editar.

    El actor de destino no se puede 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:

Documentación oficial

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.

Supongo que te gusta

Origin blog.csdn.net/qq_52179126/article/details/129768456
Recomendado
Clasificación