首页 > 解决方案 > 如何设置随机旋转物体的速度?统一

问题描述

我有一个必须以随机顺序在 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;
    }
}

一切都很完美,除了一定的旋转速度,因为我不知道如何设置它。

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

标签: unity3dvectorrandomrotationeuler-angles

解决方案


您可以在不同位置之间徘徊,这不是控制速度的最佳方式,因为大旋转会更快,而较小的旋转会更慢,但是您可以在时间上保持稳定的旋转。

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);
 }

让我知道我是否可以提供任何进一步的帮助。


推荐阅读