问题描述
我有一个平台,它必须以随机顺序在 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);
}
如果我能提供任何进一步的帮助,请告诉我。