Внимание: несмотря на то, что эта проблема возникла, когда я работал с Unity, она не имеет ничего специфического для Unity и больше относится к логике программирования, поэтому, пожалуйста, не уклоняйтесь.
Я используюЕдинство и вращение объекта по сценарию.Дело в том, что если я поверну его, скажем, на 180 градусов, объект не будет поворачиваться точно так сильно и будет стремиться остановиться в диапазоне между 179 и 181 градусом.Итак, чтобы проверить, завершено ли вращение, я проверяю, является ли угол поворота targetAngle +/- 1, который работает.
Я проверяю, используя
if (transform.eulerAngles.z > lowerLimit && transform.eulerAngles.z < upperLimit)
, где
lowerLimit = targetAngle-1;
upperLimit = targetAngle + 1;
Теперь проблема возникает, когда targetAngle равен 0. В этом случае мой скрипт проверяет, находится ли угол поворота между -1 и 1. Но, -1 действительно должен быть 359, поэтому он должен проверить, находится ли угол между 359и 1.
Как я могу это реализовать?Другими словами, я предполагаю, что спрашиваю, как реализовать систему счисления с циклическим изменением.
РЕДАКТИРОВАТЬ
Найден один обходной путь.Если targetAngle равен 0, я лечу это специально.Это работает, но не самый элегантный.
if (targetAngle == 0.0)
{
if ((transform.eulerAngles.z > 359.0 && transform.eulerAngles.z <= 360.0) || (transform.eulerAngles.z >= 0.0 && transform.eulerAngles.z <= 1))
{
rotate = false;
}
}
else
{
if (transform.eulerAngles.z > targetAngle - 1 && transform.eulerAngles.z < targetAngle + 1)
{
rotate = false;
}
}