Esconderse tiene que ser uno de mis comportamientos de dirección favoritos porque es como un poco furtivo y también
puedes crear cosas que no están tratando de esconderse de un personaje en particular, sino que se están escondiendo mientras
se acercan sigilosamente.
Así que esconderse y perseguir, lo que le da una dinámica realmente interesante en un entorno de juego.
Así que para hacer esto, en realidad es bastante simple, pero hay un montón de trabajo involucrado.
En primer lugar, necesitas un montón de obstáculos tras los que tu agente pueda esconderse.
Así que tenemos nuestro árbol que ha estado ahí todo el tiempo.
Vamos a usar eso ahora para averiguar cuál es el mejor lugar para esconderse.
Si el ladrón va a esconderse del policía, entonces lo que hacemos es obtener un vector desde el policía
hasta el árbol y seguir pasando por el centro del árbol hasta el lado opuesto, lo que significa que si
estás en el lado exactamente opuesto del árbol del policía, entonces obviamente estás escondido del policía.
Porque si se intentara hacer una refundición del policía al ladrón o del ladrón al policía, no podrían
verse porque chocaría con el árbol y por lo tanto estás escondido.
Así que, en primer lugar, lo que tenemos que hacer es definir cuáles son todos los escondites del mundo real.
Así que de vuelta en nuestro entorno, si echamos un vistazo en la jerarquía bajo el objeto de entorno, encontrarás
el objeto árbol que ha estado sentado allí durante bastante tiempo y si haces clic en él, verás que está
etiquetado con la etiqueta ocultar en minúsculas.
Ahora bien, si el tuyo no lo es por la forma en que se importa, asegúrate de crear
una nueva etiqueta y poner el árbol en oculto.
Y luego podemos usar esa etiqueta de ocultación para cualquier objeto que quieras poner en el entorno para ocultarse.
Recuerda también que el árbol es una estática de navegación.
Bien, eso significa que aquí lo tenemos configurado para la navegación estática.
Y cuando luego horneamos nuestra malla de navegación, va a excluir el árbol.
Así que si le damos a "bake" y nos hace un "bake" rápido, vamos a encontrar que se ha eliminado como un lugar que puede
estar de pie.
Así que si vas y añades varios árboles, vuelve siempre y haz esto, hornea en tu navegación.
Bien, ahora que tenemos eso, también queremos hacer del árbol un colisionador ahora, no porque queramos que nuestro personaje
colisione con él, sino porque en algún momento queremos ser capaces de lanzar un rayo a través
de él y ver si podemos ver la copa.
Así que seleccione el árbol y vaya al inspector, añadir componente y voy a añadir un colisionador.
Queremos añadir un colisionador de cajas.
Eso es porque va a ser sencillo.
Ahora con el árbol obtendrás un colisionador de cajas que se sitúa bastante bien alrededor de ese árbol.
Podrás ver más en la vista de la escena.
Si tienes algún otro objeto y no encaja bien, entonces puedes ajustar el centro y el
tamaño en el inspector para eso.
Colisionador Y ahora que tienes este árbol con la etiqueta y el colisionador, podrías esencialmente
hacer un pre-fab de él o copiar y pegar o duplicarlo alrededor del entorno.
Y entonces tienes muchos lugares para esconderte, ¿verdad?
Así que tenemos todos estos escondites.
Tenemos uno en este momento.
Siempre es bueno hacer pruebas con una sola cosa para poder averiguar qué ha fallado.
Si es así, tenemos que recoger todos estos árboles al principio de pulsar el botón.
Así que voy a crear un singleton y voy a llamar a ese singleton el mundo,
y va a mantener todas nuestras posiciones de ocultación.
Así que llamémosle mundo y entremos aquí.
Ahora, lo que vamos a hacer con esto es no convertirlo en un comportamiento único.
Vamos a deshacernos de eso y vamos a convertirlo en una clase pública sellada.
Y luego vamos a crear una instancia privada estática de sólo lectura que será igual a un nuevo mundo.
Y también crearemos un array privado de objetos de juego estático que contendrá todos nuestros obstáculos
y los llamaremos escondites.
No es que sean más crear todos nuestros constructores tan estático mundo.
Y en este constructor, en realidad va a ir a través del mundo y agarrar todos los escondites.
Así que escondiendo lugares.
Es igual al objeto de juego.
Encuentra los objetos del juego con la etiqueta.
Asegúrese de que es la búsqueda de objetos de juego para el nido para que usted obtenga toda la matriz.
Y las queremos con etiquetas con hide que estén todas en minúsculas.
Así que tenemos que terminar nuestro singleton un mundo privado.
Que es básicamente vacío y un mundo estático público.
Instancia.
Con un.
Entra ahí.
Así que consigue devolver la instancia.
Que sería una I minúscula porque estamos hablando de esta de aquí arriba, I.
Y luego también tendremos otro método objeto de juego público.
Un derecho, que consigue los puntos de ocultación.
Así que consigue lugares para esconderte.
Y ahí, vamos a volver a esconder puntos.
Eso significa que este objeto va a ir a buscar todos los escondites y cualquier agente
del entorno sólo tiene que pedírselos al mundo.
Singleton Y no tienen que recibirlos todo el tiempo.
Bien, guarda eso.
Y ahora volvamos a la Unidad.
Lo siguiente que vamos a hacer es cambiar nuestro bot para que ahora haga la ocultación.
Así que abre tu script de bot y ahora añadamos un método de ocultación.
Así que aquí abajo vamos a poner la piel vacía.
Ahora lo que Hyde tiene que hacer es encontrar el mejor escondite.
Ahora bien, ese puede ser el escondite más cercano si quieres que se esconda muy rápido, o puede
ser el más lejano en este caso.
Vamos a encontrar el escondite más cercano al agente y nos esconderemos allí.
De acuerdo.
Así que necesitamos un valor de distancia para mantener la distancia con la que estamos comparando las cosas.
Así que inicialmente, vamos a establecer que a las matemáticas f infinito por lo que es muy, muy grande y que cualquier cosa que usted puede emparejar
con tiene que ser más pequeño.
Y luego necesitamos un vector tres para nuestro lugar elegido.
E inicialmente lo pondremos en el vector 3. 0.
De acuerdo.
Luego vamos a recorrer todos los escondites con un bucle de cuatro.
Así que cuatro int i es igual a cero i es menor que el punto de instancia mundial obtener puntos de ocultación.
Longitud del punto.
I.
Además.
De acuerdo.
Luego vamos a crear un vector tres, que será nuestro escondite.
Dirección y eso va a ser igual a nuestro árbol.
Así que nuestro mundo punto ejemplo.
No te escondas.
Deportes o paréntesis deportivos.
Posición transformada del punto I menos la posición transformada del objetivo.
Así que este es el vector desde el policía hasta el árbol.
De acuerdo.
Así que el vector tres para nuestra posición de ocultación.
va a ser igual a lo mismo otra vez.
Así que voy a agarrar toda esta posición del árbol.
Así que esa es la posición del árbol.
Entonces lo que vamos a hacer es añadir un poco más de espacio para que realmente pase el árbol.
Así que para hacer eso, sólo tienes que añadir en el vector de dirección alta a eso y queremos normalizarlo.
Así que la versión normalizada, por lo que sabemos la longitud de uno y luego podemos establecer una distancia detrás de
ese árbol que queremos ocultar.
En este caso, vamos a escondernos a una distancia de cinco detrás del árbol.
Y puedes jugar con eso dependiendo de lo cerca que quieras estar de ese árbol en particular.
Y de hecho mejoraremos este algoritmo más adelante y nos desharemos de ese cinco.
Pero por ahora, vamos a ponerlo en cinco.
Bien, ya lo tenemos.
Ahora lo que vamos a hacer es comprobar si el siguiente árbol que aparece está realmente más cerca.
Y si lo es, lo utilizaremos como nuestro lugar elegido.
Así que queremos si el vector tres punto de distancia este punto transformar la posición de punto, ocultar, pausa.
Así que esta es la distancia entre nuestro agente y la posición de ocultación.
Si eso es menos que dist, entonces es donde vamos a ir a escondernos.
Así que aquí pondremos lugar elegido igual a esconderse.
Pausa.
Y luego nos pondremos al día.
La distancia.
Así que la distancia va a ser igual al vector tres distancia aquí que acabamos de probar.
Así que coge eso y ponlo ahí.
Así que ahora va a ser la distancia al árbol más cercano que hemos encontrado hasta ahora.
De acuerdo.
Y luego terminaremos nuestro bucle for.
Esto aquí debería ser despreciado, no lo que se actualiza.
Así que disculpado.
Y ahora que tenemos eso, podemos ir al punto de destino del agente al lugar elegido.
Y si realmente queremos ser coherentes en lugar de hacer eso, porque eso es lo que hace Seek de todos modos, sólo usaremos
Seek en caso de que hagamos algo diferente a buscar.
Bien, ese es nuestro escondite.
Bastante sencillo si se piensa en ello.
Guarda eso.
Ahora, lo que vamos a hacer es en nuestra actualización, vamos a establecer esto para ser oculto.
Bien, entonces guardémoslo.
Ahora volvamos a la unidad, y estamos más o menos listo para jugar y probar esto.
Así que pulsa el play y nuestro agente se va a esconder detrás del árbol.
Sí.
Así que ahora si me muevo hacia aquí.
Va a ir allí y si me muevo de nuevo, va a ir allí.
Así que se esconde constantemente.
Detrás del árbol, que es agradable, grande para nosotros.
Pero si se piensa en el procesamiento que se realiza ahora, el algoritmo de ocultación se ejecuta en cada actualización.
Si ya se ha escondido del policía, no hace falta que lo sigamos haciendo hasta que llegue un punto en el que ya
no esté escondido.
Y lo arreglaremos en el próximo vídeo.
Pero por ahora, probablemente quieras añadir algunos árboles más para ver cómo funciona.
Así que vamos a entrar en el entorno y coger el árbol que tienes.
Voy a ir al control DH, pulsar la tecla W y luego hacer un nuevo árbol y moverlo alrededor
del control DH y moverlo alrededor del control DH por allí.
¿Y qué dije?
Tienes que acordarte de hacer.
Tienes que ir a tu navegación y tienes que acordarte de hornear para asegurarte de que has hecho eso para la nueva
malla de navegación.
Vale, pues pulsa el play.
Ahora va a ir a esconderse detrás de ese árbol porque en realidad es el más cercano y se puede
ver eso.
Y ahora, debido a la forma en que está programado actualmente, es posible que no puedas hacerlo.
Oblígale a ir a un árbol diferente dependiendo de si puede encontrar uno que esté más cerca.
No.
Ahora, una forma de hacerlo es si volvemos al código del bot y recordamos este pequeño cinco que pusimos
sobre lo lejos que estamos del árbol.
Si nos escondemos detrás de un árbol a una cierta distancia de ese árbol y luego esa distancia acaba estando
más cerca de otro árbol, más tarde se moverá.
Así que actualicemos esto a, digamos, diez, que creo que probablemente va a ser estirar las cosas
un poco en cuanto a la distancia.
Pero vamos a darle al play.
Y.
Tiene que esconderse detrás de ese árbol porque es el más cercano, pero va a ir a una distancia de diez.
Así que vamos a bajar esto.
Puedes ver que ahora está aquí.
Así que voy a ir a perseguirlo con mi policía.
Y ojalá lo empuje.
Ahora va y se esconde detrás de ese árbol a una distancia de diez.
De acuerdo.
Ese es el método básico de ocultación.
Vamos a volver en el próximo video en la segunda parte y realmente mejorar en eso.