상세 컨텐츠

본문 제목

[Unity] 유니티 종료,Quit, Exit 관련

게임엔진관련/유니티 엔진

by AlrepondTech 2019. 11. 13. 14:26

본문

반응형
728x170

 

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

 

 

출처: 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 : 어플리케이션을 종료하는 순간에 처리할 행동들

}

 

 

=======================

=======================

=======================

 

 

 

 

 

 

반응형

 

 

728x90

 

 

 

 

출처: 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

 

 

=======================

=======================

=======================

 

 

 

 

반응형
그리드형


관련글 더보기

댓글 영역