Ваша проблема в том, что цель может быть под углом 5, а объект может быть направлен на 355 градусов (например).Согласно вашему тесту, 5 меньше 355. Идите против часовой стрелки.
Что вам нужно сделать, это проверить, находится ли цель в пределах 180 градусов слева или в пределах 180 градусов справа от вас, затем двигайтесь соответствующим образом.
Хитрая часть заставляет чек «обернуть» около 360 <-> 0. Похоже, в вашем случае осталось 0 градусов, поэтому жесткий тест для случая, когда wantRot находится на стороне, которая имеет0 градусов внутри него.
Чтобы визуализировать, нарисуйте круг, как показано ниже, затем поместите ваш объект слева от того места, где мы смотрим.Вы увидите, что вам нужно проверить 2 заштрихованные области отдельно.
Метод 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;
}