Â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.

Darren
fonte
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))
MichaelHouse
fonte
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