Переопределение стандартной кнопки закрытия в Unity

#c# #forms #unity3d #window

#c# #формы #unity3d #окно

Вопрос:

Я хочу создать «Вы уверены?» система, когда пользователь нажимает кнопку закрытия окна. Возможно ли перехватить событие FormClosing в Unity?
Спасибо.

Редактировать:

 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). Это работает, но, похоже, каждый кадр создает новое диалоговое окно.

Ответ №1:

Этот вопрос нуждается в обновленном ответе в качестве приложения.Функция CancelQuit() устарела и является однонаправленной.OnApplicationQuit() не предотвращает закрытие приложения.

Чтобы выполнить этот метод подтверждения выхода, лучше использовать: Application .wantsToQuit.

Из документов:

Unity вызывает это событие, когда приложение проигрывателя хочет завершить работу.

Добавьте обработчик события к этому событию, чтобы получить уведомление о том, что приложение пытается завершить работу.

Когда возникает это событие, процесс завершения запускается, но может быть отменен. Это означает, что игрок не гарантированно выйдет из игры. Для получения гарантированного события выхода взгляните на приложение.завершение работы.

Верните 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 OS.

Ответ №2:

Комментарии:

1. Спасибо. Я искал ответ в неправильном направлении. Нет необходимости переопределять стандартные кнопки. Unity уже сделал это 🙂