게임 개발 공부/Unity

앱 재시작(안드로이드 AOS)

CalebHong 2025. 6. 8. 11:08
SMALL

유니티에서 재시작의 개념은 보통 처음 씬을 로드하여 초기화 단계를 거치도록 하는 방법을 사용한다.

그러나 이 과정에 초기화 작업이 요구되며, Don't Destroy 객체는 각 데이터에나 상태에 대한 초기화가 필요하다.

따라서 어플리케이션 차원의 재시작을 위해 아래의 코드를 실행하여 앱 자체를 재시작한다.

 

public void Restart()
{
    using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
        const int kIntent_FLAG_ACTIVITY_CLEAR_TASK = 0x00008000;
        const int kIntent_FLAG_ACTIVITY_NEW_TASK = 0x10000000;

        var currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
        var pm = currentActivity.Call<AndroidJavaObject>("getPackageManager");
        var intent = pm.Call<AndroidJavaObject>("getLaunchIntentForPackage", Application.identifier);

        intent.Call<AndroidJavaObject>("setFlags", kIntent_FLAG_ACTIVITY_NEW_TASK | kIntent_FLAG_ACTIVITY_CLEAR_TASK);
        currentActivity.Call("startActivity", intent);
        currentActivity.Call("finish");
        
        var process = new AndroidJavaClass("android.os.Process");
        int pid = process.CallStatic<int>("myPid");
        process.CallStatic("killProcess", pid);
    }
}
반응형