Как в unity сделать плавный поворот дочернего объекта?

В Unity можно создать плавный поворот дочернего объекта, используя скрипт и корутины.

Сначала необходимо создать скрипт и прикрепить его к дочернему объекту. Давайте вызовем его "SmoothRotation".

Внутри скрипта SmoothRotation мы создадим переменные для хранения начального и конечного угла поворота, а также переменные, которые будут контролировать скорость и плавность поворота.

using UnityEngine;

public class SmoothRotation : MonoBehaviour
{
    public float rotationSpeed = 2f; // Скорость поворота
    public float smoothness = 0.1f; // Плавность поворота

    private Quaternion startRotation; // Начальный угол поворота
    private Quaternion endRotation; // Конечный угол поворота

    void Start()
    {
        startRotation = transform.rotation; // Получаем начальный угол поворота
        endRotation = Quaternion.Euler(0, 90, 0); // Устанавливаем конечный угол поворота (для примера поворот на 90 градусов по Y)
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) // Если нажата клавиша "Пробел"
        {
            StartCoroutine(Rotate()); // Запускаем корутину поворота объекта
        }
    }

    IEnumerator Rotate()
    {
        float elapsedTime = 0f; // Прошедшее время

        while (elapsedTime < smoothness) // Пока не достигнута плавность поворота
        {
            transform.rotation = Quaternion.Slerp(startRotation, endRotation, elapsedTime / smoothness); // Плавно поворачиваем объект
            elapsedTime += Time.deltaTime * rotationSpeed; // Увеличиваем прошедшее время с учетом скорости
            yield return null; // Ожидаем один кадр
        }

        transform.rotation = endRotation; // Устанавливаем конечный угол поворота после завершения корутины
    }
}

В этом скрипте мы используем функцию Slerp из класса Quaternion, которая плавно интерполирует между начальным и конечным углами поворота. Чтобы достичь плавного поворота, мы применяем это в цикле while, пока не достигнем заданной плавности (smoothness). С помощью переменной elapsedTime мы увеличиваем прошедшее время с учетом скорости поворота (rotationSpeed).

Теперь, когда мы нажимаем клавишу "Пробел", запускается корутина Rotate, которая выполняет плавный поворот объекта от начального угла поворота до конечного угла поворота. По истечении времени, заданного плавностью, мы устанавливаем объект в конечный угол поворота.

Это простой пример плавного поворота объекта в Unity. Вы можете настроить параметры rotationSpeed и smoothness в соответствии с вашими требованиями.