Mi Proyecto AI con Autos

¡Hola, chicos! En este post quiero compartir con todos vosotros un pequeño proyecto en unidad. En este proyecto estoy tratando de desarrollar una IA que sea capaz de manejar un automóvil a través de un circuito. Esta IA debe ser capaz de esquivar obstáculos y encontrar el camino más corto hacia un punto (este último va a llevar mucho, mucho, mucho tiempo). Además de eso, la IA debería poder evitar cualquier colisión con otro automóvil. La primera versión se ha especificado en la wiki del proyecto.

En el momento en que escribo esta publicación, debe haber cientos de programadores capaces de hacer eso. Sinceramente, no sé si lo estoy haciendo bien o no. Pero quiero compartir contigo mi visión de cómo funciona este tipo de juegos para que puedas tomarlo y modificarlo como quieras.
En este proyecto tomé el siguiente enfoque:
Hay tres componentes: IA, Quién maneja el auto; Coche, Un coche. Duhhh; Y un circuito, Contiene los nodos del circuito.
El componente del circuito le da a la IA los nodos que el automóvil debe usar como referencia para completar el circuito. Cada nodo contiene un adjunto de BoxCollider. En realidad, este no era el primer enfoque que tenía en mente. Mi primer acercamiento fue usar un Vector2 como barrera, aquí un diagrama de mi plan

Primer acercamiento.png

Como puede ver, la IA tiene un objetivo (Nodo 2), hay un vector normal (Nodo 1-Nodo 2, llamémoslo nNodo1Nodo2) que se usa como referencia y otro vector normal (Coche-Nodo objetivo (Nodo 2) , llamémoslo nCarTarget), nCarTarget se actualiza en cada cuadro, para saber cuándo un automóvil cruza el nodo. Esto se hace con la ayuda del producto escalar, cuando Vector2.Dot (nNode1Node2, nCarTarget) es menor que 0, significa que el automóvil cruzó el nodo. Estaba muy entusiasmado con esto porque no involucra ningún proceso físico que pueda significar un proceso ligero. Hasta que llegué con esto:

![First approach.png](https://ucarecdn.com/976d46f7-59c7-4240-b4d0-e806393e8ce5/Problema de primer acercamiento.png)

Sé que parece forzado, pero ¿qué sucede si el automóvil debe tomar una ruta que por un momento hace que el producto escalar sea menor que cero? Bueno, con ese problema en mente, no podría resolverlo sin la ayuda de otra variable llamada ancho, pero por alguna razón, en mi opinión, este proceso podría implicar un proceso pesado. Nunca lo he probado.
Entonces, solo fui a la solución más fácil, que es un BoxCollider que activa un método cuando el automóvil llega al nodo. Con este enfoque, solo necesito la propiedad de car.direction (la dirección regresa a donde señala el automóvil) y el vector nTargetCar porque puedo saber si el nodo de destino está en el lado izquierdo o derecho del automóvil.
Una posible solución a esto es establecer nodos entre el nodo 1 y el nodo 2 tantos nodos como sea posible, pero sinceramente, no me gusta, quiero un enfoque en el que la IA debe encontrar un camino entre los dos nodos evitando obstáculos dinámicamente y otros autos No tengo idea de cómo hacerlo, pero el poder de las buenas prácticas de programación una conferencia me ayudará (Y llorar).

Bueno, les dejo mi proyecto en gitlab. Espero que lo disfrutes, y si tienes alguna pregunta o sugerencia o quieres que te devuelvan tu dinero, no dudes en enviarme un mensaje de texto.

Proyecto: https://gitlab.com/jordan.j.motta.v/project-ai

¡Que el código te acompañe!

Foto de portada: Foto de Hitesh Choudhary en Unsplash

Similar Posts

Leave a Reply

Your email address will not be published.