En la conferencia anterior, armamos nuestro selector y llegamos a un punto en el que pudimos hacer que nuestro personaje
se moviera hacia nuestras puertas.
Ahora bien, en esta etapa no es el árbol de comportamiento el que nos defrauda.
Bueno, en realidad no hay nada que nos falle por el momento, pero no es el árbol de
comportamiento lo que tenemos que manipular para fijar la posición de movimiento de nuestro personaje.
Pero tenemos que extender los métodos porque tenemos un árbol de comportamiento pero también estamos tratando de interactuar
con una malla de navegación y lo que sea que estés haciendo en cualquier tipo de juego que tengas, vas a estar interactuando con el
propio entorno del juego.
Así que vas a tener un código que vincula las cosas del árbol de comportamiento con el juego real.
Ahora bien, si se tratara de un shooter animado en primera persona o algo así, entonces tendrías
que tener un montón de métodos propios que llamaran a estados de animación y cosas así.
Pero en este caso, sólo nos preocupan los estados de la malla de navegación y el movimiento de la misma.
Ahora, si volvemos a nuestro código de robo, este es realmente el tipo más alto de nivel del código de comportamiento.
Esto es lo que quieres escribir aquí que interactúa con tu árbol de comportamiento.
Una vez que hayas creado tu estructura de árbol de comportamiento como la que tenemos, no deberías tener que entrar y tocar eso.
No quieres poner ningún código de malla de navegación especial dentro de tu árbol de comportamiento.
Debe ser muy genérico para que se pueda aplicar a cualquier cosa.
Así que vamos a volver a nuestro comportamiento ladrón de nivel superior y en realidad ampliar nuestros métodos de ir a la puerta,
la puerta trasera en la puerta principal aquí abajo, porque queremos ser capaces de ir a la puerta, sino
también ir a través de la puerta.
Así que el atravesar la puerta es en realidad deshacerse de ese obstáculo de la malla naval.
Así que esto es algo que tenemos que construir en estos comportamientos aquí o estos métodos que van en nuestras
acciones, no algo que se pondría en el código del árbol de comportamiento en sí.
Sí.
Así que para empezar, realmente necesitamos poner algo en estas dos puertas para darnos una indicación de
si están allí o no.
Ahora, lo que voy a hacer es sugerir que estas puertas se puedan bloquear y entonces en el futuro podrías tener un montón de
puertas alrededor del lugar y hacer que tu agente compruebe qué puerta está desbloqueada para poder
pasar por ella.
Así que vamos a crear un nuevo script tan rápidamente.
Script en C-sharp, llamémoslo bloqueo, abrámoslo en el editor y esto simplemente
va a mantener un valor público bool is locked, pongámoslo en false inicialmente.
Muy bien.
Así que eso es todo.
Eso es todo.
Sí.
Guarda eso.
Vuelve a la unidad.
Ahora vamos a agarrar nuestra puerta delantera y arrastrar y soltar esa cerradura allí y vamos a marcar inmediatamente para decir que la
puerta delantera está cerrada.
Entonces cogeremos la puerta de atrás y pondremos esa cerradura aquí y no la tendremos cerrada.
Así que si volvemos a nuestro comportamiento para nuestro ladrón ahora en la parte superior aquí, vamos a la puerta principal.
Si eso falla, entonces vamos a ir a la puerta trasera.
Bien, la puerta principal está cerrada.
El comportamiento debe ser que vaya a la puerta principal, no pueda entrar en la puerta principal y luego vaya
a la puerta trasera, que es lo que queremos allí.
Ahora, vamos a tener que extender estas dos cosas aquí.
Si añades más puertas, tendrás más de estos métodos particulares.
Pero en cuanto a la puerta en sí, está cerrada.
El comportamiento va a ser más o menos el mismo y se va a trasladar a todas las puertas.
Así que lo que haremos aquí es darnos otro método.
Así que el estado del nodo público ir a la puerta, lo que hace que sea un genérico ir a la puerta y vamos a pasar por el objeto
de juego de la puerta.
Y si tienes un montón de objetos con los que tienes que interactuar, que son básicamente el
mismo tipo de objeto, podrías poner ese tipo de comportamiento del objeto aquí o las propiedades de los objetos, supongo.
Así que en este caso, es la puerta y es si está cerrada o no.
Bien, entonces pondremos aquí no hay estatus s iguales.
Ir a la ubicación y vamos a pasar a través de nuestra posición de transformación de punto de la puerta.
Bien, entonces si SX es igual a nodo punto estado punto éxito, significa que el agente ha llegado a la puerta.
Ahora, en ese caso, tenemos que añadir un poco de lógica adicional si la puerta.
O debería decir no punto de la puerta obtener componente de bloqueo punto está bloqueado.
Así que si la puerta no está cerrada, entonces vamos a ir puerta punto establecer activo a falso.
Esto realmente se deshará de la puerta.
Seguirá existiendo.
Simplemente se va a desactivar, lo que significará que ya no será un obstáculo en la malla de navegación.
Y luego vamos a poner return no dot status success porque es cuando decimos que hemos tenido éxito en hacer
esto.
Ahora bien, si la puerta resulta estar cerrada, entonces queremos ir a devolver el nodo punto estado punto fallo, en cuyo momento
esto volverá a nuestra secuencia y le dirá a nuestra secuencia que esta puerta en particular ha fallado.
Ve a la siguiente puerta.
Prueba con la siguiente puerta.
Lo siento.
No en la secuencia, en el selector.
Así que este ha fallado.
Va a la siguiente.
De acuerdo.
Y luego vamos a poner un else y simplemente volver.
Así que si esto todavía está en marcha, queremos seguir devolviendo la marcha desde aquí.
Ahora podemos reemplazar, ir a la ubicación en el ir a la puerta trasera e ir a la puerta delantera con nuestro ir a la puerta.
Así que vamos a poner ir a la puerta y vamos a pasar por la puerta trasera y luego ir a la puerta
y pasar por la puerta delantera allí.
Bien, es hora de probar esto, así que guárdalo.
Volvamos a la unidad ahora.
Todavía va a ir a la puerta principal y luego a la puerta trasera si es necesario.
Así que pulsa el play y se va a la puerta principal.
No se puede entrar por la puerta principal.
Voy a ir por la puerta trasera.
Así que va a dar la vuelta para probar la puerta trasera y ésta no está cerrada.
Sabemos que está desbloqueado, se deshace de él y entra, continúa para conseguir el diamante, obteniendo
el diamante y luego haciendo nuestra huida.
Ahora bien, no dice que vaya a la puerta trasera para salir porque ese obstáculo de la puerta trasera no está ahí.
La malla de navegación en realidad dirigirá al ladrón de vuelta a través de ese camino de todos modos porque se convierte en un camino, porque hay un obstáculo
por aquí, en realidad no se puede utilizar eso.
Genial.
Así que eso está funcionando muy bien.
Ahora, una cosa que puede haber notado, mi ladrón, si hago clic en él en este escenario, va un
poco más rápido que antes.
Y es que cuando estás probando esto, se vuelve un poco laborioso esperar
a que tu ladrón, ya sabes, se mueva por tu mapa.
Así que todo lo que he hecho es seleccionar el ladrón y abajo en el agente de la malla naval establecer la velocidad a diez.
¿De acuerdo?
Así que eso es básicamente la ampliación de su código y sus métodos y donde realmente debe mantener las interacciones
de las cosas del motor del juego.
De acuerdo.
Así que las medidas o animaciones de NAV o lo que sea que estés haciendo por separado y fuera de ese árbol de comportamiento porque
quieres mantenerlo lo más genérico posible.
Muy bien.
Es hora de un desafío.
Lo que me gustaría que hicieras es ampliar tu código para que cuando el ladrón llegue al diamante, éste desaparezca
de tu escena o lo recoja, lo que quieras hacer con él.
De acuerdo.
Así que este es tu reto es básicamente modificar y vamos a entrar en el código, ir a Diamante.
Así que este es el que va a trabajar aquí.
Tienes el objeto del diamante ahí.
Quieres recogerlo o deshacerte de él cuando eso sea un éxito.
Ponga en pausa el vídeo y ahora inténtelo.
Cuando volvamos, te mostraré cómo hacerlo.
De acuerdo.
Bienvenido de nuevo.
¿Cómo te fue?
Bueno, tenemos una situación similar con nuestro ir a diamante, como lo hacemos con nuestras
puertas, más o menos con respecto a la lógica que va a pasar aquí.
Si tiene éxito, no queremos devolver el éxito inmediatamente.
En realidad sólo queremos agarrar el diamante.
Bien, entonces subamos aquí y modifiquemos esto.
Así que pongamos.
Estado del nodo.
S es igual a eso y luego queremos si s es exitoso.
Así que si s es igual a no estado no exitoso, entonces lo que vamos a hacer es, bueno, usted podría desactivar el diamante
o en realidad podría adjuntar el diamante al agente.
Así que vamos a intentar unir el diamante al agente.
Así que lo que haríamos en este caso es ir punto diamante, transformar punto padre es igual a este objeto de juego punto,
punto transformar.
Así que eso se convierte en el padre.
Ahora, si no, vamos a hacer un retorno de SE aquí abajo.
Si tiene éxito, va a devolver éxito si no va a devolver lo que sea corriendo o.
Sí, de acuerdo.
Así que guarda eso.
Volvamos a la unidad y probemos esto.
Así que vamos a pulsar el play.
Vamos a entrar de nuevo por la puerta trasera.
Ahora bien, el diamante en este caso es todo el zócalo con el diamante encima.
Así que todo el lote.
Así que me voy a ir.
Si quisieras coger sólo el objeto diamante, tendrías que escarbar en la jerarquía del zócalo
por aquí y cogerlo.
Pero tendrías que tener el diamante como un objeto de juego separado que pasaras al script.
Porque el zócalo es lo que realmente está en la misión NAV.
Tienes que llegar hasta el zócalo, pero eso no significa que no puedas recoger el diamante.
Simplemente no puedes usar el diamante púrpura como destino de la malla de navegación porque no está en la malla de navegación.
De acuerdo.
Así que ha cogido el diamante y se va con él.
Ahora.
Lo es.
Sí, está patinando un poco por la velocidad que he subido tan rápido, y no lo he
compensado, pero está funcionando.
¿Cómo te fue con ese reto?
Espero que te hayas dado cuenta.
Ahora puedes ampliarlo aún más si quieres robar alguno de estos cuadros que hay en la escena, porque sólo tienes
que hacer lo mismo que hiciste con Puerta.
Así que en lugar de ir a Diamante, sería como ir a una obra de arte, y entonces podrías ir a cualquiera de estas
en particular, robarla, cogerla y sacarla de la galería.