En esta conferencia, vamos a empezar a escribir el código para conducir el coche con un controlador de inteligencia
artificial.
Así que lo que tenemos que considerar es la dirección de avance del coche y el vector hacia el waypoint.
A partir de ahí, podemos calcular el ángulo de giro que necesita el coche para empezar a orientarse en la dirección del
waypoint.
Y para ello, podemos utilizar un poco de trigonometría simple de la escuela secundaria.
Así que si recuerdas tus reglas sobre tan, coseno y seno para encontrar los ángulos de un triángulo
rectángulo, puedes construir un triángulo rectángulo como este donde tienes tus valores X y Z, que
es básicamente la distancia entre tu vehículo y el siguiente punto de ruta.
Ahora, el uso de una decena de dos nos permitirá encontrar también el ángulo completo en función del cuadrante en el que aparece
el ángulo.
Ahora, no voy a entrar en estas matemáticas para usted, pero si quieres echar un vistazo
a la fuente adjunta, que va a través de un diez dos y cómo eso difiere ligeramente de diez y por qué podemos salir de encontrar ese ángulo completo cuando el ángulo
no es en realidad dentro del triángulo rectángulo que hemos construido.
Muy bien.
Así que empecemos con el guión.
Vamos a crear una nueva secuencia de comandos C-sharp y vamos a llamarla A. I. Controlador.
Y que A. I. controlador va a ir a nuestro coche.
Así que una vez que termine de compilar, sólo tienes que arrastrar y soltar aquí en el coche y luego sólo comprobar que está
allí.
Bien, abramos eso.
Por lo tanto, necesita saber acerca de la secuencia de comandos de la unidad para que puedan llamar al método de ir para aquellos.
Así que aquí vamos a añadir primero una matriz de la unidad de las secuencias de comandos de la unidad así y luego en el inicio vamos a agarrar
todos esos.
Así que las secuencias de comandos de la unidad, DS va a ser igual a este componente get en la unidad de los niños.
Así que eso es sólo va a recoger automáticamente todas esas secuencias de comandos para usted y asegúrese de que
usted utiliza la versión plural de la misma, porque no vamos a obtener los componentes en los cuatro de ellos o cualquiera que
sea el número de ruedas que ha añadido a su vehículo en particular.
De acuerdo.
Así que además de todo eso, también queremos conseguir el circuito.
Así que vamos a poner un circuito público.
Y esto apuntará al circuito que has creado para el coche.
También necesitamos un flotador público para la sensibilidad de la dirección y lo pondremos a 0. 01 F inicialmente.
Entonces necesitamos un vector tres para el objetivo hacia el que nos dirigimos actualmente y necesitamos un INT para
nuestro waypoint actual.
Ahora usted ha visto esto antes porque en realidad hemos hecho un bucle alrededor de los waypoints con nuestros tanques que hemos
hecho.
Pero en este caso particular, es un poco diferente porque estamos dirigiendo hacia los puntos
de ruta en lugar de simplemente deslizar todo el vehículo a través.
De acuerdo.
Así que lo que queremos hacer en el inicio, para empezar es establecer nuestro
objetivo a la primera waypoint por lo que será igual a los waypoints de circuito de punto, punto de ruta actual transformar la posición de punto así.
Bien, guardemos eso y volvamos a la unidad y configuremos estas cosas.
Así que con nuestro coche, tenemos nuestro circuito aquí, vamos a arrastrar y soltar eso ahí para que pueda recoger
esos waypoints.
Y por un momento, volvamos a nuestro script de conducción, ¿de acuerdo?
Porque aquí queremos este código.
Vamos a agarrar esto porque no se va a utilizar más dentro de la unidad.
Así que básicamente queremos la mitad de esto, pero vamos a comentar toda esta actualización porque no queremos que
se ejecute de forma independiente.
Bien, entonces guarda ese interruptor de vuelta a nuestro controlador y pega tu código aquí.
Ahora este go necesita ejecutarse en todos los scripts de la unidad aquí arriba, así que vamos a tener un pequeño bucle for.
Así que cuatro int i es igual a cero i es menor que la longitud del punto d.
También puedes usar a4h.
Supongo que estoy más familiarizado y voy directamente a un bucle for normal cuando estoy codificando y vamos a poner esto
así y luego tenemos que conseguir.
Índice de I dot go y ejecuta ese go ahora puedes ver que no le está gustando justo aquí si cambiamos de nuevo al script de la unidad
y echas un vistazo al go, no es público.
Así que tenemos que hacerla pública para poder acceder a ella de nuevo.
Controlador Así que guarda eso.
Volvamos a entrar aquí y te darás cuenta de que ya no se lee, así que puedes guardar
eso y eso va a ejecutar nuestro coche ahora la A y la SE ya no vamos a utilizar.
En realidad queremos programar esos valores.
Pero con esto aquí ahora podemos comprobar si sigue funcionando correctamente, como las ruedas
y todo va a.
Así que vamos a pulsar el botón de reproducción y comprobar que todo está configurado correctamente.
Así que las ruedas están girando y aún podemos avanzar y girar.
Así que esos comandos están llegando muy bien.
De acuerdo.
Así que vamos a seguir viendo a nuestro controlador aéreo.
Así que vamos a deshacernos de estos valores o, de hecho, vamos a dejarlos ahí porque en lugar de utilizar el
eje de obtención y la vertical y horizontal para aquellos, vamos a programarlos en base a los ángulos que necesitamos
para girar entre nuestros waypoints.
Bien, pongamos el resto del código.
Lo primero que vamos a necesitar aquí en la parte superior es un cuerpo rígido para el cuerpo rígido que está
unido al coche porque necesitamos saber a qué velocidad va, que es su velocidad.
Así que en el inicio vamos a nuestro ser cuerpo rígido es igual a este punto obtener componente cuerpo rígido.
Bien, ahora en la actualización, vamos a bajar y hacer las modificaciones que necesitamos aquí.
Dejemos la aceleración y la dirección como están por ahora.
Pero vamos a calcular el ángulo entre la dirección en la que se encuentra el coche y donde está el siguiente waypoint.
Y tenemos que hacerlo en el espacio local, local al coche actual.
Así que significa que, básicamente, el valor local para la parte delantera del coche siempre va a ser considerado
como el ángulo de cero.
Y luego tienes que ver cuánto tiene que girar desde esa posición
para que podamos obtener el objetivo local de este punto de transformación inversa, y eso obtendrá el objetivo relativo a la ubicación del coche.
Así que no importa en qué parte del mundo esté o hacia dónde se gire, será sólo
local.
Así que considera el coche básicamente en 000 y luego vamos distancia flotante al objetivo es igual a la distancia del vector
tres puntos entre el objetivo.
Y se transforman.
Posición del punto.
Y entonces podemos calcular el ángulo.
Así que el ángulo del objetivo flotante es igual al punto f matemático.
Un diez al objetivo local, ex objetivo local.
Punto Z multiplicado por maf f punto rad a grados porque la unidad funciona cuando hace cualquier cálculo de ángulos o funciones de ángulos funciona en radianes
y lo necesitamos en un pozo, realmente no lo necesitamos en grados.
Simplemente tiene más sentido para nosotros cuando está en grados.
Ahora, la aceleración, la pondremos como 0. 5 F, vamos a ponerlo en una aceleración estática
y la dirección.
Vamos a calcularlo desde nuestro ángulo.
Así que aquí vamos a ir a las matemáticas f pinza.
Vamos a sujetar el ángulo objetivo multiplicado por la sensibilidad de la dirección.
Vamos a fijarlo entre menos uno y uno, como hicimos anteriormente, porque básicamente
queremos que sea un porcentaje de -1 a 1.
Ahora, cuando estamos trabajando en el ángulo, que va a ser determinado en la forma en que estamos realmente frente o
hacia dónde se enfrenta el coche.
Porque si está orientado, por ejemplo, hacia arriba, así, y quieres girar hacia este, entonces tienes que girar en sentido
contrario a las agujas del reloj.
Si el coche está mirando hacia abajo y tiene que ir por aquí, entonces en realidad en el mundo que tiene que hacer frente o girar en
el sentido de las agujas del reloj.
Así que sí importa en qué dirección está orientado el coche y podemos obtenerlo de la velocidad real del coche,
que es por lo que hemos añadido nuestro cuerpo rígido para poder ir a las matemáticas f sine.
Sólo queremos saber el signo de la velocidad.
Así que la magnitud de la velocidad del cuerpo rígido que será la velocidad, ya sea que esté viajando hacia adelante o hacia atrás.
Y una vez que hayamos hecho eso, podemos hacer un bucle y pasar todo a nuestros accionamientos
de rueda.
Después de eso, tenemos que actualizar nuestros puntos de ruta.
Así que una simple sentencia if aquí, si la distancia al objetivo es menor que dos.
Por lo tanto, si nos acercamos a dos de este waypoint en particular, el waypoint actual aumentará al siguiente
de la lista si el waypoint actual es mayor o igual a la longitud de los waypoints del circuito.
Así que nos hemos quedado sin puntos de ruta.
Entonces tenemos que volver a la primera de nuevo porque es un circuito, por lo que el waypoint actual
será igual a cero y entonces podemos ir al objetivo.
Actualizar que el objetivo es igual a los puntos de ruta de circuito actual punto de transformar la posición así.
Bien, entonces estamos listos para probar esto.
Y acabo de darme cuenta de que tengo un soporte extra flotando en el fondo de mi clase.
Déjame deshacerme de eso.
De acuerdo.
Por lo demás, el código está listo para funcionar.
Así que vamos a guardar ese interruptor de nuevo en la unidad.
Y ahora una vez que estás aquí, estos waypoints son cubos, así que quieres seleccionarlos todos y, y marcar la casilla.
Collider Bien, de lo contrario tu coche va a chocar con ellos, lo que no quieres más adelante.
Si no quieres ver las cajas, puedes desactivarlas.
Collider Siempre uso un cubo para poder ver una ubicación en el mundo, lo que ayuda a la depuración,
¿verdad?
Pulsemos el play y veamos qué ocurre.
Así que todo el coche está girando.
Ahora, ¿a dónde va a ir?
Este es el punto de referencia uno.
Si lo selecciono, puedes ver que ahora está ahí.
Intenta llegar al 8. 1 y está dando la vuelta al waypoint uno y ¿va a ir a un punto dos?
Ahora está dando vueltas.
Este es un problema común que se tiene con los waypoints.
¿Y puedes recordar por qué ya hemos cubierto esto en otros tutoriales de waypoints?
Así que este es el reto.
Así que si puedes arreglar eso antes de que volvamos y hacer que el coche vaya alrededor de cada uno de estos waypoints pausa el
vídeo.
Ahora, cuando vuelva, seguiré repasando eso con ustedes.
De acuerdo.
Bienvenido de nuevo.
¿Cómo te fue?
Bueno, la razón por la que un NPC va a rodear un waypoint es porque nunca puede acercarse lo suficiente al valor
de la distancia aquí para ser considerado cerca de él.
Así que en realidad voy a cambiar esto por algo así.
Así que definitivamente podemos llegar a cuatro de este punto de ruta, guardar eso, vamos a volver a la unidad.
Por supuesto, también se puede aumentar la sensibilidad de la dirección y el giro máximo en todo ese tipo de cosas,
lo que también influiría en ello.
Pero esto es un coche, así que no quieres que gire demasiado bruscamente.
De acuerdo.
Así que ahora que se considera que ha llegado a la baliza uno, que es esta de aquí, la segunda
baliza es esta de aquí.
Así que se va hasta allí.
Entonces, una vez que lo haya hecho, va a girar hacia la baliza tres y pasar por esa.
Y luego, eventualmente, sube a la cuarta.
Y así, ahora es realmente agradable ir alrededor de nuestro circuito.
De acuerdo.
Así que ese es el sistema básico de puntos de ruta y dirección en su lugar.
Cuando volvamos en el próximo vídeo, vamos a trabajar en la mejora de este código para nuestro controlador
de IA.