Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

205
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda