【问题标题】:How to get smooth slow motion in Unity3D如何在 Unity3D 中获得平滑的慢动作
【发布时间】:2014-08-12 04:53:46
【问题描述】:

我试图在我正在制作的游戏上放慢动作,但它看起来真的很滞后。我使用统一提供的标准资产中的 FPS 控制器。我将此脚本附加到它:

function Update () 
{
    if (Input.GetKeyDown ("q"))
    {
        Time.timeScale = 0.5;
    }

    if (Input.GetKeyDown ("e")) 
    {
        Time.timeScale = 2.0;
    }

    if (Input.GetKeyDown ("t")) 
    {
        Time.timeScale = 1.0;
    }
}

我知道这是一个与http://answers.unity3d.com/questions/39279/how-to-get-smooth-slow-motion.html类似的问题

但是对那个问题给出的修复不起作用。我尝试向它添加一个刚体并将插值设置为插值,但它没有做任何事情。(我从“使用重力”中删除了勾号,因为角色开始了飞行)。我是统一和脚本方面的新手,所以请放轻松。

谢谢。

【问题讨论】:

    标签: unity3d unityscript


    【解决方案1】:

    您也应该更改 Time.fixedDeltaTime:

    function Update () {
       if (Input.GetKeyDown ("q")){
          Time.timeScale = 0.5;
          Time.fixedDeltaTime = 0.02F * Time.timeScale;
       }
    }
    

    要让它再次恢复正常运动,你应该调用这两行

          Time.timeScale = 1;
          Time.fixedDeltaTime = 0.02F * Time.timeScale;
    

    【讨论】:

      【解决方案2】:

      你只需要调用SetTimeScale方法作为target timescale作为参数:)

      using UnityEngine;
      public class TimeScaleSmooth : MonoBehaviour
      {
          public float targetTimeScale = 1;
          public float speed = 1;
      
          void Update()
          {
              Time.timeScale = Mathf.MoveTowards(Time.timeScale, targetTimeScale, 
              Time.unscaledDeltaTime * speed);
              //0.02 is default fixedDeltaTime
              Time.fixedDeltaTime = timeScale * 0.02f;
              //FOR TEST
              if (Input.GetKeyDown(KeyCode.A))
              {
                  SetTimeScale(1);
              }
              if (Input.GetKeyDown(KeyCode.S))
              {
                  SetTimeScale(0.2f);
              }
          }
      
          public void SetTimeScale(float timeScale)
          {
              targetTimeScale = timeScale;
          }
      }
      
      • 请注意,我们使用了Time.unscaledDeltaTime,即independent of timescale
      • 您可以使用speed 调整transition time

      【讨论】:

        【解决方案3】:

        这实际上非常简单。事实上,您甚至不必编写任何代码!只需进入场景中的每个刚体,并将插值模式更改为“插值”或“外插”。它们的含义非常不同,但都具有完美流畅的慢动作的最终结果。

        【讨论】:

          猜你喜欢
          • 2014-01-20
          • 2020-12-13
          • 2021-07-03
          • 1970-01-01
          • 2018-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-21
          相关资源
          最近更新 更多