这是我现在使用的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpinObject : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
StartCoroutine(ContinuousRotation());
}
IEnumerator ContinuousRotation()
{
while (true)
{
transform.Rotate(Vector3.forward, 10);
yield return new WaitForSeconds(5f);
}
}
}
它正在旋转物体但问题是无论我在运行游戏时设置的时间旋转速度是相同的。我试过:yield return new WaitForSeconds(1f);然后在原来的5f它是0.01f,但速度永远不会改变。
第二个问题是旋转使物体有些闪烁而不是闪烁但是眼睛有些中断并不是真的旋转平滑。也许问题是速度?
答案 0 :(得分:3)
使用Time.deltaTime
或public class SpinObject : MonoBehaviour {
float timeSinceLastRotation;
float timeUntilNextRotation = 0.01f; // 0.01 seconds
void Update () {
if (timeSinceLastRotation + timeUntilNextRotation > Time.time) {
transform.Rotate(Vector3.forward, 10);
timeSinceLastRotation = Time.time
}
}
}
例如:
Time.deltaTime
但是,这不是处理平滑旋转的理想方法,因为这将导致对象每0.01秒捕捉到下一个10度。相反,您应该使用public class SpinObject : MonoBehaviour {
float rotationMultiplier = 1.0f;
void Update () {
transform.Rotate(Vector3.forward, Time.deltaTime * rotationMultiplier);
}
}
来返回自上一帧以来经过的时间。
这看起来像这样:
1 degree per second * rotationMultiplier
这会导致对象旋转rotationMultiplier
增加10.0f
到Time.deltaTime
可以达到每秒10度的平滑度。
修改
我想在Unity Scripting API中添加有关obj.key
当你与Time.deltaTime相乘时,你基本上表达:我想要 移动此对象每秒10 [度]而不是每个10 [度] 帧。