Как повернуть объект, подождать 5 секунд и снова повернуть в Unity

У меня имеется платформа, которую нужно повернуть на 180 градусов по Z. Затем подождать 5 секунд. И проходить этот алгоритм снова и снова. Как это сделать? Буду очень признателен за помощь :3 Вод код:

public class OrangePlane : MonoBehaviour
{
    public float Speed = 0.01f;

    private bool IsRotating = false;

    void FixedUpdate()
    {
        RotateObject();
    }

    private void RotateObject()
    {
        IsRotating = transform.eulerAngles.z == 0f ? false : true;

        if (IsRotating)
        {
            transform.Rotate(0f, 0f, Speed);
        }
        else
        {
            StartCoroutine(WaitSeconds());
        }
    }

    private IEnumerator WaitSeconds()
    {
        yield return new WaitForSeconds(5f);

        transform.Rotate(0f, 0f, Speed);
    }
}

Ответы (3 шт):

Автор решения: Psyxoz0x13

Советую для таких задач использовать бесплатный плагин DoTween кажется им пользуются уже все, а так вот:

using System.Collections;
using UnityEngine;

public class Rotate : MonoBehaviour
{
    [SerializeField] private float _duration = .5f;
    [SerializeField] private float _delay = 5f;

    private void Start()
    {
        StartCoroutine(GetRotation());
    }

    private IEnumerator GetRotateLoop()
    {
        var rotateDelay = new WaitForSeconds(_delay);

        while (true)
        {
            yield return GetRotation(Vector3.forward * 180f);

            yield return rotateDelay;

            yield return GetRotation(Vector3.zero);

            yield return rotateDelay;
        }
    }

    private IEnumerator GetRotation(Vector3 targetEulerAngles)
    {
        var startAngles = transform.eulerAngles;
        float time = 0;

        while (time < _duration)
        {
            time += Time.deltaTime;

            transform.eulerAngles = Vector3.Lerp(
                startAngles,
                targetEulerAngles,
                time / _duration);

            yield return null;
        }
    }
}
→ Ссылка
Автор решения: Diyabya

С использованием плагина DoTween я добился лаконичного кода (в пару строк).

    private void Start()
    {
        StartCoroutine(RotateObject());
    }

    private IEnumerator RotateObject()
    {
        while(true)
        {
            yield return new WaitForSeconds(5);

            transform.DORotate(new Vector3(0, 0, 180), 1, RotateMode.LocalAxisAdd);
        }
    }
→ Ссылка
Автор решения: Psyxoz0x13

А лучше даже так:

private void Start()
{
   var sequence = DOTween.Sequence();

    sequence.SetLoops(-1);
    sequence.AppendInterval(5f);
    sequence.Append(
        transform.DOLocalRotate(
            Vector3.forward * 180f, 1f,
            RotateMode.LocalAxisAdd));
}
→ Ссылка