Плавную анимацию поворота объекта в Unity можно обеспечить несколькими способами, но самым распространенным является использование функции Lerp (линейной интеполяции) или Slerp (сферической интеполяции).
Ниже приведен пример кода, который можно использовать для плавного поворота объекта от его текущего положения к цели:
```csharp
public Transform target; // Цель, куда объект должен повернуться
public float speed = 1.0f; // Скорость поворота объекта
void Update()
{
Vector3 targetDirection = target.position - transform.position; // Направление к цели
float singleStep = speed * Time.deltaTime; // Вычисление скорости поворота
Vector3 newDirection = Vector3.RotateTowards(transform.forward, targetDirection, singleStep, 0.0f); // Вычисление нового вектора направления
// Плавный поворот объекта в новом направлении
transform.rotation = Quaternion.LookRotation(newDirection);
}
```
В этом коде используется функция RotateTowards вектора. Сначала вычисляется вектор направления к цели, затем на каждом кадре с помощью этой функции вычисляется новый вектор, который постепенно совмещается с целевым.
Если нужно использовать интерполяцию для поворота, можно использовать следующий подход:
```csharp
public Transform target;
public float speed = 1.0f;
void Update()
{
Vector3 targetDirection = target.position - transform.position;
Quaternion targetRotation = Quaternion.LookRotation(targetDirection);
// Плавное вращение объекта к цели
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
}
```
Здесь сначала создаются кватернионы (специальный тип, который отлично подходит для работы с вращением в 3D пространстве) текущего поворота объекта и целевого поворота. Затем с помощью функции Slerp вычисляется плавный переход между этими двуми значениями поворота.