유저가 뒤로가기 버튼을 두번 연속으로 눌러 앱을 종료시키거나,
업데이트가 후, 재시작이 필요한 경우가 있다.
1. 앱 종료
public static void EndApp()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
UnityEngine.Application.Quit();
#endif
}
앱 종료는 에디터 상태인 경우와 앱 상태인 경우가 조금 다르다. 방법은 위와 같이, 에디터의 경우엔 UnityEditor클래스를 이용하고, 앱은 UnityEngine.Application클래스를 이용한다.
2. 앱 재시작(안드로이드)
if (Application.isEditor)
{
jdUtil.EndApp();
return;
}
using (var 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);
}
재시작의 경우, 알람 기능을 이용하는 것이다. 안드로이드 intent를 이용해 앱을 종료시키고, 일정시간 후 앱을 다시 실행시키는 원리이다. 이 경우는 앱을 업데이트 받은 후 재시작 해야하는 경우에 하는 방법이고, 그 외에는 재시작 루틴을 직접 만드는 것이 좋다. 예를 들어,
1. 맨 처음 Scene(나같은 경우 LogoScene)으로 돌아가면서, 기존 메모리 자원들을 모두 날린다.
2. LogoScene 부터 시작 루틴 실행.
'게임을 만들자 > Unity' 카테고리의 다른 글
Unity, VS4M, Debugger operation failed. 해결 (0) | 2020.11.09 |
---|---|
Unity, Coroutine(코루틴) Lamda(람다식) 사용 (1) | 2020.09.25 |
Unity, c# Http Get 통신 (0) | 2020.09.08 |
Unity, String(Hex) To Color, Color To String(hex) (0) | 2020.07.22 |
Unity Ui Slider, Pointer Up 이벤트 (0) | 2020.07.19 |