c# - 暂停菜单不起作用 - UNITY

标签 c# unity3d

我的暂停菜单有一个奇怪的问题。 当我按 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;
}

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

最佳答案

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

作为Documentation说:

When timeScale is set to zero the game is basically paused if all your functions are frame rate independent. (emphasis by me)

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

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

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

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

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

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

关于c# - 暂停菜单不起作用 - UNITY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50724206/

相关文章:

c# - 动态初始化窗体对象

c# - Linq:如何将行转换为具有计数的列(交叉表数据)?

c# - DllExport 未创建入口点

android - Unity android 项目抛出 "Your hardware does not support this application sorry"错误

c# - 使一个值的 50% 成为另一个变量的最大值(0%/100% 等于最小值)

unity3d - 无法使用 Unity 3D 物理阻止球弹跳

c# - 如何使用 Azure 的文本转语音创建音频文件而不是实时文本转语音? (C# Unity SDK)

C#:如何将 2 个列表放入一个 2 元组列表中

c# - 如何播放动态加载的声音

c# - 强制模式仅适用于 Y 轴 Unity3D