unity3d - 如何设置随机旋转物体的速度?统一
问题描述
我有一个必须以随机顺序在 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;
}
}
一切都很完美,除了一定的旋转速度,因为我不知道如何设置它。
你能告诉我如何设置速度吗?
解决方案
您可以在不同位置之间徘徊,这不是控制速度的最佳方式,因为大旋转会更快,而较小的旋转会更慢,但是您可以在时间上保持稳定的旋转。
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);
}
让我知道我是否可以提供任何进一步的帮助。
推荐阅读
- c# - 在 RH 上角使用“X”时,应用程序未在调试模式下关闭
- php - 如何将一篇文章发布到多种文章类型?
- python - 在python中查找某些时间范围内的时间重叠
- puppeteer - 使用 xvfb 可以达到的最大分辨率是多少?
- windows - Gammu - gammu - 在windows下检测?
- python - 我使用 Colab 和 Plotly,我想保存一个 Plotly 图 - 如何在 Colab 中安装 plotly-orca?
- python - Python 3 项目没有给我我正在寻找的结果
- ruby-on-rails - 猴子修补 ActiveStorage::Attachment 丢失
- r - H2O R 包是否可安全用于安全(患者)数据?
- java - java.sql.SQLException:最后一行之后的结果集