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秒随机角度之后,依此类推。
答案 0 :(得分:1)
例如,有一个使用/nfs/ora_bck/
的简单计时器,例如
Time.deltaTime
答案 1 :(得分:1)
如果您想要恒定的速度并且只是一个随机的方向,则可以使用Random.onUnitSphere
随机选择一个轴旋转,然后以一定速度旋转。
这是使用协程的解决方案。如果要停止协程,可以使用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;
}
}
}