Vamos a crear un sistema básico de combate del estilo JRPG o Pokemon, es decir, un sistema de combate por turnos.
Usaremos una nueva escena donde enfrentaremos contra nuestro personaje a los objetos enemigos que ya tenemos. Diseñaremos un menú de acciones para atacar y crearemos toda la lógica necesaria para la base de nuestro combate, así podrás extenderla con tus propios añadidos, si quieres.
Además, dejaremos un detallito final en el combate: los enemigos podrán soltar oro u otros ítems cuando los venzamos, los cuales podrás usar después para comprar mejoras. Donde podemos ver todo el material será desde el archivo llamado ProyectoFinal Sistema de combate.
Lo primero que haremos será crear una nueva escena la cual llamaremos Combat
Ahora desde la escena Town pondremos un elemento que nos permita entrar en esta nueva escena. Colocaremos esta entrada en la posición marcada en la imágen
Dentro de la jerarquía de la escena Town tenemos un grupo de objetos llamado Exits que son las salidas de nuestra escena hacía a otras. En este caso tenemos creado un elemento llamado ExitCombat
Desde el Inspector tenemos la siguiente configuración
Para abrir la ventana de Build Settings recordamos que es desde File>Build Settings
Ahora desde la carpeta de los Scriptable Objects>Scenes creamos un dato u scriptable Object llamado Combat
Abrimos la escena llamada Combat y nos encontraremos con esta organización en su Jerarquía:
El levelInitializer tendrá la siguiente configuración en la ventana del Inspector
Desde la carpeta de ScriptableObjects>GameManager crearemos un objeto scriptable que llamamos Combat
Este objeto tendremos que configurarlo también en la carpeta de Scripts>Utils>GameStateListener
Abrimos dicho script y dentro de sus líneas de código escribiremos: public UnityEvent OnCombatState
El menú de combate lo tenemos hecho en la carpeta de los prefabs>Menus>CombatMenu
Se nos cargará dicho menu una vez que iniciemos el juego y nos aparecerá en la ventana de Jerarquía
Dentro del menú nos encontramos con los siguientes botones y canvas:
Tenemos un botón de pausa que está configurado de la siguiente manera:
Luego tenemos un objeto padre llamado Combat HUD que contiene un contenedor, dos HUD uno para el enemigo y otro para el player. HUD: presentar información relevante mientras se juega.
Si abrimos el objeto BottomContainer es donde se almacena nuestro equipo dentro del juego y se muestra tal y como vemos en la siguiente imágen
Desarrollar un sistema de combate en Unity implica la implementación de mecánicas específicas para el combate, como la detección de colisiones, la gestión de la salud del jugador/enemigo, la animación y otros elementos relacionados:
1. Crear el Personaje/Enemigo:
1.1. Modelo 3D/2D: Importa o crea los modelos para tu personaje y enemigo.
2. Implementar la Salud:
2.1. Scripts de Salud:
- Crea un script para gestionar la salud (
HealthController
). - Controla la cantidad de salud y actualiza la interfaz de usuario (UI).
2.2. Colisiones:
- Usa colliders para detectar colisiones entre el jugador y los enemigos.
3. Controlar el Combate:
3.1. Scripts de Combate:
- Crea un script para gestionar las acciones de combate (
CombatController
). - Implementa métodos para atacar y recibir daño.
3.2. Animaciones:
- Asocia animaciones al combate.
- Utiliza el sistema de animación de Unity para cambiar entre estados de animación (atacar, recibir daño, etc.).
4. Input del Jugador:
4.1. Entrada de Teclado/Ratón:
- Implementa scripts para manejar la entrada del jugador (teclas, clics, etc.).
- Asigna acciones a los controles, como atacar, bloquear, etc.
5. Enemigos:
5.1. IA del Enemigo:
- Implementa una lógica simple para el comportamiento del enemigo (seguir al jugador, atacar, etc.).
- Utiliza la inteligencia artificial o patrones de diseño para gestionar la toma de decisiones del enemigo.
6. Interfaz de Usuario (UI):
6.1. Barra de Salud:
- Crea una barra de salud que refleje el estado actual del jugador/enemigo.
7. Sonido y Efectos Visuales:
7.1. Sonidos:
- Asocia efectos de sonido a las acciones de combate.
7.2. Partículas y Efectos Visuales:
- Agrega partículas y efectos visuales para realzar la experiencia de combate.
8. Optimización y Pulido:
8.1. Optimización:
- Optimiza el código para un rendimiento eficiente.
8.2. Pulido:
- Añade detalles adicionales, como transiciones suaves entre animaciones, retroalimentación háptica, etc.
9. Pruebas:
9.1. Pruebas de Jugabilidad:
- Realiza pruebas exhaustivas para garantizar un combate fluido y sin errores.