我试图在游戏中制作一个慢动作,但看起来真的很迟钝。我使用Unity提供的标准资产中的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
相似的问题但是在这个问题上给出的修正不起作用。我尝试在其中添加一个刚体并将插值插入插值但它没有做任何事情。(我从“使用重力”中删除了勾号,因为字符已经开始我是团结和脚本的新手,所以请放轻松我。
谢谢。
答案 0 :(得分:2)
你也应该改变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;
答案 1 :(得分:0)
这实际上非常容易。事实上,你甚至不需要编码任何东西!只需进入场景中的每个刚体,并将插值模式更改为“插值”或“外推”。它们意味着非常不同的东西,但两者都有完美平滑的慢动作的最终结果。
答案 2 :(得分:0)
您只需要以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
的{{1}}。independent of timescale
来调整transition time
。