如何在不停止的情况下平滑旋转物体?

时间:2017-07-21 21:58:37

标签: c# unity3d rotation unity5

这是我现在使用的脚本:

 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,但速度永远不会改变。

第二个问题是旋转使物体有些闪烁而不是闪烁但是眼睛有些中断并不是真的旋转平滑。也许问题是速度?

1 个答案:

答案 0 :(得分:3)

使用Time.deltaTimepublic 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.0fTime.deltaTime可以达到每秒10度的平滑度。

修改

我想在Unity Scripting API中添加有关obj.key

的修改摘录
  

当你与Time.deltaTime相乘时,你基本上表达:我想要   移动此对象每秒10 [度]而不是每个10 [度]   帧。