=======================
=======================
=======================
출처: https://hyunity3d.tistory.com/386
using UnityEngine;
using System.Collections;
public class CsGameManager : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Escape))
{
Application.Quit();
}
}
}
출처: https://hyunity3d.tistory.com/386 [Unity3D]
=======================
=======================
=======================
출처: http://egloos.zum.com/shardent/v/3138338
Application.Quit() 는 사용 중인 프로세스를 제대로 정리해주지 못한다.
이로 인해 알 수 없는 오류가 발생하곤 한다.
예를 들어 구글 플레이 서비스가 정상적으로 종료되지 않아
다음 실행에서 프리징 현상이 발생한다.
약간의 수정을 통해 이를 개선할 수 있다.
void OnApplicationQuit()
{
Application.CancelQuit();
#if !UNITY_EDITOR
System.Diagnostics.Process.GetCurrentProcess().Kill();
#endif
}
Application.Quit() 를 사용하여 종료시키는 부분은 똑같고
상단의 코드만 추가해주면 된다.
=======================
=======================
=======================
출처: https://blog.naver.com/verge1379/150171863421
어플리케이션의 스테이트에 따라서 특정한 처리가 요구될 경우가 있습니다.
이를 위해 안드로이드. iOS 양쪽 모두 통용되는 메소드를 지원하고 있습니다.
OnApplicationPause(bool pause) : 홈키로 어플을 내려 pause 상태로 만들었을 때의 처리
OnApplicationQuit() : 어플을 종료할 때의 처리
메소드의 이름만 보면, 안드로이드 쪽에 가깝군요. 하지만 Unity3D는 여러가지 면에서 iOS를 더 사랑하는 것 같습니다.
(푸시 지원 해주는 것만 봐도...) 간략한 예제를 통해서 어떤 식으로 쓰이게 되는지 알아보도록 하겠습니다.
1) OnApplicationPause
bool bPaused = false; // 어플리케이션이 내려진 상태인지 아닌지의 스테이트를 저장하기 위한 변수
void OnApplicationPause(bool pause)
{
if (pause)
{
bPaused = true;
// todo : 어플리케이션을 내리는 순간에 처리할 행동들 /
}
else
{
if (bPaused)
{
bPaused = false;
//todo : 내려놓은 어플리케이션을 다시 올리는 순간에 처리할 행동들
}
}
2) OnApplicationQuit
void OnApplicationQuit()
{
// todo : 어플리케이션을 종료하는 순간에 처리할 행동들
}
=======================
=======================
=======================
출처: https://blueasa.tistory.com/941
유니티 종료 시 호출되는 함수..
OnApplicationQuit()
참조 : http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.OnApplicationQuit.html
아래는 소스 사용 참고..
IMPORTANT: This function has no effect on iPhone. Application can not prevent termination under iPhone OS.
(주의 : 아이폰에서는 CancelQuit()는 적용되지 않는다고 함. iOS는 프로그램의 종료를 방해할 수 없다고 함.)
1 using UnityEngine; 2 using System.Collections; 3 4 public class example : MonoBehaviour { 5 public float showSplashTimeout = 2.0F; 6 private bool allowQuitting = false; 7 void Awake() { 8 DontDestroyOnLoad(); 9 } 10 void OnApplicationQuit() { 11 if (Application.loadedLevelName.ToLower() != "finalsplash") 12 StartCoroutine("DelayedQuit"); 13 14 if (!allowQuitting) 15 Application.CancelQuit(); 16 17 } 18 IEnumerator DelayedQuit() { 19 Application.LoadLevel("finalsplash"); 20 yield return new WaitForSeconds(showSplashTimeout); 21 allowQuitting = true; 22 Application.Quit(); 23 } 24 }
출처 : http://docs.unity3d.com/Documentation/ScriptReference/Application.CancelQuit.html
OnApplicationPause()
게임 밖으로 나갈 때 호출되는 함수
참조 : http://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.OnApplicationPause.html
출처: https://blueasa.tistory.com/941 [Try & Error]
=======================
=======================
=======================
출처: http://lancekun.com/blog/?p=599
유니티2018.3.12 에서gradle로 빌드시에 Application.Quit 으로 종료이후 다시 재실행시 UnityIAP 초기화가 실패하는 경우가 있습니다. 대략적으로 Inventory를 갱신시켜준후 Java프록시 호출이 실패하는 이슈(1126040) 였었고 3.13에서 해당 이슈가 해결되었다 하였습니다.
Android: Fixed crash when AndroidJavaProxy is invoked while app is in background. (1126040, 1140959)
하지만 2018.3.13으로 업데이트를 해줘도 간헐적으로 정상적으로 초기화가 되지않는 이슈가 반복되더라구요.
[재현스텝]
1.정상적으로 게임 진입 후 Application.Quit을 통해 종료
2.앱 아이콘을 클릭하여 재실행
찾아보니 UnityIAP 포럼에 같은 현상을 겪는 사람들이 있더라구요.
글에서는 아래와 같은 2가지 솔루션을 제시하였지만, 원하는 대로 동작을 해주지 않더라구요.
using (AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject javaActivity = javaClass.GetStatic<AndroidJavaObject>("currentActivity")) { javaActivity.Call<bool>("moveTaskToBack", true); javaActivity.Call("finish"); } }
유니티 액티비티를 백그라운드로 보내는 방법
System.Diagnostics.Process.GetCurrentProcess().Kill()
해당 기능을 사용하면 프로세스가 계속 프리징상태로 남아있다가 10~20초 후에 종료됩니다.
그냥 귀찮지만 안드로이드 스튜디오를 키고 aar을 만들었습니다.
[Download ] : quit_helper.zip 16.0KB
Minimum sdk level 16 ( 4.1 )
해당 zip파일을 다운로드하신후 압축을 푸시면 .aar파일이 나옵니다. 이를 Assets/Plugins/Android 폴더에 넣어주시고, 아래와 같이 메서드를 만들어주신후 Apllication.Quit을 사용하는 부분에서 대신 호출해주시면 깔끔하게 해결됩니다.
public static void Quit() { AndroidJavaClass ajc = new AndroidJavaClass("com.lancekun.quit_helper.AN_QuitHelper"); AndroidJavaObject UnityInstance = ajc.CallStatic<AndroidJavaObject>("Instance"); UnityInstance.Call("AN_Exit"); }
Android Gradle / IL2CPP ( all architectures )
Samsung Galaxy S4, 5, 7, Note 5, 9 에서 해당 이슈가 해결된것을 확인하였습니다.
같은 이슈를 겪고 있던 선후님에게도 해당 파일을 전달하여 아래 링크의 게임 2.2.34버전에 적용되었다고 합니다.
시간되시는분은 한번 플레이 해보세요 ㅎㅎ
=======================
=======================
=======================
출처: https://shaunliz.tistory.com/9
- 환경 : Unity 5.0.0f4 -
유니티에서 안드로이드용 어플리케이션을 만든 뒤 종료처리를 위해
if(Input.GetKeyDown(KeyCode.Escape))
{
Application.Quit();
}
위 코드를 수행할 경우 종료된뒤, 앱을 재실행 하는 경우 실행이 되지 않고 폰이 멈추는 현상이 있었다.
종료시 로그를 자세히 확인해 본 결과 아래와 같은 오류 메시지가 출력됨을 확인 할 수 있엇다.
RenderTexture warning: Destroying active render texture. Switching to main context.
유니티-안드로이드 종료 처리 및 위 로그 메시지를 가지고 구글링을 해보니 여러가지 방법들이 검색이 되어졌다.
(*검색해본 결과들...)
- 안드로이드의 유니티 플레이어의 액티비티를 생성하여 받아온뒤 'finish()'
- 유니티 버전 패치
- 기타 스택오버플로우에서 검색된 방법들...
검색한 내용들을 적용해보아도 수정이 되지 않아 빌드 옵션을 바꾸어 보던중 'Other Settings' -> Multithreaded Rendering 옵션을 체크 해제한뒤 빌드&런 해보니 정상적으로 실행이 된뒤 종료를 해본결과 RenderTexture warning 이 보이지 않았으며, 재실행도 정상적으로 되었다.
아직 정확한 원인을 파악하진 못하였으나, 우선 문제는 해결된 셈이다.
출처: https://shaunliz.tistory.com/9 [개발 대행]
=======================
=======================
=======================
*기타관련링크
- https://scvtwo.tistory.com/27
- https://chameleonstudio.tistory.com/40
- https://grandstayner.tistory.com/entry/Unity-%EA%B2%8C%EC%9E%84-%EC%A2%85%EB%A3%8C%ED%95%98%EA%B8%B0
=======================
=======================
=======================
'게임엔진관련 > 유니티 엔진' 카테고리의 다른 글
[Unity] 유니티 SerializeField 인스펙터 오브젝트 연동 관련 (0) | 2019.11.18 |
---|---|
[Unity] 유니티 소프트키 관련 (0) | 2019.11.13 |
[Unity] 유니티 글자 자간 조정 관련 (0) | 2019.11.12 |
[Unity] 유니티 UI요소(예:Text문자열)를 오브젝트크기를 콘텐츠크기 맞추기 (1) | 2019.10.11 |
[Unity] 유니티 64비트 빌드 관련 (1) | 2019.09.18 |