@djtoryx

Как определить «расстояние» угла до нуля?

У меня есть объект который всё время стремиться выставить значения углов (0, 0, 0). А скорость достижения нуля зависит от текущего угла.
Проблема в том что когда я хочу повернуть объект на право, я как бы вычитаю из текущего игрика. Но значение становиться не минусовое, а вычитается из 360 градусов.
Допустим если я хочу "0 - 25" то не будет равно -25, а будет 360 - 25 = 335.

transform.eulerAngles = new Vector3(Mathf.MoveTowardsAngle(x, 0, Mathf.Abs(x) * _kickBack * Time.deltaTime), Mathf.MoveTowardsAngle(y, 0, Mathf.Abs(y) * _kickBack * Time.deltaTime));


Mathf.Abs(x) должно являться расстоянием до 0.
А теперь вопрос!
Есть ли встроенные методы для определения АДЕКВАТНОЙ разницы значения угла до 0?
Или придётся писать какой то свой метод?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
@djtoryx Автор вопроса
Mathf.Repeat(current + 180, 360) - 180
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
MoveTowardsAngle специально меняет отрицательные углы на положительные, если не хотите такое поведение, то используйте обычный MoveTowards.
public static float MoveTowardsAngle(float current, float target, float maxDelta)
{
    float num = Mathf.DeltaAngle(current, target);
    if (-(double) maxDelta < (double) num && (double) num < (double) maxDelta)
    return target;
    target = current + num;
    return Mathf.MoveTowards(current, target, maxDelta);
}

public static float DeltaAngle(float current, float target)
{
    float num = Mathf.Repeat(target - current, 360f);
    if ((double) num > 180.0)
    num -= 360f;
    return num;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы