Sistema de inventario - parte 1

El paso siguiente en mi proyecto será crear un sistema de inventario para el jugador y contenedores de almacenamiento como cofres. El sistema de inventario tendrá tres componentes: el personaje del jugador, los objetos coleccionables y el inventario donde se almacenan los objetos coleccionados.

Inventory Component

Para crear el inventario, usaré un Componente Actor, un tipo especial de Blueprint que se puede adjuntar a cualquier Actor y puede agregar variables, funciones, interfaces, etc. Sin embargo, no puede agregar mallas o componentes renderizables.

El componente tendrá tres variables importantes:

  • InventoryItems: una lista de artículos que se han recolectado y se almacenan en el inventario.
  • MaxSize: un entero que indica el número máximo de artículos que se pueden almacenar en el inventario.
  • ActualSize: un entero que indica el número de artículos actualmente en el inventario. Se utiliza para verificar si se puede tomar un objeto.

La variable InventoryItems es de tipo matriz y almacena instancias del objeto BP_BaseCollectable. El componente también tendrá una función "AddItem" que verifica si hay espacio en el inventario y agrega el objeto coleccionable si es posible. La función recibe un objeto BP_BaseCollectable y devuelve "true" si se agregó el elemento y "false" de lo contrario. Esta es la lógica del Blueprint:

Third Person Character

El componente de inventario se agregará al personaje del jugador usando el Blueprint del Personaje en Tercera Persona. El jugador tendrá acceso a la función "AddItem" en todos los Blueprints.

Recuerda el post sobre la interacción usando interfaces donde hemos implementado un sistema útil para activar elementos.

Collectable Objects

Los objetos coleccionables heredarán de BP_BaseCollectable, que es un Blueprint Actor que implementa la interfaz BPI_Interactable.

El objeto base tiene cuatro variables, de las cuales tres se usarán en un futuro post para la interfaz de usuario:

  • Size: el tamaño del objeto en el inventario.
  • Name: el nombre que se mostrará en la interfaz de usuario.
  • UIImage: la imagen que se mostrará en el inventario.
  • IsCollected: indica si se ha recolectado el objeto. Si es así, no se renderizará y estará posicionado alejado del jugador.

Cuando el jugador interactúa con un objeto coleccionable, los siguientes pasos ocurren en el gráfico de eventos:

  • Se obtiene el componente de inventario del jugador.
  • El objeto coleccionable se agrega al componente de inventario a través de la función AddItem.
  • El objeto coleccionable desaparece.

Si el objeto es coleccionado, se posicionará por encima del jugador para evitar colisiones "fantasma".

Para este ejemplo, creé dos objetos coleccionables para probar con una malla del paquete Mech Constructor. Cada objeto tiene un nombre e imagen establecidos en el panel de detalles predeterminado.

El siguiente paso va a ser mostrar el inventario en pantalla.