Ответ 1
Ваша проблема в том, что цель может быть под углом 5, и объект может быть обращен к 355 градусам (например). Согласно вашему тесту, 5 меньше 355, поэтому идите против часовой стрелки.
Что вам нужно сделать, это проверить, находится ли цель в пределах 180 градусов влево или в пределах 180 градусов вправо, а затем двигаться соответственно.
Сложная часть получает проверку, чтобы "обернуть" вокруг 360 ↔ 0. Похоже, что в вашем случае осталось 0 градусов, поэтому жесткий тест выполняется, когда wantRot находится сбоку, которая имеет 0 градусов внутри него.
Чтобы визуализировать кружок, как показано ниже, поместите объект слева от того, с которым мы сталкиваемся. Вы увидите, что вам нужно отдельно проверить две затененные области.
Метод 1
Проверить все случаи отдельно.
Примечание. Код ниже в моей голове и не проверен. Вам нужно будет изменить градусы на радианы.
int MoveDir = 0;
var BehindMe = this.rotation - 180;
if (BehindMe < 0)
BehindMe += 360;
if (wantRot != this.rotation)
{
if (wantRot == BehindMe)
MoveDir = 1; // or randomly choose
else if ((wantRot > BehindMe && wantRot < this.rotation) ||
(this.rotation < 180 && (wantRot > BehindMe ||
wantRot < this.rotation)))
MoveDir = -1;
else if ((wantRot < BehindMe && wantRot > this.rotation) ||
(this.rotation > 180 && (wantRot < BehindMe ||
wantRot > this.rotation))
MoveDir= 1;
this.rotation += MoveDir * MathHelper.ToRadians(45) * Time.deltaTime;
}
Метод 2
От взгляда на изображение вы можете понять, что вы можете просто проверить, стоит ли объект справа, а если нет, считать его слева (поскольку до тех пор, пока текущий угол меньше 180 градусов, проверка его на право легко). Если текущий угол составляет более 180 градусов, тогда отмените концепцию - проверьте, стоит ли она слева, а если не предполагать права. Что-то вроде ниже:
int MoveDir = 0;
var BehindMe = this.rotation - 180;
if (BehindMe < 0)
BehindMe += 360;
if (wantRot != this.rotation)
{
if (this.rotation <= 180)
{
if (wantRot > this.rotation && wanrRot < BehindMe)
MoveDir = 1;
else
MoveDir = -1;
}
else
{
if (wantRot < this.rotation && wanrRot > BehindMe)
MoveDir = -1;
else
MoveDir = 1;
}
this.rotation += MoveDir * MathHelper.ToRadians(45) * Time.deltaTime;
}