如何设置随机旋转物体的速度?团结

问题描述

我有一个平台,它必须以随机顺序在 x、y 和 z 方向上同时旋转,向量 x 和 z 的最大旋转度数为 10 度,在“y”方向上的旋转为 360 度。

代码如下:

using UnityEngine;

public class PlaneRotating : MonoBehavIoUr
{
    void Start() {
     
 }
    void Update()
    {
        Vector3 euler = transform.eulerAngles;
     euler.z = Random.Range(-10f,10f);
     euler.y = Random.Range(0f,360f);
     euler.x = Random.Range(-10f,10f);
     transform.eulerAngles = euler;
    }
}

一切正常,除了一定的旋转速度,因为我不知道如何设置。

你能告诉我如何设置速度吗?

解决方法

您可以在位置之间lerp,这不是控制速度的最佳方式,因为大旋转会更快,小旋转会更慢,但您可以在时间上获得稳定的旋转。

using UnityEngine;

public class PlaneRotating : MonoBehaviour
{
    public Transform transform;
    Vector3 lastPos
    Vector3 newPos
    float t;

     void Start()
     {
         lastPos = transform.eulerAngles;
         NewAngle();
     }

     void Update()
     {
         transform.eulerAngles = Vector3.Lerp(lastPos,newPos,t);
         t+=0.01f;
         if(t>1)
             NewAngle();
     }

    void NewAngle()
    {
        lastPos = newPos;
        newPos = new Vector3(
                     Random.Range(-10f,10f),Random.Range(0f,360f),Random.Range(-10f,10f));
        t = 0;
    }
}

然后您可以使用 Time.deltaTime 使其保持一致,这只是一个示例。

如果你想控制速度

您可以添加两个向量,然后每隔 x 秒或 x 帧定期进行随机化。你改变方向。 youtube 上有很多不错的视频,但是如果你想得到一个好的答案,你需要更清楚。我的第一个答案是不让你用随机数控制速度,只能平滑过渡,你可以选择它们变化的速度。对于恒定速度,您必须执行以下操作

 void Update()
 {
     transform.eulerAngles += new Vector3(0,1,0);
 }

如果我能提供任何进一步的帮助,请告诉我。