Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

206
Vistas
Unity3D Comprobar si un punto está a la izquierda o a la derecha de un vector

Estoy trabajando en un juego que tiene un punto de destino siguiendo una spline. Para que la IA que estoy haciendo gire hacia el objetivo, necesito saber si el objetivo está a la izquierda o a la derecha de la parte delantera del vehículo. ¿Cómo lograría esto? (No necesito números específicos, solo un valor booleano devuelto por una función estaría bien). Bellow es una especie de visualización.

Una visualización de lo que necesito

Debido a que se trata de la IA del vehículo, la rotación del vehículo puede ser cualquier rotación o cualquier posición, por lo que las coordenadas positivas frente a negativas realmente no ayudarían. Si saben cómo lograr esto, les estaría muy agradecido.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Opción 1: usa el producto cruz .

 Vector3 delta = (targetPoint - vehiclePosition).normalized; Vector3 cross = Vector3.Cross(delta, vehicleForward); if (cross == Vector3.zero) { // Target is straight ahead } else if (cross.y > 0) { // Target is to the right } else { // Target is to the left }

¡Un beneficio importante de esto es que el resultado del producto cruzado es el eje sobre el que debe girar para alcanzar el objetivo! A continuación, puede utilizar esto para rotar:

 float angle = Vector3.AngleBetween(vehicleForward, delta); angle = Mathf.Min(angle, maxTurnSpeed); transform.Rotate(angle * Time.deltaTime, cross);

Es posible que deba establecer los valores Y de "delta" y "vehicleForward" en cero si desea limitar la rotación al eje Y/plano de tierra.

Opción 2: Usa la transformación del vehículo para transformar el punto en espacio local.

 Vector3 localPos = vehicle.transform.InverseTransformPoint(targetPoint); if (localPos.x > 0) { // Target is to the left } else if (localPos.x < 0) { // Target is to the right } else if (localPos.z > 0) { // Target is in front } else { // Target is behind }
over 4 years ago · Santiago Trujillo Denunciar

0

Gracias, y me olvidé de agregar algo de código en mi pregunta. Resultó que estaba usando la función Vector3.Cross incorrectamente, al no ingresar los valores correctos para los parámetros en la función. Gracias a todos ya Kalle Halvarsson por darse cuenta de mi error.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda