У меня есть игровой объект, поворачивающийся на 90 градусов каждые две секунды, что дает объекту 4 возможных значения для его поворота по оси Z. Поскольку начальное вращение по оси Z составляет 45, другие значения будут 135, 225 и 315. Каждый раз, когда игровой объект вращается, он ищет свое текущее вращение по оси Z в Словаре:
static public Dictionary<int, string> rotDirection = new Dictionary<int, string>{
{45, "NE"},
{135, "SE"},
{225, "SW"},
{315, "NW"},
};
Однако, он не находит начальное значение (45), так как на самом деле он получает 44. Почему это происходит?
float timer;
void FixedUpdate()
{
timer -= Time.deltaTime;
if (timer <= 0.0f)
{
timer += Constants.cannonRotationTime;
//transform's initial (z) rotation is 45
transform.Rotate(0.0f, 0.0f, 90);
int angle = (int)transform.rotation.eulerAngles.z;
Debug.Log("Angle: " + angle + ", direction: " +
(Constants.rotDirection.ContainsKey(angle) ?
Constants.rotDirection[angle] : "*NOT FOUND*"));
}
Есть еще одна странность. Если я установил начальное (Z) вращение игрового объекта на 135, все значения будут найдены, он повернется на 45 вместо 44:

Теперь, если я установил его как 225 или 315, новое вращение не имеет смысла, вот что я получаю:

Почему это происходит и как можно ли этого избежать?