Грубый обходной путь, который я использовал в прошлом:
Создайте 2 объекта и сделайте их потомками объекта вашего игрока.
Расположите один из них в (-1,0,0) локально и назовите его LeftObj.Поместите другой в (1,0,0) и назовите его RightObj.
Теперь вы можете просто проверить, что ближе к цели, чтобы выяснить, какой из них наиболее эффективен для поворота.
float LDist = Vector3.Distance(LeftObj.transform.position, target.transform.position);
float RDist = Vector3.Distance(RightObj.transform.position, target.transform.position);
if (LDist < RDist){
// Turn left
}else{
// Turn right
}
Не самый эффективный метод, но его легко и быстро настроить, и он четко говорит вам «влево или вправо» независимо от значений поворота.
Очевидный недостаток заключается в том, что вы не можете получить вращениезначение для масштабирования вашего крутящего момента, когда вы приближаетесь к цели, поэтому вам может потребоваться увеличить angularDrag на жестком теле вашего игрока, чтобы сгладить некоторое заикание.