重新启动游戏后如何确定时间?

时间:2019-08-05 21:44:38

标签: c# unity3d

我得到了一个亚军游戏,当它与障碍物碰撞时,我的玩家死亡了。碰撞后我做了一个慢动作,使游戏更酷。在屏幕上方的游戏中,我得到了重新启动按钮,按下按钮后,游戏再次开始,但是时间仍然很慢。我无法解决问题,请帮助我。有我的慢动作代码

public float slowdownFactor = 0.05f;
public float slowdownLength = 4f;

private void Update()
{
    Time.timeScale += (1f / slowdownLength) * Time.unscaledDeltaTime;
    Time.timeScale = Mathf.Clamp(Time.timeScale, 0f, 1f);
}


public void DoSlowMotion()
{
    Time.timeScale = slowdownFactor;
    Time.fixedDeltaTime = Time.timeScale * .02f;
}

这是我的重启代码

public void RestartGame()
{
    SceneManager.LoadScene("Level01");
}

我没有收到任何错误消息。

1 个答案:

答案 0 :(得分:1)

首先,您也永远不会更新Time.fixedDelatTime。我会使用一种专用的方法来避免重复的代码,例如

public float slowdownFactor = 0.05f;
public float slowdownLength = 4f;

private void Update()
{
    SetTimeScale(Time.timeScale + (1f / slowdownLength) * Time.unscaledDeltaTime);
}

private void SetTimeScale(float scale)
{
    Time.timeScale = Mathf.Clamp(scale, 0f, 1f);;
    Time.fixedDeltaTime = Time.timeScale * .02f;
}

public void DoSlowMotion()
{
    SetTimeScale(slowdownFactor);
}

然后假设您可以简单地将默认timeScale设置为1

private void Start()
{
    SetTimeScale(1f);
}

或者如果您的Start不被再次调用(例如,使用DontDestroyOnLoad的情况)也要在加载场景之前进行

public void RestartGame()
{
    SetTimeScale(1f);

    SceneManager.LoadScene("Level01");
}