Грубый обходной путь, который я использовал в прошлом:
Создайте 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 на жестком теле вашего игрока, чтобы сгладить некоторое заикание. 116]
Я думаю, что Википедия подводит итог его лучше всего:
Модель Actor принимает философию, что все - агент. Это подобно всему, объектная философия, используемая некоторыми языками объектно-ориентированного программирования, но отличается, в котором объектно-ориентированное программное обеспечение обычно выполняется последовательно, в то время как модель Actor по сути параллельна. [надрез] модель Actor о семантике передачи сообщений.