IA básico de un vehículo

En este articulo hablare un poco de como crear una inteligencia artificial para un vehículo para que pueda recorrer por si mismo, para este ejemplo me base en el proyecto de como crear una nave al estilo hoverboard en Unity. Es una demostración sencilla de como puede crearse uno, puede mejorarse, pero la intención era hacerlo lo más sencillo y funcional.

La inteligencia artificial de este ejemplo lleva acabo 3 tareas: primero si debe acelerar o frenar, si debe ir girando a la derecha o izquierda y esta frente a una pared, determinar en que sentido es más posible poder continuar su camino.

1°- Determinar si debe acelerar o frenar: Para esto simplemente se lanza un raycast hacía adelante del vehículo a 7 unidades de Unity, si este no impacta en nada entonces aceleramos, si impacta con algo dejamos de avanzar (la nave estilo hoverboard cuenta con inercia), esto para dejar que pueda llevar acabo mejor una vuelta.

2°- Determinar para donde debe girar: En este proceso se lanza 2 raycast hacía adelante pero en diagonal igual de 7 unidades, entonces en el caso del lado derecho, si este impacta, entonces indicamos que debe girar hacía la izquierda (para alejarnos de la pared) y sin importar si impacto o no, se hace lo mismo hacia el lado izquierdo, done si impacta con lago giramos hacía la derecha, ocasionando que en el caso que ambos hayan indicado que deben girar se anulen y simplemente siga hacía el adelante el vehículo.

3°- Estar frente a un pared, determinar si a la derecha o izquierda es más posible continuar con el camino: Existe un caso especial que puede ser que el paso 1 y 2 no fueron suficiente y termine el vehículo a frente de una pared y se debe determinar hacía donde es más posible continuar con nuestro camino, es aquí que se lanza un raycast totalmente hacía la derecha y otro hacía la izquierda, y si uno de estos raycast no impacto en nada, entonces le indicamos al vehículo  que gire hacía esa dirección hasta que el paso 1 y 2 vuelvan a permitir que pueda continuar con su camino.

En el gif solo se ven por muy pocos frames.

Aquí les dejo el enlace para descargar el proyecto completo: DESCARGAR

Notas para atender mejor el ejemplo:

  • transform.TransformDirection(Vector3.forward) : Para poder lanzar un raycast hacía adelante del vehículo uso la función TransformDirection de transform que me convierte el Vector3.forward en otro vector3 pero con lo que representa hacía adelante del vehículo, y así para todos los sentidos.
  • LayerMask: Este tipo de variable ayuda hacer que el raycast ignore el mismo vehículo (esto para poner muchos vehículos 😉  ).
  • horizontal = (AfrenteDer == false) ? 0f : -1.0f;   Este es una manera de implicar un if, donde si la variable ‘AfrenteDer’ es igual a falso, entonces ‘horizontal’ es igual a 0.0f, en caso contrario (else), ‘horizontal’ va ser igual a -1.0f.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *