Определите какое-либо поле rotationSpeed
:
public float rotationSpeed = 90f;
Используйте Quaternion.LookRotation
, чтобы получить Quaternion
, на который вы хотите повернуть. Вы хотите, чтобы местный форвард указывал в глобальном направлении вперед, а локальный вверх - в направлении к целевой позиции, поэтому используйте Quaternion.LookRotation(Vector3.forward,targetDirection)
:
public IEnumerator LookAt(Vector2 position) {
// casting to Vector2 and normalizing is redundant
Vector3 targetDirection = position - transform.position;
Quaternion targetRotation = Quaternion.LookRotation(Vector3.forward, targetDirection);
Затем используйте Quaternion.RotateTowards
сМаксимальное количество градусов, которое вы хотите повернуть в этом кадре, пока не закончите вращение в направлении вращения цели:
while (Quaternion.Angle(targetRotation, transform.rotation) > 0.01)
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation,
time.deltaTime * rotationSpeed);
}
Всего:
public float rotationSpeed = 90f;
public IEnumerator LookAt(Vector2 position) {
// casting to Vector2 and normalizing is redundant
Vector3 targetDirection = position - transform.position;
Quaternion targetRotation = Quaternion.LookRotation(Vector3.forward, targetDirection);
while (Quaternion.Angle(targetRotation, transform.rotation) > 0.01)
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation,
time.deltaTime * rotationSpeed);
}
}