重写Unity中的标准关闭按钮

本文关键字:标准 关闭按钮 Unity 重写 | 更新日期: 2023-09-27 18:13:18

我想创建一个当用户点击窗口关闭按钮时"Are you sure?"的系统。有可能在Unity中捕获FormClosing事件吗?谢谢。

编辑:

void OnApplicationQuit()
{
    DialogResult result = MessageBox.Show(
        "Are you sure you want to cancel ?",
        "Question",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Question);
    if (result == DialogResult.Yes)
    {
        Application.Quit();
    }
}

我试着在用户点击(X)按钮时打开一个对话框。它工作,但看起来它创建一个新的对话框每帧。

重写Unity中的标准关闭按钮

这个问题需要一个更新的答案,因为application . cancelquit()已被弃用,并且MonoBehaviour.OnApplicationQuit()不能阻止应用程序关闭。

要完成此退出确认方法,最好使用:Application.wantsToQuit.

From the docs:

当播放器应用程序想要退出时,Unity会引发此事件。

为该事件添加一个事件处理程序,以接收应用程序试图退出的通知。

当引发此事件时,退出进程已经启动,但可以取消。这意味着玩家并不一定会退出游戏。关于保证退出事件,请查看application .quit .

返回true,退出进程将继续。返回false,退出进程将被取消。


例子:

// When the application starts, append a method
// that will run when the user attempts to exit
[RuntimeInitializeOnLoadMethod]
static void RunOnStart() { 
    Application.wantsToQuit += WantsToQuit;
}
public static bool quitConfirmation = false;
static bool WantsToQuit() {
    if(quitConfirmation)  {
        return true;
    } else {
         RequestQuitConfirmation();
    }
    return false;
}
static void RequestQuitConfirmation() {
    DialogResult result = MessageBox.Show(
        "Are you sure you want to cancel ?",
        "Question",
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Question);
    if (result == DialogResult.Yes)
    {
        quitConfirmation = true;
        Application.Quit();
    }
}


注意:此事件(Application.wantsToQuit)的返回值在编辑器中退出播放模式时被忽略。重要:返回对iPhone没有影响。应用程序无法阻止iPhone操作系统下的终止

看看MonoBehaviour.OnApplicationQuit()和Application.CancelQuit()