Угол между двумя точками


9

У меня есть персонаж, который ходит по случайным точкам в моей комнате в Unity. Проблема в том, что он всегда обращен в одном направлении, я хочу написать в C # фрагмент кода, который будет определять направление, в котором находится персонаж в данный момент, и положение цели, а затем вычисляет угол между ними, чтобы превратить символ в такое количество. Я попробовал эту LookAtфункцию, но она заставляет персонажа ходить в форме дуги к цели, что выглядит очень неестественно, так как постоянно смотрит на цель.


4
Я не могу написать правильный ответ сейчас, но вам нужен базовый триггер. Гугл полярные координаты и атан2.
Jcora

Ответы:


10

Функция LookAt сделает это за вас. Возможно, вы используете его неправильно, или что-то не так с вашим рулевым управлением, если у вас есть проблемы с этим. Вы можете попробовать это тоже так:

//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);

Теперь вы можете либо привязаться к этому вращению, либо сделать это медленно с течением времени. (медленно со временем означает, что весь этот код должен войти в функцию обновления)

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

//snap rotation
transform.rotation = rotation;

Для 2D другой альтернативный метод будет Atan2 :

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

void FixedUpdate () {// получить текущее направление рулевого управления для достижения целевой позиции Vector3 walk = (this.mTargetPosition - this.transform.position) .normalized; // игнорируем 3d walk.y = 0.0f; walk.Normalize (); // двигаться в нужном направлении this.transform.LookAt (mTargetPosition); this.transform.Translate (-Walk); }} это способ, которым я настроил функцию lookat как есть, я не могу сказать, что с ней не так, за исключением того, что я предполагаю, что она не должна быть в fixedUpdate?
Даррен

Я не уверен. Что это делает? Когда я работаю над рулевым управлением, повсюду отрисовываются линии отладки. У меня есть линии, показывающие направление гоблинов, линии ускорения и линии скорости. Установите их все на разные цвета, чтобы вы знали, какой именно, это действительно поможет с визуальной отладкой. Это позволяет вам узнать, какой из них выглядит неправильно, и тогда вы сможете больше в этом разобраться.
MichaelHouse
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.