Antes de seguir adelante y construir un sistema de puntos de referencia completo, probablemente deberías saber
que ya está disponible en Unity.
Así que hemos construido nuestro propio circuito de waypoints,
pero ahora te mostraré lo que Unity tiene disponible para ti.
Entonces, si toma el código que he incluido como recurso con esta conferencia,
dentro encontrará un script WaypointCircuit y WaypointProgressTracker y los arrastrará y soltará en su proyecto.
Estos dos archivos los he obtenido de una descarga e importación del paquete Utility.
Entonces está en Activos> Paquete de importación> Utilidad. Eso traerá una carpeta llamada Activos
estándar y, en algún lugar, encontrará estos 2 scripts, pero los he incluido para que pueda agregarlos
rápidamente y le mostraré la diferencia que obtiene al usarlos.
En primer lugar, hay un circuito de puntos de referencia y esto configurará lo que hemos logrado con una matriz y
estas bolas, pero aún necesitará tener las bolas allí porque son puntos de referencia.
Entonces, primero, en la Jerarquía, Crear vacío y llamaremos a esto nuestro WPCircuit. Para WPCircuit, arrastre y suelte el script
WaypointCircuit, luego obtenga todas las esferas que está utilizando para sus puntos de referencia,
recójalas y arrástrelas y suéltelas para que sean 'objetos secundarios' de WPCircuit.
Ahora seleccione el padre (el WPCircuit). En el Inspector, donde ha agregado ese código,
verá un botón que dice [Asignar usando todos los objetos secundarios]. Si hace clic en eso, creará un waypoint
automático de todos sus objetos.
También los vinculará con una bonita curva (que no podemos ver porque mis esferas están ligeramente debajo del
suelo).
Si los levanto, verás que este circuito se dibuja en la escena y puedes ver muy fácilmente que tienes un
circuito y ninguno de los puntos de referencia en el orden incorrecto para ser
un circuito completo.
Si desea cambiar el orden en que aparecen, en este componente del Circuito de Waypoint que ha
agregado allí, permítame
tomar el segundo y lo moveré hacia arriba y verá el resultado.
Ahora que Sphere (1) es el primero y Sphere (0) es el segundo, obtendrá este crossover y eso
podría ser lo que desea.
Esta bien.
También puede agarrar sus puntos de referencia y moverlos manualmente para cambiar el orden particular
de su circuito.
Así que son las 2 cosas que debes tener en cuenta al configurar el circuito.
Lo dejaré cruzado allí por un poco de interés.
En este punto, si quieres seguir usando el script WaypointFollow que ya hemos
escrito en tu tanque, entonces debes actualizarlo para usar el nuevo circuito waypoint, en lugar de las esferas individuales en la matriz
de objetos del juego que teníamos.
Así que echemos un vistazo a cómo actualizaríamos el script. De vuelta en WaypointFollow, en lugar de esta matriz
pública de GameObject
en la parte superior, ahora tomamos el circuito.
Ahora ese circuito es un tipo WaypointCircuit y está en el espacio de nombres UnityStandardAssets. Utilidad porque recuerde que dije que viene en la importación
de Utilidades si la baja desde allí, así
que asegúrese de declararla así. Será público, para que podamos decirle
dónde está el circuito y arrastrarlo y soltarlo en el Inspector.
El resto del código está bien aquí. En el Inicio,
ya no tendrá que obtener sus puntos de referencia con FindGameObjectsWithTag.
Entonces podemos comentar eso. Abajo, en LateUpdate, donde obtenemos cada punto de referencia y luego giramos
hacia él y avanzamos hacia él,
solo tenemos que cambiar nuestra referencia a lo que obtenemos. Entonces, en lugar del objeto del juego indexado
por el waypoint actual, estamos obteniendo el waypoint actual de la lista de waypoints que proviene del circuito.
Entonces, lo primero que hacemos es verificar la longitud del circuito.
Entonces, en lugar de waypoints. longitud que teníamos antes, ahora es circuito.
Waypoints longitud W ..
circuito de longitud Waypoints longitud y cuando
alcanzamos nuestro objetivo, estamos recibiendo el circuito. waypoints [currentWP]. posición. x entonces la transformación ha
entrado aquí porque estos
puntos de ruta tienen las posiciones directamente desde allí, no necesita la transformación.
Así que solo asegúrate de que no lo tienes. De nuevo, si estás en el espacio 3D y
quieres usar la z
para el waypoint también, adelante ... ponlo aquí, en lugar de la altura de tu personaje.
La otra cosa que necesitas cambiar es solo dentro de la dirección. parte de magnitud en la que estamos probando si
nos hemos quedado sin puntos de referencia y volvemos al principio nuevamente, necesitamos obtener
el circuito. Waypoints longitud no waypoints. longitud que teníamos antes.
Así que guárdelo y vuelva a Unity y presione Reproducir y podrá ver su
tanque moverse alrededor de su circuito de puntos de referencia. Entonces, son los mismos puntos de referencia que
teníamos antes, pero ahora solo los estamos organizando usando el código Unity's WaypointCircuit que trae y es muy
útil porque, en primer lugar, le brinda la visualización de cómo se verá su circuito
en la escena y
le permite reorganizar estos puntos de referencia. Con este método, notará que el tanque no se
adhiere a la línea amarilla. La línea amarilla en este caso,
es solo una guía de dónde está el circuito y qué punto de ruta está conectado a qué otro
punto de ruta.
Ahora vamos a poner en juego el WaypointProgressTracker.
Así que este es el otro script creado por Unity que viene en Utilities. Va a estar unido a nuestro tanque.
Seleccione el tanque en la Jerarquía y elimine el script WaypointFollow que creamos. Luego, en su lugar, en el
Inspector, desea arrastrar y soltar el WaypointProgressTracker.
Ahora este rastreador de progreso que verá también requiere un circuito de puntos de referencia
y puede darle el circuito que creamos justo antes.
La otra cosa que también tiene en la parte inferior es un objetivo.
El objetivo será un objeto hijo del tanque.
Seleccione el tanque, haga clic con
el botón derecho (esto está en la Jerarquía) Objeto 3D> Cubo.
Agarra ese cubo y aléjalo un poco del tanque, puedes verlo allí.
El Cubo se convertirá en una meta para que nuestro tanque viaje
y el cubo se adherirá al circuito y será empujado alrededor del
circuito por el código WaypointProgressTracker y el tanque lo seguirá.
Por lo tanto, el cubo en sí ni siquiera necesita ser visible y más tarde, cuando pones esto en producción,
no lo tendrás visible.
En primer lugar, simplemente apague su colisionador de cajas porque no necesita ninguna física extraña
en este sistema.
Ahora seleccione el tanque principal y arrastre y suelte su pequeño cubo en el objetivo.
Bien, en este punto, presionemos Reproducir y veamos qué sucede.
Todo bien.
Entonces puedes ver que tienes el cubo y lo están moviendo. Está sentado en el circuito.
Hay una línea verde que va entre el tanque y
el cubo y también está esta bola aquí también en el circuito.
Ahora todos estos valores están controlados en el script WaypointProgressTracker que está conectado al tanque.
Básicamente, lo que están haciendo es crear una pequeña banda elástica entre nuestro cubo y nuestro tanque, de modo
que el cubo no pueda alejarse demasiado del tanque mientras permanece en el circuito.
Si muevo mi tanque más cerca del
cubo y empiezo a
aparecer detrás de él, verás que el cubo avanza por el circuito.
Así que ese es el
rastreador de progreso que mueve el cubo por nosotros, automáticamente.
¡Ahora no quieres jugar arrastrando el tanque en la vista de escena!
Entonces, queremos programarlo para que siga automáticamente el cubo y ya hemos creado
este código, así que, ¿recuerdan cuándo tuvimos al zombi siguiendo al cubo manejable y creamos un
script llamado MoveLocal?
Es exactamente el mismo guión que ahora tenemos que poner en el tanque y decirle que nuestro objetivo
será el cubo.
Así que he creado este script en un archivo llamado FollowGoal.
Además del cambio de nombre a FollowGoal, en realidad solo se ha modificado otra línea de código.
Todavía tenemos nuestro 'objetivo público' por el que vamos a pasar por aquí y ahora,
en lugar de ser un cubo manejable, será ese cubo impulsado por el circuito.
Todavía tenemos nuestra velocidad, precisión y nuestra rotación, como teníamos antes.
De hecho, ni siquiera estamos utilizando la precisión en este caso, por lo que podría sacar eso. En LateUpdate es donde sucede todo
el trabajo, por lo que aún queremos hacer un lookAtGoal.
Luego establecemos nuestra dirección, como antes. Giramos hacia esa dirección y luego empujamos a nuestro personaje
hacia adelante.
Observe que la verificación de precisión 'si' ahora se ha ido porque no queremos que nuestro tanque se detenga cuando se acerque a ese cubo porque si se
detiene, el cubo se detiene y usted no quiere eso, solo quiere que el cubo se
detenga. siga moviéndose por el circuito y el tanque para seguir siguiendo.
Así que guárdelo y vuelva a Unity, seleccione el tanque, agarre ese nuevo código FollowGoal, arrástrelo y suéltelo
en el tanque en el Inspector, para que tenga el WaypointProgressTracker y
también tenga su FollowGoal .
Para la variable Objetivo expuesta, desea agregar su objeto cubo, así que arrastre y suelte eso en el 'Objetivo'.
Ahora cuando presionas Reproducir y verás que ya alineé mi cubo listo para ir al punto 1 y mi tanque justo detrás
de él.
Por supuesto que puedes tenerlos en cualquier lugar.
Presione play y
ahora el cubo comenzará a calcular su trayectoria a lo largo del circuito y
podrá ver que el tanque se está moviendo.
La otra cosa que encontrarás es que la forma en que este tanque sigue al cubo
con la velocidad y la rotación, es que el tanque puede cortar esquinas ... porque el tanque está tratando de ir directamente hacia el cubo.
Realmente no tiene conocimiento y no le importan sus puntos de referencia.
Entonces el cubo está actuando como una pequeña guía.
Ahora, si desea modificar qué tan lejos puede llegar ese cubo y qué tan rápido va alrededor de
las esquinas, entonces puede cambiar
en el WaypointProgressTracker qué tan lejos 'mirará hacia adelante' y qué tan lejos será la velocidad para 'mirar hacia adelante'. bien.
También puede modificar un umbral de punto a punto y este umbral es qué tan cerca queremos que el
cubo llegue a cada uno de estos antes de que se
considere haberlos visitado, y esa es esencialmente nuestra precisión.
Y ese es el guión de waypoint que viene con Unity.
Siéntase libre de usarlos juntos (el circuito y el rastreador) o use uno de ellos con su código, lo
que quiera.
Todos están haciendo lo mismo. Nuestro código es realmente bastante simple porque solo estamos presionando una A. YO. reenviar el circuito, por
lo que es
posible que prefiera usar eso porque lo ha escrito y puede modificarlo según su propio entendimiento.