Как повернуть объект, подождать 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));
}