Contenido del Curso
Juego de Lucha en Unity
Juego de Lucha en Unity
Crear Gestor de Estados
Estado:
csharp
Métodos abstractos:
public abstract void StartState();
public abstract void EndState();
son métodos abstractos.
Un método abstracto no tiene cuerpo (implementación) aquí y debe ser
implementado por cualquier clase no abstracta que herede de esta clase State
.
Método virtual:
public virtual void UpdateState() {}
es un método virtual.
Un método virtual tiene una implementación (en este caso, un cuerpo vacío {}
), pero puede ser sobrescrito por clases derivadas si requieren un comportamiento diferente.
Funcionamiento para nuestro enemigo
Herencia de estados:
La clase State
será heredada por otros estados específicos. Por ejemplo, podríamos tener clases como IdleState
, AttackState
y PatrolState
que heredan de State
.
Cada uno de estos estados implementará sus propias versiones de StartState()
, UpdateState()
y EndState()
.
Comportamiento del enemigo:
El comportamiento del enemigo se gestiona mediante estados, donde StartState()
inicializa el estado, UpdateState()
actualiza el comportamiento durante el estado y EndState()
realiza la limpieza después de que el estado termina.
Uso de clase abstracta:
Convertir State
en una clase abstracta garantiza que todos los estados específicos implementen los métodos necesarios, organizando el comportamiento del enemigo y simplificando la gestión de estados sin modificar el script del enemigo.
State Manager:
csharp
Explicación
El constructor public StateManager(State startingState)
inicializa el StateManager
con un estado inicial. Establece currentState
en startingState
y llama a currentState.StartState()
para inicializarlo.
El método ChangeState
, public void ChangeState(State newState)
, cambia el estado del enemigo. Llama a currentState.EndState()
para limpiar el estado actual, asigna currentState
al nuevo estado y luego llama a currentState.StartState()
para inicializar el nuevo estado.
El método UpdateStates
, public void UpdateStates()
, actualiza el estado actual llamando a currentState.UpdateState()
para ejecutar las acciones asociadas a ese estado.
Funcionamiento para Nuestro Enemigo
Al crear un StateManager
para nuestro enemigo, el constructor inicializa el estado inicial. Cuando el enemigo necesita cambiar su comportamiento, se llama al método ChangeState
, finalizando el estado actual con EndState()
, estableciendo el nuevo estado e inicializándolo con StartState()
. Durante el juego, el método UpdateStates
se llama repetidamente para ejecutar las acciones del estado actual mediante UpdateState()
.
Flujo de Trabajo de Ejemplo:
El enemigo comienza en un IdleState
, con el StateManager
creado y IdleState.StartState()
llamado para configurar el comportamiento de inactividad. Cuando el enemigo detecta al jugador, se llama a ChangeState(new AttackState())
, finalizando el comportamiento de inactividad con IdleState.EndState()
. El estado actual se establece en AttackState
y AttackState.StartState()
inicia el comportamiento de ataque.
En cada frame, se llama a UpdateStates()
, y si el estado actual es AttackState
, AttackState.UpdateState()
gestiona las acciones de ataque.
Mediante el uso de la clase StateManager
, es posible gestionar y alternar fácilmente entre diferentes comportamientos del enemigo de manera organizada.
Estado de Inactividad
csharp
Explicación
El constructor public IdleState(Animator animator)
recibe un objeto Animator
como parámetro y lo asigna a la variable animator
de la clase. El método StartState
, public override void StartState()
, establece el parámetro booleano "idle" en el animador como verdadero, lo que activa la animación de inactividad. El método EndState
, public override void EndState()
, establece el parámetro "idle" como falso, deteniendo la animación de inactividad.
Funcionamiento para Nuestro Enemigo
Cuando el enemigo entra en el IdleState
, el método StartState()
establece el parámetro "idle" en el animador como verdadero, iniciando la animación de inactividad y haciendo que el enemigo parezca inactivo. Cuando el enemigo sale del IdleState
, el método EndState()
establece el parámetro "idle" como falso, deteniendo la animación de inactividad y preparando al enemigo para la transición a otro estado, como moverse o atacar.
Flujo de trabajo de ejemplo
El StateManager
establece el estado del enemigo en IdleState
, llamando a IdleState.StartState()
para configurar el parámetro "idle" del animador en verdadero, iniciando la animación de reposo. Al cambiar el comportamiento del enemigo, el StateManager
llama a IdleState.EndState()
, configurando el parámetro "idle" en falso y deteniendo la animación de reposo. Luego, el StateManager
transiciona al enemigo a un nuevo estado, como AttackState
o PatrolState
.
Al utilizar la clase IdleState
, se garantiza que el enemigo pueda entrar y salir del comportamiento de reposo de manera fluida, haciéndolo más dinámico y realista. Esta estructura también facilita agregar o modificar el comportamiento de reposo del enemigo sin afectar otras partes del código del enemigo.
¡Gracias por tus comentarios!