본문 바로가기
IT/Unity3D

Android에서 유니티 실행하기

by rapker 2023. 4. 18.
반응형
AR, MR 같은 서비스들이 생기면서 Unity를 직접 실행하지 않고 Native App에서 Unity를 실행하는 방식이 자주 사용되고 있는 것 같습니다.
728x90
 
android에서 유니티 실행에 insight를 주는 글
 
위 방식과는 조금 다른 방식으로 보여지는데
 
어떤 방식이 더 좋은 것인지는 모르겠습니다.
 
위 문서들에서 말하는 native에 unity를 통합하는 과정
  1. Unity project를 apk로 직접 빌드 하지 않고 Android project로 export
  2. export된 프로젝트를
  3. main이 되는 android project에  합치기
 
 
(통합 과정도 여러 시행 착오가 있겠지만 어찌저찌 잘 통합되었다 치고)
 
통합 후 native(android, ios)와 unity간 메시지(데이터) 전달 방법에 대해 적어봅니다.
 
일부 예전에 사용했던 방식에 대해서도 이야기 하겠지만 전반적으로 검증되지 않은 저의 생각입니다. -0-
 

반응형
 
앱 구동과 이벤트 발생
 
유니티 구동은
  1. main android에서
  2. unity를 load/unload 시키는
방식이고
 
이벤트의 flow는
  1. unity에서 버튼 클릭같은 이벤트가 생기면
  2. main android를 거치거나 main android에 포함된 별도 모듈의 특정 api 호출한 후
  3. 결과를 다시 unity에서 받을 수 있어야 함
 
요 때, unity가 결과를 받는 방식을 동기나 비동기로 사용이 가능할 것 같습니다.
 
 
Android에서 Unity로
 
첫 번째, 동기 방식으로 받아도 된다면 아래 두 가지 정도 보시면 충분히 도움이 될 것이라 생각하고,
 
두 번째, 비동기로 받아야 한다면 위 두 가지 내용 외 추가로
  1. main android에서 unity쪽으로 호출하는 방법이 필요합니다.
 
 
첫 번째 방법은 링크걸어둔 글에 잘 설명되어 있어 넘어가겠고,
 
두 번째 방법에 대해 정리를 해볼건데
unity에서 비동기로 android 함수를 호출 하고, android에서 처리된 결과를 unity의 특정 GameObject로 전달
 
두 번째 방법에 대해 조금 더 자세히 이야기 하기 전에 일부 이름을 정하고 이야기를 해보겠습니다.
(통상적으로 쓰이는 이름은 아닙니다. 그냥 정의가 필요해서...  -0-)
  • 전통적인 전달
  • 복합 전달
 
 
전통적인 전달
 
먼저, 전통적인 전달이 어떤 방식이였냐면
 
UnityPlayerActivity를 상속받은 unity android에는 UnityPlayer.UnitySendMessage()라는 api를 통해 unity에 메세지를 전달할 수 있습니다.
 
해당 api를 호출하여 unity에서 메세지를 받으려면
unity에서 메세지를 받아줄 GameObject가 있어야 하고, 해당 api인자로 GameObject 이름 GameObject내 function 이름, 전달할 message가 들어가게 됩니다.
 
당연하겠지만 GameObject가 살아 있어야 메세지를 받을 수 있기 때문에
unity scene이 변경되더라도 GameObject가 살아 있도록 DondDestroyOnLoad()에 담아주는것이 권장 됩니다.
 
이는 단순히 메세지를 전달하는 형태이지만, message를 parsing해서 여러 데이터를 다룰수도 있겠고
 
좀 더 고도화 된 처리를 위해 복잡한 구조가 필요하다면 GameObject를 용도별로 여러개로 분리해서 사용할 수도 있겠습니다.
 
추가로 UnityPlayer.UnitySendMessage() api를 사용하지 않고 unity에서 (#if android로) android class를 작성하는 방법으로도 가능할 것 같긴한데
반드시 도전해야할 이유가 있지 않다면 향 후 관리면에서 저는 사용하지 않을 것 같습니다.
 
 
복합전달
 
복합 전달은 저도 경험해 보진 않았지만
UnityPlayer.UnitySendMessage() api를 호출로 unity에 전달하는 과정은 여전히 필요할 것 같습니다.
 
  • main android에서 unity android를 통해 해당 api를 호출 할 수 도 있을 것 같고
  • main android에서 직접 해당 api를 호출할 수 도 있을 것 같고
 
android native의 framework를 잘 몰라서 더 이상 설명할 수 없겠지만
 
어찌보면 main android에서 가져다 쓰는 여러 라이브러리중 하나인 것으로 보여지며
unity android의 api를 호출하는 방법은 여타 라이브러리 사용하는 방법과 동일하지 않을까 생각됩니다.
반응형
LIST

'IT > Unity3D' 카테고리의 다른 글

Missing script 찾는방법  (0) 2023.04.19
Windows Standalone 실행 경로 확인  (1) 2023.04.18
Ubuntu 18.04-LTS 에 Unity 설치  (0) 2023.04.18
Unity Dedicated Server to AKS  (0) 2023.04.17
Unity 전처리기  (0) 2023.04.08