해당 내용은 Unity 프로그램을 종료할 때 일반적인 방법 ( Application.Quit(), Alt + F4, 윈도우 닫기 등 ) 으로 종료를 시도하는 경우 바로 종료되지 않고 확인창을 띄우는 방법에 대한 내용이며 Unity Editor의 버전은 2018.1 이상, 타겟 플랫폼은 Standalone을 기준으로 한다.

 

2018.1 이상 및 Standalone인 이유 (https://docs.unity.cn/kr/2018.4/Manual/UpgradeGuide20181.html)

기존에 종료를 중지하는데 사용되던 Application.CancelQuit 이 더이상 사용되지 않고 작성할 내용인 Application.wantsToQuit 은 Standalone만 지원하기 때문

 

Application.wantsToQuit를 사용하는 방법은 아래의 소스 코드와 같다.

 

using System;

public class ExampleApplicationQuit : MonoBehaviour
{
    public GameObject askUI;

    public Action quitEvent;

    public bool isApplicationQuit;

    private void Awake()
    {
        InitializeApplicationQuit();
    }

    //시작 시 종료 이벤트 추가
    private void InitializeApplicationQuit()
    {
        quitEvent += () =>
        {
            askUI.SetActive(true);
        };

        Application.wantsToQuit += ApplicationQuit;
    }

    //종료를 묻는 창의 종료 버튼 처리
    public void OnClickQuitProcess()
    {
        isApplicationQuit = true;
        Application.Quit();
    }

    //종료를 묻는 창의 취소 버튼 처리
    public void OnClickQuitCancel()
    {
        isApplicationQuit = false;
        askUI.SetActive(false);
    }

    //프로그램 종료
    private bool ApplicationQuit()
    {
        if(!isApplicationQuit)
        {
            quitEvent?.Invoke();
        }

        return isApplicationQuit;
    }
}

 

Awake 에서 종료 요청 시 처리할 이벤트를 초기화한다.

 

정상적인 방법으로 프로그램을 종료할 경우 Application.wantsToQuit 이벤트가 처리되며 추가된 ApplicationQuit 함수의 반환값이 true일 경우 종료를 진행하고 false일 경우 종료를 중지한다.

 

종료 진행 여부 변수의 초기값이 false 값이기 때문에 종료를 중지하며 이벤트 처리로 인해 종료를 묻는 UI가 활성화 된다.

 

활성화된 UI에서 종료 버튼을 눌러 진행하면 종료 진행 여부가 true가 되고 종료를 호출하기 때문에 종료가 되며 취소 버튼을 누르면 UI가 비활성화되어 종료가 취소된다.

 

위의 코드에는 없지만 주의할 점이 있다면 Unity의 OnApplicationQuit 함수를 사용할 경우 사용에 주의해야 한다.

프로그램 종료의 진행 및 중지의 여부와 상관없이 종료를 요청하는 순간 함수가 호출된다. 

Posted by Heon_Dev
,