using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateCamera : MonoBehaviour
{
public GameObject objectToSpin;
public float spinX;
public float spinY;
public float spinZ;
public bool randomSpin = false;
private void Start()
{
var rb = GetComponent<Rigidbody>();
rb.angularVelocity = Random.insideUnitSphere;
}
private void Update()
{
if (randomSpin == true)
{
objectToSpin.transform.Rotate(Random.Range(spinX, 360), Random.Range(spinY, 360), Random.Range(spinZ, 360));
}
else
{
objectToSpin.transform.Rotate(spinX, spinY, spinZ);
}
}
}
Теперь при изменении флага randomSpin на true он будет вращаться случайным образом без остановки, изменяя случайный угол на x y z в каждом кадре.
Но я хочу, чтобы он вращался случайным образом в течение 5 секунд через 5 секунд, чтобы изменить случайные значения x y z и продолжить с последней точки, а затем через 5 секунд случайные углы и так далее.
Например, есть простой таймер, использующий Time.deltaTime
, например, например.
private float timer = 5;
private void Update()
{
if (randomSpin == true)
{
timer -= Time.deltaTime;
if (timer <= 0)
{
objectToSpin.transform.Rotate(Random.Range(spinX, 360), Random.Range(spinY, 360), Random.Range(spinZ, 360));
timer = 5;
}
}
else
{
objectToSpin.transform.Rotate(spinX, spinY, spinZ);
}
}
Он меняет углы каждые 5 секунд, но, наверное, я задал вопрос по ошибке. Я хочу, чтобы он вращался в течение 5 секунд, затем он изменится на случайный x y z, а затем будет вращаться в течение 5 секунд, затем снова изменится случайным образом, а затем повернется на 5 секунд. Другими словами, он должен все время вращаться и случайным образом менять xyz каждые 5 секунд.
О, это что-то другое ^^
Если вам нужна постоянная скорость и просто случайное направление, вы можете случайным образом выбрать ось для вращения, используя Random.onUnitSphere
, а затем вращаться вокруг нее со скоростью.
Вот решение, которое использует Coroutine. Если вы хотите остановить сопрограмму, вы можете использовать StopCoroutine("Spin")
, чтобы остановить сопрограмму и запустить ее позже с помощью StartCoroutine("Spin")
:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateCamera : MonoBehaviour
{
public GameObject objectToSpin;
public Vector3 spinAxis;
public float timeToSpin = 5f;
public float spinSpeed = 20f;
public bool randomSpin = false;
private void Start()
{
var rb = GetComponent<Rigidbody>();
rb.angularVelocity = Random.insideUnitSphere;
StartCoroutine("Spin");
}
private void Update()
{
}
}
IEnumerator Spin()
{
float spinTimer;
while (true)
{
if (randomSpin == true)
{
spinAxis = Random.onUnitSphere;
}
spinTimer = timeToSpin;
while (spinTimer > 0f)
{
objectToSpin.transform.Rotate(spinAxis, Time.deltaTime * spinSpeed);
spinTimer -= Time.deltaTime;
yield return null;
}
}
}
Случайным должно быть только направление или скорость тоже должна быть случайной?