【问题标题】:Unity Time.timeScale = 0 does not freeze the entire sceneunity Time.timeScale = 0 不会冻结整个场景
【发布时间】:2020-01-03 11:56:40
【问题描述】:

点击暂停后我试图“冻结”屏幕并出现一个弹出窗口。

我正在使用Time.timeScale = 0,但问题是当前场景中的一个特定游戏对象没有“冻结”,即使在暂停面板(暂停菜单)下仍然可以点击。

这是弹出窗口的代码:

[Header("Pause Menu Panel")]
[SerializeField] private GameObject pauseMenuUI;
public static bool GameIsPaused = false;

private void Update()
{
    if (Input.GetKeyDown(KeyCode.P))
    {
        if (GameIsPaused)            
            Resume();            
        else           
            Pause();            
    }      
}

public void Resume()
{
    pauseMenuUI.SetActive(false);
    Time.timeScale = 1f;
    GameIsPaused = false;
}

private void Pause()
{
    pauseMenuUI.SetActive(true);
    Time.timeScale = 0f;
    GameIsPaused = true;
}

使用Time.timeScale = 0 时不应该一切都冻结吗?

【问题讨论】:

  • 某些 UI 可以忽略 timeScale ,并非所有对象都受 timeScale 影响
  • 正确表述:UI交互与Time.timeScale完全无关

标签: c# unity3d time


【解决方案1】:

Physics 被“暂停”,但 Update 仍然被调用。如果你这样移动:

transform.position += direction * speed * Time.deltaTime ();

应该没问题。但是如果按固定量移动,则不受时间影响。

【讨论】:

    【解决方案2】:

    here 可以看出,UI 按钮不受时间尺度的影响。 您可以做的是完全禁用按钮button.setActive(false),禁用按钮button.interactable = false 上的可点击属性,或者最后在侦听器方法上检查if (GamePaused) return;,如果游戏暂停并返回,这将不会执行代码。快乐编码!

    【讨论】:

      猜你喜欢
      • 2022-08-02
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多