Android/Android

[Android] Unity 연동된 Android 프로젝트에서 Unity만 종료하기

핀수 2023. 3. 21. 00:00
728x90
반응형

안드로이드에 있는 유니티 프로젝트만을 종료하고 싶을 때

유니티 쪽에서 Application.Quit() 를 호출하면 유니티 프로세스만 종료할 수 있다고 해서 해봤는데

 

앱이 죽어버린다. (그러나 죽기 전의 액티비티부터 재실행 되는 걸로 보인다.)

이것의 해답은 AndroidManifest.xml에서 해당 액티비티에 process 속성을 부여하는 것이다.

<activity
    android:name=".CustomUnityActivity"
    android:exported="false"
    android:process=":unity" />

그런데 두가지 문제가 있다.

  1. Unity에서 Application.Quit()가 실행되지 않는다는 것
    • 그래서 일단 mUnityPlayer.quit() 를 실행했다.
    • Android에서 Unity 메서드 호출하는 법 (Unity script에 해당 오브젝트와 메소드가 있어야겠죠)
UnityPlayer.UnitySendMessage("Unity Object", "Object Method", "your message")

2. 화면이 destroy 될 때 꼭 꺼졌다가 재실행되는 것 처럼 보인다는 것

근데 쓰다가 해결함

  • 유니티 액티비티는 relativeLayout에 addView 된 것이었다.
  • 그래서 해당 레이아웃에 모든 뷰를 삭제하는 메서드를 호출 relativeLayout.removeAllViews()
  • 그다음 finish() 호출
  • onDestroy() 를 재정의
override fun onDestroy() {
    mUnityPlayer.removeAllViews()
    mUnityPlayer.quit()
    super.onDestroy()
}

AndroidManifest process

Log.d(TAG, "CustomUnityActivity: ${android.os.Process.myPid()}")

각 화면에서 동작하는 프로세스 id를 확인해보자.

Unity를 실행하는 액티비티의 프로세스 아이디만 다른 것을 알 수 있다.

해당 액티비티가 종료되고 나면, 해당 프로세스도 같이 종료될까?

 

실행중인 프로세스를 출력해주는 adb shell ps -ef 명령어를 실행해봤다.

CustomUnityActivity finish 후

프로세스가 종료되었다.

그러나

Unity와 Android 간의 데이터 주고 받기가 제대로 이루어지지 않았다…………………..

Unity를 더 공부해야겠다.


공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다.

말씀해주시면 수정하겠습니다. 감사합니다.

References

아래 글을 참고하여 작성 되었습니다.

 

 

Unity 프로젝트 - Android Studio에 연동하기

연동을 하기전에 먼저 유니티에서 빌드후 export 된 안드로이드 프로젝트를 안드로이드 스튜디오에서 먼저 빌드하고 핸드폰에 실행되는지 확인을 해야한다. 2021.12.13 - [Develope/JAVA] - Unity 프로젝트

brtech.tistory.com

 

 

[Unity-AOS] Application.Quit()으로 종료시 크래시 이슈

환경Windows 10Unity 2020.3.7f1IL2CPP AOS 빌드 증상Applicaiton.Quit()으로 앱 종료시 랜덤하게 크래시 발생함 Crash Logs E AndroidRuntime: Process: com.**.**, PID: E AndroidRuntime: java.lang.Error: FATAL EXCEPTION [ma…

lunchballer.com

 

728x90
반응형