Gestión de estados enemigos con Máquinas de Estados en Unity [AI #03]

Find AI Tools
No difficulty
No complicated process
Find ai tools

Gestión de estados enemigos con Máquinas de Estados en Unity [AI #03]

Índice

  1. Introducción
  2. Creación de una máquina de estados para gestionar los estados de los enemigos
  3. Crear el componente AIState
  4. Crear el componente AIStateMachine
  5. Implementar la máquina de estados
  6. Crear el componente AIAgent
  7. Implementar la función de actualización
  8. Implementar la función de cambio de estado
  9. Implementar el estado de persecución del jugador
  10. Implementar el estado de muerte
  11. Implementar el estado de reposo
  12. Conclusiones

🤖 Creación de una máquina de estados para gestionar los estados de los enemigos

¡Hola a todos! Soy el Kiwi Coder, y en este episodio voy a mostrarte cómo crear una máquina de estados para gestionar los estados de tus enemigos. Cada uno de estos personajes se encuentra en un estado de reposo hasta que me interpone en su camino, y cuando su salud llega a cero, entran en un estado de muerte. Además, a veces quedan atrapados entre sí. ¡Así que vamos a empezar!

Pero antes de sumergirnos en este emocionante proceso, echa un vistazo al episodio anterior a través del enlace de arriba.

1. Introducción

En este artículo, aprenderemos cómo crear una máquina de estados para gestionar los estados de los enemigos en nuestros juegos. La máquina de estados nos permitirá definir y controlar los comportamientos de los enemigos de manera eficiente y modular.

2. Creación del componente AIState

El primer paso es crear el componente AIState. Este componente será una interfaz que implementará cada uno de los estados individuales de la IA. Cada estado tendrá un identificador asociado a él, por lo que crearemos un nuevo enum llamado "AIStateID" para representar los diferentes estados. Además, necesitaremos crear las funciones básicas de una máquina de estados, como ingresar al estado, actualizarlo y salir de él.

public interface AIState
{
    public enum AIStateID
    {
        Idle,
        ChasePlayer,
        Death
    }

    public AIStateID GetID();
    public void Enter(AIAgent agent);
    public void Update(AIAgent agent);
    public void Exit(AIAgent agent);
}

3. Creación del componente AIStateMachine

A continuación, crearemos el componente AIStateMachine. Este componente contendrá un arreglo de estados y una referencia al agente AI. También necesitaremos crear un constructor que reciba al agente como parámetro y una función para registrar los estados en el arreglo.

public class AIStateMachine
{
    private AIState[] states;
    private AIAgent agent;

    public AIStateMachine(AIAgent agent)
    {
        this.agent = agent;
        int numberOfStates = System.Enum.GetNames(typeof(AIStateID)).Length;
        states = new AIState[numberOfStates];
    }

    public void RegisterState(AIState state)
    {
        int index = (int)state.GetID();
        states[index] = state;
    }
}

4. Implementación de la máquina de estados

Ahora que hemos creado los componentes AIState y AIStateMachine, podemos implementar la máquina de estados. Para Ello, simplemente debemos crear una instancia de AIStateMachine en el componente AIAgent y llamar a sus funciones correspondientes en la función de actualización.

public class AIAgent
{
    private AIStateMachine stateMachine;

    public void Start()
    {
        stateMachine = new AIStateMachine(this);
        stateMachine.RegisterState(new AIIdleState());
        stateMachine.RegisterState(new AIChasePlayerState());
        stateMachine.RegisterState(new AIDeathState());

        stateMachine.ChangeState(AIStateID.Idle);
    }

    public void Update()
    {
        stateMachine.Update();
    }
}

5. Implementación del estado de persecución del jugador

El siguiente paso es implementar el estado de persecución del jugador. Este estado se activará cuando el jugador se encuentre frente al agente y cambiará al estado de muerte cuando la salud del agente llegue a cero. Para implementar este estado, crearemos una nueva clase llamada AIChasePlayerState que heredará de AIState. Dentro de esta clase, implementaremos las funciones correspondientes al estado de persecución.

public class AIChasePlayerState : AIState
{
    public AIStateID GetID()
    {
        return AIStateID.ChasePlayer;
    }

    public void Enter(AIAgent agent)
    {
        // Lógica para entrar al estado de persecución
    }

    public void Update(AIAgent agent)
    {
        // Lógica para actualizar el estado de persecución
    }

    public void Exit(AIAgent agent)
    {
        // Lógica para salir del estado de persecución
    }
}

6. Implementación del estado de muerte

El siguiente estado que implementaremos es el estado de muerte. Este estado se activará cuando la salud del agente llegue a cero y hará que el agente deje de seguir al jugador y entre en un estado inactivo. Para implementar este estado, crearemos una nueva clase llamada AIDeathState que heredará de AIState. Dentro de esta clase, implementaremos las funciones correspondientes al estado de muerte.

public class AIDeathState : AIState
{
    public AIStateID GetID()
    {
        return AIStateID.Death;
    }

    public void Enter(AIAgent agent)
    {
        // Lógica para entrar al estado de muerte
    }

    public void Update(AIAgent agent)
    {
        // Lógica para actualizar el estado de muerte
    }

    public void Exit(AIAgent agent)
    {
        // Lógica para salir del estado de muerte
    }
}

7. Implementación del estado de reposo

Por último, implementaremos el estado de reposo. Este estado será el estado inicial del agente y se activará cuando el agente no esté persiguiendo al jugador. Para implementar este estado, crearemos una nueva clase llamada AIIdleState que heredará de AIState. Dentro de esta clase, implementaremos las funciones correspondientes al estado de reposo.

public class AIIdleState : AIState
{
    public AIStateID GetID()
    {
        return AIStateID.Idle;
    }

    public void Enter(AIAgent agent)
    {
        // Lógica para entrar al estado de reposo
    }

    public void Update(AIAgent agent)
    {
        // Lógica para actualizar el estado de reposo
    }

    public void Exit(AIAgent agent)
    {
        // Lógica para salir del estado de reposo
    }
}

8. Conclusiones

En este artículo, hemos aprendido cómo crear una máquina de estados para gestionar los estados de los enemigos en nuestros juegos. La máquina de estados nos permite definir y controlar los comportamientos de los enemigos de manera modular y eficiente. Espero que esta información te haya sido útil y que puedas aplicarla en tus propios proyectos de desarrollo de juegos. ¡Buena suerte y hasta el próximo artículo!

Most people like

Are you spending too much time looking for ai tools?
App rating
4.9
AI Tools
100k+
Trusted Users
5000+
WHY YOU SHOULD CHOOSE TOOLIFY

TOOLIFY is the best ai tool source.