【问题标题】:Time.timeScale = 0f; not pausing my game when I run it in unity?时间.timeScale = 0f;当我统一运行游戏时不会暂停我的游戏?
【发布时间】:2020-08-04 05:20:29
【问题描述】:

我正在尝试为暂停菜单制作一个脚本,我尝试使用Time.timeScale,当我统一运行它时它不会暂停游戏。我有另一个脚本,它是一个脚本游戏,它也使用Time.timeScale = 0f;,当我运行它时它工作正常。我在 Debug.Log 中检查了 TimetimsScale,它保持在 1。这是我的代码:

void Update()
{
    if(Input.GetKeyDown(KeyCode.Escape))
    {
        
        if (gamePaused)
        {
            Play();
        }
        else
        {
            Paused();
        }
    }
}

public void Paused ()
{
    gamePaused = true;
    pauseMenu.SetActive(true);
    Time.timeScale = 0f;
}
public void Play()
{
    Time.timeScale = 1f;
    pauseMenu.SetActive(false);
    gamePaused = false;
}

【问题讨论】:

  • 您好,我看到您正在使用unityscript 标签,请注意这是(如标签信息中所述)Unity 不推荐使用的脚本语言,而不是包含所有脚本的术语在统一。你的问题是关于 C# 的(我已经为你删除了标签)。如果您使用实际语言 UnityScript 处理遗留代码,请仅使用此标记。这使问题和标签保持一致:)
  • doesn't work 到底是什么意思?预期的行为究竟是什么?它在哪里/如何表现不同?
  • 这个脚本放在什么对象上?组件必须放置在活动的 GameObject 上并启用才能调用 Update。请检查这些条件。

标签: c# unity3d game-development


【解决方案1】:

我在您发布的代码中找不到任何逻辑错误。所以有两种可能。

  1. 在您的代码中的某处还控制了Time.timeScale。你应该检查它的引用。或使用Debug.Log 函数直接检查它的值。 如果您的脚本被添加两次(或从未添加),也可能发生这种情况。通过右键单击项目选项卡中的脚本文件并选择 Find References In Scene 来检查脚本的引用。
  2. 您的逻辑可能不受Time.timeScale 控制。

首先,Time.timeScale = 0f; 并不意味着一切都会停止。

它只影响关于“时间”的逻辑(Time.deltaTime、动画序列、WaitForSeconds 类等)

例如,如果您使用Update 函数(或yield retun null 循环协程)而不使用Time.deltaTime,则不会随着时间刻度为零而停止。

【讨论】:

  • 这个答案是正确的,但要补充一点:正如 WonJae 所说,您的update 不会受到设置Time.timeScale = 0 的影响,除非您在其中使用Time.DeltaTime。您可以做的是改用FixedUpdate,当您将时间刻度设置为0 (as stated in the docs) 时它将停止。此外,在设置 timeScale 时,建议也将 Time.fixedDeltaTime 设置为相同的数量。
猜你喜欢
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
相关资源
最近更新 更多