Ângulo entre dois pontos


9

Eu tenho um personagem que caminha para pontos aleatórios no meu quarto no Unity. O problema é que ele sempre enfrenta uma direção. Quero escrever em C # um trecho de código que obterá a direção que o personagem está enfrentando no momento e a posição do alvo e, em seguida, calcula o ângulo entre eles para transformar esse caractere em quantidade. Eu tentei a LookAtfunção, mas isso faz o personagem andar em forma de arco em direção ao alvo, que parece muito antinatural, pois constantemente olha para o alvo.


4
Não posso escrever uma resposta adequada agora, mas você precisa de trigonometria básica. Coordenadas polares do Google e atan2.
jcora

Respostas:


10

A função LookAt faz isso por você. Você pode usá-lo de forma inadequada ou algo está errado com sua direção, se estiver tendo problemas com isso. Você pode tentar dessa maneira também:

//find the vector pointing from our position to the target
dir = (Target.position - transform.position).normalized;

//create the rotation to look at the target
rotation = Quaternion.LookRotation(dir);

Agora você pode encaixar nessa rotação ou fazê-lo lentamente ao longo do tempo. (devagar, com o tempo, significa que todo esse código precisa entrar na função de atualização)

//rotate over time
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * RotationSpeed);

//snap rotation
transform.rotation = rotation;

Para 2D, outro método alternativo seria Atan2 :

angleBetween = Mathf.Atan2(point2Y - point1Y, point2X - point1X) * 180 / Math.PI))

void FixedUpdate () {// obtém a direção atual da direção para alcançar a posição de destino Vector3 walk = (this.mTargetPosition - this.transform.position) .normalized; // ignora 3d walk.y = 0,0f; walk.Normalize (); // move na direção desejada this.transform.LookAt (mTargetPosition); this.transform.Translate (-walk); }} é dessa maneira que configurei a função lookat como está, não sei dizer o que há de errado com ela, exceto que estou assumindo que talvez não deva estar em fixedUpdate?
Darren

Não tenho certeza. O que isso está fazendo? Quando trabalho na direção, tenho linhas de depuração desenhadas por todo o lugar. Eu tenho linhas mostrando a direção que os goblins estão enfrentando, linhas de aceleração e linhas de velocidade. Defina todos eles com cores diferentes para que você saiba qual é qual, isso realmente ajudará na depuração visual. Ele permite que você saiba qual não parece certo e, em seguida, você pode pesquisar mais.
MichaelHouse
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.