En esta conferencia, continuaremos trabajando en nuestra simulación de multitudes.
Desde la última conferencia, he agregado algunos escenarios adicionales a la escena que encontrarás en la carpeta
Street en el proyecto en Prefabs.
También he agregado otra ubicación de objetivo para que la multitud camine a lo largo de dos lados de los edificios.
Ahora hacemos algunas modificaciones a sus controles de animación para evitar que caminen como un Ejército
regido antes de agregar un obstáculo dinámico.
Lo primero que debemos hacer es evitar que caminen uno al lado del otro.
Recuerde, están reproduciendo exactamente la misma animación a exactamente la misma velocidad.
Lo que podemos hacer para que parezca un poco diferente es, en primer lugar, hacer que no estén en sintonía,
para que estén en diferentes fases a través de ese ciclo de caminar y lo otro que
podemos hacer es cambiar qué tan rápido o qué tan lento están caminando.
Entonces, lo primero que queremos hacer es encontrar nuestra animación.
Hagamos clic en Activos> Personas y luego está la 'Multitud'.
Haga doble clic en eso y este es el controlador de
animación con nuestro 'caminar' en él.
Si selecciona la animación de Caminar y mira en el Inspector, verá que hay una Velocidad (a la
que volveremos en un momento) y un 'Desplazamiento de ciclo'. Este desplazamiento del ciclo es un valor entre 0
y 1 que especifica en qué parte del ciclo se está reproduciendo la animación.
Ahora, si configura eso en valores aleatorios para todos los personajes, se desfasarán entre sí.
Para hacerlo fácilmente, necesitamos un parámetro que podamos obtener de nuestro código.
Entonces, antes que nada, vamos a la sección Parámetros y luego hacemos clic en '+'.
Vamos a agregar un Flotador y llamaremos a ese flotador wOffset y eso se debe a que es un desplazamiento
a pie.
Luego, para nuestra animación de caminata, selecciónela y diríjase al Inspector.
Desea marcar la casilla Parámetros que
se
encuentra justo al lado de Desplazamiento de ciclo y automáticamente completará wOffset como parámetro.
Ahora, cualquier valor que le demos a wOffset en nuestro código aparecerá aquí y establecerá el desplazamiento para la caminata.
Para establecer ese desplazamiento, regrese a su código AIControl. En el Inicio, justo después de configurar el animador,
antes de comenzar la animación de caminata, estableceremos el valor de desplazamiento para que sea
un valor aleatorio entre 0 y 1, entrando en este wOffset.
Es un SetFloat
en este caso, porque es un valor flotante.
Así que guárdelo, vuelva a Unity y presione Reproducir y
ahora deberíamos ver que nuestros personajes no estarán sincronizados entre sí, lo que hace
que parezca un poco más naturalista.
Ahora también podemos hacer lo mismo con la velocidad. Si volvemos a nuestra caminata en el animador, encontrará en
el Inspector que existe el valor de Velocidad que
vimos antes.
También se puede cambiar con un parámetro y tiene un multiplicador debajo, que puede ver aquí.
Creemos eso antes que nada. Así que vamos y creamos un Float y llamemos a esto 'speedMult'.
Inicialmente se establecerá en 1, de lo
contrario no irá a ningún lado porque si multiplica por 0, irá a
una
velocidad de 0 y luego seleccionará su animación de Caminata, haga clic en el cuadro Parámetro al lado y
luego cambie su multiplicador a speedMult.
Ahora podemos modificar speedMult también en nuestro script.
Entonces, si abrimos nuestro script nuevamente (el AIControl) y podemos hacerlo en el Inicio, entonces podemos darles una velocidad
de caminata aleatoria.
Así que vamos anim.
SetFloat ("speedMult" y luego Random. Rango, digamos en algún lugar entre 0. 5 y 2. Pongamos una 'f'
allí
para nuestro flotador y guardemos eso. En este punto, solo obtendrás la velocidad que se multiplica en la animación.
Por lo tanto, se ralentizará o se
acelerará, pero la velocidad del agente (el Agente de malla de navegación) no se cambia y, por lo tanto, debe asegurarse de que si cambia la velocidad de la animación,
también cambie la velocidad a la que la malla de navegación El agente también se está moviendo.
Primero, necesitamos guardar cuál es tu multiplicador para tu velocidad, así que
pongamos 'float sm =' y sacaremos esto de aquí.
Entendido.
Pégalo allí
y luego pon esto como nuestro 'sm' y luego también usaremos el 'sm' en la
velocidad de nuestro agente, entonces 'agente. velocidad * = sm; ' como eso.
Ahora tenemos nuestro multiplicador de velocidad aplicado a nuestra animación Y al movimiento del agente.
OK, así que guárdelo y volveremos a Unity y lo jugaremos y deberíamos obtener diferentes velocidades como puede
ver allí
y las animaciones también son diferentes.
Entonces, al multiplicarlo por 2 como máximo, caminan bastante rápido, pero puedes ver
que la animación los sigue.
Si desea ralentizarlos porque no parece particularmente naturalista, puede hacer que
la gente lo siga tranquilamente a 0. 1f ritmo y luego tal vez la gente dice 1. 5f.
Depende de usted lo que tiene
allí y
el efecto que realmente está buscando, pero al menos todos ahora no están caminando el uno con el
otro y algunas personas están dando un paseo informal y otras personas tienen prisa.
Ahora vamos a agregar un obstáculo dinámico al NavMesh para que nuestros agentes se muevan y ese obstáculo puede ser cualquier
cosa, pero lo convertiremos en un controlador en primera persona.
Así que vaya a sus Activos e importe el paquete de caracteres, luego,
una vez que lo haya hecho, obtendrá un paquete de FirstPersonCharacter en 'Activos estándar> Caracteres' de
su carpeta de Activos.
Vaya a Prefabs y agarre el FPSController y arrástrelo y suéltelo en la escena.
Si está debajo de la superficie, solo levántelo un poco y voy a moverlo hacia atrás porque quiero acercarlo a estas personas que suben
de esta manera, para que podamos verlo. Ahora, tiene una cámara que
usaremos en un momento, pero por ahora, usaremos la cámara actual que apunta a
la escena porque quiero recorrer esto y que veas que estos agentes van a ignóralo
al principio.
Entonces, con eso allí, presiona Reproducir y luego puedes usar las teclas W, A, S y D para mover a tu personaje y notarás que puedes
pasar directamente a través de las personas y que ni siquiera les importa o saben que ' Re
allí.
Entonces, si estuvieras jugando esto en modo de primera persona, sucedería lo mismo ... la gente simplemente caminaba hacia arriba y luego
directamente a través de ti.
Ok, solo presiona Escape para recuperar el control del mouse y dejar de jugar. Para convertir este controlador en primera persona en
un obstáculo en
NavMesh, agregamos un componente llamado 'Obstáculo de malla de navegación'.
Por lo tanto, seleccione el controlador en primera persona en la escena y vaya al Inspector, agregue el componente
y estamos buscando un obstáculo de malla de navegación.
Haz clic en eso.
Ahora no tiene que hacer que este objeto sea estático, como lo hemos hecho con todas las demás
geometrías porque no es estático. Se va a mover y los agentes van a reaccionar a eso. Ahora dentro del obstáculo de
malla de navegación, también puede establecer si será una cápsula o una caja.
Nuestro personaje es una cápsula, así que pondremos una cápsula allí.
En este punto, verá que hay 2 cápsulas sentadas allí. Uno es el colisionador de física y el otro es su
colisionador NavMesh y puede ajustarlos para que sean exactamente iguales. Los dejaré como están porque
son bastante similares.
Entonces, cuando presionamos Reproducir y llevamos a nuestro personaje a dar un paseo, descubrimos que las personas lo evitan y, por
lo tanto, están dando vueltas y si nos topamos con las personas, también afectaremos dónde están.
Entonces, para ver cómo se ve esto, presiona Escape y deja de jugar. Bajemos, busque nuestra cámara
que tenemos antes y puede eliminarla o simplemente apagarla.
Ahora, cuando presionamos play, pasará de forma predeterminada a la cámara en primera persona y ahora podemos
caminar a través de las personas y nos evitarán. Entonces puedes ver a este personaje dando vueltas y también
afectamos a los que nos rodean.
Puede apartarlos del camino y, como
dije antes, puede agregar este obstáculo de malla de navegación a cualquier objeto del juego en su escena para convertirlo en
un obstáculo dinámico en la NavMesh, para que también pueda tener un automóvil que esté conduciendo. a lo largo y
tener TI como un obstáculo de malla de navegación, de modo que cualquier agente que esté atrapado allí tendrá que navegar alrededor de
ese objeto en movimiento.
Por supuesto, como puede imaginar, cuantos más obstáculos agregue que sean dinámicos, más tendrá
que trabajar el código NavMesh para seguir recalculando los caminos.
Entonces, cuando puede tener algo que es estático y no se mueve, desea hacerlo estático y pensar en lo
que se va a mover y hacerlo no estático y agregarle el obstáculo de malla de navegación.