如何每5秒以其他随机值旋转一个对象?

时间:2019-05-28 20:43:20

标签: c# unity3d

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秒随机角度之后,依此类推。

2 个答案:

答案 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;
        }
    }
}