【问题标题】:Pause Menu doesn't work - UNITY暂停菜单不起作用 - UNITY
【发布时间】:2018-06-06 15:30:16
【问题描述】:

我的暂停菜单有一个奇怪的问题。 当我按 ESC 时,它会打开我的菜单并停止除字符之外的“游戏”。 我正在使用Time.TimeScale = 0f;。 我已经看到 TimeScale 的问题会影响“游戏中”的所有内容,如果它不适用于我的角色,那是因为它们不在同一个 TimeScale 中。

我在 Visual Studio 2017 中使用 UNITY 3D 5.6.0。

我的代码:

public static bool pause = false;
public GameObject pauseMenu;

void Update () {
    if(Input.GetKeyDown(KeyCode.Escape))
    {
        if(pause)
        {
            Continuer();
        }
        else
        {
            Pause();
        }
    }
}

public void Continuer()
{
    pauseMenu.SetActive(false);
    Time.timeScale = 1f;
    pause = false;
}
public void Pause()
{
    pauseMenu.SetActive(true);
    Time.timeScale = 0f;
    pause = true;
}

有人知道如何暂停整个游戏吗?

【问题讨论】:

  • 我已经为你删除了visual-studio 标签。来自visual-studiotag wiki:“如果您对 Visual Studio 特性和功能有特定的问题,请使用此标签。不要将此标签用于有关恰好在 Visual Studio 中编写的代码的问题。考虑标记确切的技术区域您的问题链接,并标记更具体的 Visual Studio 版本。请在您的问题中提及您的确切 VS 版本、版本和更新级别。"

标签: c# unity3d


【解决方案1】:

Update()OnGUI() 是独立于时间尺度的,因此它们不受将Time.timeScale 设置为0 的影响。只有FixedUpdate() 会受到影响。

正如Documentation 所说:

当 timeScale 设置为零时,游戏基本上会暂停 如果全部 您的功能与帧速率无关(我强调)

您应该在Update() 调用背后使用一些逻辑,例如:

1) 让运动与时间尺度相关。如果您的角色随着翻译而移动,请执行以下操作:

transform.Translate(Vector3.forward * Time.deltaTime);

2) 仅在游戏未暂停时应用Update() 逻辑:

void Update(){
     if (Time.timeScale == 0)
         return;
     //...
 }

void Update(){
     if (pause)
         return;
     //...
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多