En la clase anterior, vimos lo que eran las máquinas de estado finito y creamos un entorno.
Ahora vamos a empezar a codificar para ese entorno y a crear algunos estados.
Muy bien, así que de vuelta en nuestros activos lo que vamos a hacer es crear un nuevo script, por lo que crear
una secuencia de comandos C-sharp y esta secuencia de comandos se llamará Entorno de Juego.
Abre eso y luego dentro vamos a crear nuestro singleton.
Así que esto no va a heredar del comportamiento de mono y va a ser una clase pública sellada como hemos hecho antes.
Y luego queremos crear nuestras listas para mantener esos puntos de control.
Así que, en primer lugar, vamos a crear una instancia privada de entorno de juego estático para nuestro singleton y luego
una privada.
Lista de objetos del juego.
Los puntos de control equivalen a una nueva lista de objetos de juego.
Y luego una llamada pública para ese objeto de juego de la lista pública.
Puntos de control.
Consigue.
Puntos de control de retorno.
De acuerdo.
No necesitamos un inicio ni una actualización, así que nos desharemos de ellos.
Y entonces todo lo que necesitamos aquí es nuestro singleton.
Así que pondremos un entorno de juego estático público.
Mentón único.
Consigue.
Si la instancia es igual a null, entonces la crearemos.
La instancia equivale a un nuevo entorno de juego.
Y luego rellenaremos esos puntos de control para la propia instancia.
Así que los puntos de control de instancia con la capital.
El punto añade alcance y ese alcance será el juego.
Objeto.
Encuentra.
Objetos con etiqueta el plural y queremos puntos de control.
La etiqueta que tiene la C mayúscula sólo es punto de control, no puntos de control.
Y terminar con eso.
De acuerdo.
Y entonces devolveremos la instancia y nos aseguraremos de que tenemos suficientes paréntesis de cierre para todo.
Tres de ellos en el fondo allí.
Ese es tu juego.
Singleton, que ahora podemos utilizar para agarrar esos puntos de control.
Y cuando empezamos a crear los estados, como verás en un momento, y las clases de estado son tan agradables para
tener un singleton que se puede llamar.
No tienes que pasarlo entre todo está bien.
Es hora de crear nuestra clase de estado base.
Así que en los activos haga clic en el botón derecho para crear una secuencia de comandos C-sharp.
Llamémoslo Estado, que tiene sentido.
Abramos eso en nuestro editor.
Y de nuevo no va a ser un comportamiento mono ahora va a tener estas bibliotecas que ya tenemos en la parte superior,
pero estamos tratando con la malla nav.
Así que vamos a tener que incluir el sistema de IA del motor de la unidad.
Muy bien.
Así que ya tenemos nuestra clase.
Deshagámonos de los métodos que ya existen allí.
Así que lo primero, vamos a crear un enum público para el estado.
Y aquí quieres listar todos los estados posibles y puedes añadir más después.
Sólo vamos a poner algunos obvios para un guardia NPC para que puedan estar en un estado de inactividad, un
estado de patrulla, podrían estar en la persecución.
Así que persigue el estado, podrían estar atacando o incluso podrían estar dormidos.
A continuación, tendremos otro enum público, que será nuestro evento.
Así que esto nos dirá si estamos en entrar, actualizar o salir.
Así que donde estamos en la ejecución del estado particular ahora en este estado, vamos a traer en un montón de
valores que son específicos para nuestro juego real y la forma en que hemos configurado.
Pero en primer lugar, necesitamos un estado público y llamémoslo así.
Así que esto registrará cuál es el nombre del estado.
Entonces queremos que nuestro evento protegido para la etapa, que es uno de estos entrar en la actualización o la salida.
Y luego vamos a tener.
Objeto de juego protegido NPC a protegido.
Animator Adam porque también se trata de animaciones.
Transformación protegida para el jugador.
Tenemos un dios que estamos creando.
Por lo tanto, el guardia necesita saber dónde está el jugador para poder enfrentarse a él y saber si debe disparar o perseguir
al jugador, dependiendo de la distancia.
Y también un protegido.
Estado.
Que será el siguiente.
Una cita así.
Este estado no es el enum, que es este de aquí arriba.
Así que el nombre se basa en el enum y este siguiente estado es el que se ejecuta después del que estamos ejecutando actualmente.
Así que si estás en reposo y luego quieres entrar en patrulla, entonces el siguiente estado sería apuntar
a un estado de patrulla.
Muy bien, genial.
De acuerdo.
Algunos otros valores que necesitamos para el real I vamos a tener
un flotador esta distancia y vamos a establecer que a 10. 0 si el ángulo de viz flotante es igual a digamos 30 grados y un flotante llamado distancia de disparo o dist,
que fijaré en 7. 0 f.
Ahora bien, lo que esto significa es que cuando el jugador está a una distancia de diez del PNJ, entonces el PNJ debería
poder verlo si está orientado a menos de 30 grados de su línea de visión.
Si el NPC se acerca lo suficiente dentro de un rango de siete, puede entonces entrar en estado de ataque.
Llegaremos a esa lógica en la próxima conferencia.
Continuemos escribiendo el método o el constructor, debería decir, para este estado en particular.
Así que el estado público, va a tomar un objeto de juego que será el NPC, un agente de malla nev, agente y animador.
Y una transformación para nuestro jugador.
Entonces, qué hacemos con todo eso.
Así que los sentamos aquí.
Así que la NBC es igual y el Agente Pixie será igual al agente por el que pasamos.
Ese agente no debería tener un guión bajo delante.
Entonces vamos a tener un átomo que es igual a la puntuación de subrayado annum.
Etapa que será igual al evento.
Entra en el punto.
Y luego el jugador es igual en el marcador.
Ahora me he dado cuenta de que no he declarado agente déjame terminar este constructor y vamos a volver en la parte superior
y añadir que en.
Así que un agente de malla naval protegido llamado agente.
Muy bien.
Ahora debajo de allí, vamos a poner en el código de esqueleto para cada una de nuestras diferentes etapas o fases a medida que avanzamos
a través del estado.
Así que estos serán un vacío virtual público.
Entra.
La etapa es igual a la actualización del punto de evento.
Ahora la razón.
Este es el.
Entra.
Así que esto.
Esto debería ejecutarse primero.
Cuando entras en un estado y cuando lo hace entonces prepara el escenario para ser lo que sea que va a ser
después para que sepa más adelante en el proceso que es donde va.
Vacío virtual público para la actualización.
Y luego esta etapa será igual a la actualización de eventos porque una vez que estás en la actualización,
quieres permanecer en la actualización hasta que la actualización realmente te arroja y luego la salida virtual pública que luego establecerá la etapa
igual a la salida de punto de evento para que sepa qué ejecutar y limpiar después de sí mismo allí.
Por último, necesitamos un proceso de estado público, que es el método que se ejecutará desde el exterior y hará progresar el estado
a través de cada una de esas diferentes etapas.
Así que si la etapa es igual al evento no entrar, entonces vamos a ejecutar el método de entrar.
Si stage es igual a event dot update en mayúsculas porque ese es nuestro valor enum, entonces
vamos a ejecutar update y luego si stage es igual a event dot exit, vamos a llamar al método exit y vamos a devolver
el siguiente estado.
Observe que este método en particular devuelve un estado.
Así que ahora si no vamos a devolver el siguiente estado, sólo haremos un retorno.
Esto para que sigamos devolviendo el mismo estado.
Y verás que esto ayuda a progresar al siguiente estado y al siguiente estado en la línea.
A medida que avanzamos ahora, vamos a crear un estado de inactividad y un estado de patrulla para que realmente podamos conseguir que nuestro NPC
haga algo para que puedas ver esto funcionando.
Ahora voy a crear mis estados que heredan de la clase de estado base en este archivo punto csv.
Una mejor práctica sería probablemente tenerlos en archivos CSS separados, pero como estamos construyendo esto sobre
la marcha y yendo y viniendo entre el código y lo que no, voy a tener todo el lote en el mismo
lugar sólo para que sea un poco más fácil para nosotros para que podamos ver todo y vamos a volver y seguir
poniendo que juntos en el próximo video.