Hola.
Bienvenido de nuevo a nuestra construcción de este sistema fantasma desde cero.
Ahora vamos a haber creado ya el mundo y los estados del mundo es trabajar en la programación
de las acciones.
Lo primero que vamos a construir son algunas acciones.
Así que vamos a entrar en esa secuencia de comandos y la acción en sí va a realizar.
La acción se va a encargar no necesariamente de la ejecución de la acción, sino de todos los detalles
de una acción concreta.
Ahora, no vamos a utilizar esta acción g como sí mismo, ¿de acuerdo?
En realidad vamos a heredar de ella.
Así que vamos a crear una clase abstracta en este caso.
Ahora, antes de continuar a través del resto del código, también tenemos que utilizar el motor de la unidad punto I porque estamos
utilizando una malla de navegación y por lo tanto tenemos que acceder a eso y verás que un poco más tarde.
De acuerdo.
Así que en la parte superior, vamos a seguir adelante y declarar todas las cosas que podemos establecer sobre una acción particular.
Por lo tanto, todos estos serán públicos para que usted pueda establecerlos.
El inspector.
En primer lugar, tenemos un nombre de acción y es posible que desee establecer que a la acción sólo
como un defecto allí, entonces un flotador público para el costo de la acción.
Lo pondremos en uno por defecto.
Debo mencionar sobre este costo es que su planificador encontrará el plan más barato para trabajar.
Así que cada acción tiene un costo particular y va a tratar de ir con el que va a ser una especie
de menos tensión en su agente.
No significa que necesariamente siempre se vayan a hacer los planes de menor coste, sobre todo si no se pueden conseguir
y se tiene que hacer otro.
Pero supongo que se puede pensar en el coste como si el agente quisiera realmente hacer esa acción concreta.
Como por ejemplo, ¿cuánto le disgusta hacer esa acción para que haga algo que sea un poco
más fácil?
Y supongo que se podría pensar en términos de juegos como Los Sims, donde tendrán cosas que son sus
acciones más favoritas y que harán y las harán más automáticamente.
Pero si eso no está disponible, entonces harán algo que no les guste.
Y si no les gusta porque su coste es mucho mayor, entonces sus emociones se ven afectadas.
Por lo tanto, también podría utilizar este coste para tener en cuenta cómo se siente su agente.
Si quieres entrar en ese tipo de lado emocional de la programación, estos agentes que no estaban
aquí, debo decir así que a continuación necesitamos un objeto de juego público para el objetivo.
Ahora el objetivo es la ubicación donde esta acción va a tener lugar para que tengamos
que mover nuestro personaje de malla nav de un lugar a otro.
Bien, entonces vamos a tener un objeto de juego público, etiqueta de objetivo, y esto es para que podamos recoger los objetos de juego
utilizando la etiqueta, encontrarlos si existen en la jerarquía, en caso de que no tengamos un objetivo
aquí arriba.
Y verás que se utiliza en breve.
Carroza pública.
Queremos una duración de la acción.
¿Cuánto tiempo va a tardar?
Cuánto tiempo deberíamos tener a nuestros agentes parados en un punto de ruta concreto realizando prácticamente la acción
y luego necesitamos algunos estados del mundo.
Así que necesitamos un estado mundial público para las condiciones previas y necesitamos un estado mundial público para los efectos posteriores.
Así que estos son los elementos que nuestro planificador va a emparejar en cada lado de la acción.
Si piensas en el diagrama que teníamos con todas nuestras acciones enlazadas como fichas de dominó emparejadas,
vale.
Así que lo siguiente que necesitamos es un agente nav mesh público, que es nuestro agente nav mesh unido a nuestro agente para
moverlo.
Y también vamos a crear un diccionario público.
Cuerda.
Cadena int.
Condiciones previas.
Y un público.
Cadena de diccionario de cada uno de los efectos.
Y lo que va a hacer con estos estados del mundo aquí es esto nos permite recordar cómo hicimos el sistema de estado mundial serializar voluntad
aquí y estamos utilizando el estado mundial.
Podemos verlos en el inspector.
Así que puedes escribir todas tus precondiciones y tus efectos en el inspector.
Pero cuando queremos ir a planificar con ellos en nuestro planificador, tiene mucho más sentido que estén
en un diccionario, simplemente hace que sea mucho más fácil trabajar con ellos.
Así que vamos a utilizar esto para obtenerlos a través del inspector y luego vamos a ponerlos en estos
dos diccionarios.
Lo siguiente que necesitamos es otro estado del mundo público que son las creencias de nuestro agente o el estado de nuestro
propio agente.
Así que tiene un conjunto interno de los estados que vamos a trabajar con y, finalmente, hasta la parte superior aquí,
bool pública para correr.
Entonces, ¿realizamos esta acción en este momento?
Y lo pondremos inicialmente en false porque cuando estamos realizando una acción, no queremos seguir
y estar realizando otra acción.
Así que ahora vamos a seguir adelante y escribir nuestro constructor.
Así que habrá una acción g pública donde declaramos nuestra condición previa.
Así que pre condiciones es igual a nuevo diccionario cadena int y el.
Afecta a la nueva dicción cada cadena int.
De acuerdo.
Ahora, ¿qué va a pasar en la vigilia?
Bien, tenemos que establecer todas las piezas que están pasando con nuestras acciones.
Inicialmente, vamos a tener que poblar estos dos diccionarios con los valores que se ponen en el
inspector allí.
Y también tenemos que hacernos con el agente de malla de navegación que está en el mismo objeto de juego.
Así que vamos a crear un vacío público despierto.
Y primero pondremos al agente.
Así que el agente es igual a este objeto de juego punto obtener componente y estamos recibiendo el asimiento de nuestro agente de malla nav.
Por eso.
Y luego necesitamos si las precondiciones no son iguales a null.
Así que en realidad hay algo en esas precondiciones en el inspector, entonces vamos a hacer un bucle a través de ellos.
Así que para cada estado del mundo w en precondiciones con la C mayúscula, entonces vamos a ir y añadirlo a nuestro diccionario
de precondiciones.
Así que pre condiciones punto añadir w punto clave y w punto valor así.
Y luego necesitamos lo mismo para nuestro efecto posterior.
Así que vamos a copiar eso y ponerlo aquí.
Esto será si los efectos posteriores no son nulos, entonces vamos a sacar todos los estados del mundo de los efectos
posteriores.
Y vamos a añadirlos a nuestros efectos.
Así que ahora vamos a añadir algunos métodos de ayuda aquí que nuestro planificador va a necesitar.
Y en primer lugar, una vez que una pelota pública es alcanzable.
Para determinar si realmente podemos lograr este objetivo en particular y dentro de aquí, que va a volver.
Es cierto.
Sólo asumiendo que podemos.
Y luego el más importante, que es un bool público, es alcanzable dado y esto será es nuestra acción
alcanzable dado que hay ciertas precondiciones entrando.
Así que este será el diccionario que será nuestra cadena int.
Cuatro condiciones.
Y luego dentro de aquí, vamos a ir para cada par de valor clave de la cadena.
INT.
Así que nuestra condición previa en las condiciones previas.
Así que estamos haciendo un bucle a través de nuestras precondiciones que hemos almacenado para esta acción en particular y estamos buscando
cada una de estas condiciones para asegurarnos de que en realidad coincide con ellas.
Así que si no hay señales de condiciones, el DOT contiene la clave.
O p punto ki.
Entonces devolveremos false.
Así que no podemos hacerlo porque no se cumplen las condiciones previas.
Y luego volveremos.
Es cierto si hemos llegado hasta el final y hemos comprobado que cumplimos todas las condiciones previas para
ello.
Ahora, finalmente, sólo necesitamos y nos desharemos de esos dos métodos porque no los vamos
a usar.
Vamos a añadir dos métodos públicos abstractos.
Bool pre perform y public abstract bull.
Post perform.
Así que recuerda, vamos a heredar de esta clase en particular y queremos
asegurarnos de que forzamos que hay un método de pre rendimiento y un método de post rendimiento que
escribes y que te permitirá poner en el código personalizado para cada acción que puedes hacer otras comprobaciones antes de que una acción
realmente se inicie, que es hacer cosas como asegurar que ciertos recursos están disponibles u otros agentes
están disponibles, y luego cualquier otra condición posterior que podría salir de la acción en particular en
cuanto a si vas a afectar el estado del mundo con esa acción o si sólo afecta al agente.
Muy bien.
Así que lo guardaremos ahora que tenemos la acción hecha.