En este artículo, analizaremos la creación de un componente de inventario y su conexión con el actor requerido. Dado que este componente es simplemente un repositorio de objetos y la lógica de su carga / descarga, no hay diferencia en aplicarlo a un personaje o algún tipo de cuadro.
Puede crear un componente utilizando Blueprint y C ++ . Prefiero el segundo método, ya que voy a utilizar activamente la funcionalidad de C ++ .
En primer lugar, creamos una estructura celular para almacenar un elemento. Prefiero almacenarlo en un archivo .h separado para conectarlo libremente cuando sea necesario donde sea necesario:
Sí, nuestra celda de inventario contiene solo 3 variables: identificador, cantidad y parámetros únicos. Nada mas. Todos los datos se pueden copiar, guardar y descargar sin ningún problema. Sin texturas, referencias a actores , etc. no aqui Toda la información adicional se puede descargar de la base de datos en el DataAsset , del que hablamos anteriormente.
Lo más probable es que ya haya notado otra estructura StructItemFactors.h , conectada al principio. Esto no es más que un repositorio de propiedades únicas del objeto (en forma de flotador ), como desgaste, daño, etc. Es decir, propiedades que son inherentes solo a esta copia del tema, y ninguna otra es igual. Esta estructura es muy simple:
Vale la pena señalar una función muy interesante en la estructura anterior, que está diseñada para simplificar enormemente nuestras vidas:
friend bool operator==(const FItemFactor & Lhs, const FItemFactor & Rhs) { return Lhs.ItemFactorTag == Rhs.ItemFactorTag && Lhs.ItemFactor == Rhs.ItemFactor; }
Esto no es más que un operador de comparación == , que podemos usar para esta estructura para no extraer elementos para esto cada vez. Muy comodo
Entonces, con las estructuras terminadas. Procedemos a la creación del componente:
DreampaxContainerComponent.h Si en el código de arriba activa la línea
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
entonces puede conectar este componente directamente a Blueprint . Prefiero hacer esto en C ++ . Para Carácter, se ve así:
Inventory = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Inventory"));
Bueno, para un cofre como este:
ADreampaxActorContainer::ADreampaxActorContainer(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { Container = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Container")); }
Como puede ver, la diferencia está solo en los nombres de las variables.
En el próximo artículo hablaré sobre las características de la replicación (simple en los dedos ), lo que hará que nuestro inventario sea realmente multijugador.