반응형
AR, MR 같은 서비스들이 생기면서 Unity를 직접 실행하지 않고 Native App에서 Unity를 실행하는 방식이 자주 사용되고 있는 것 같습니다.
728x90
android에서 유니티 실행에 insight를 주는 글
-
안드로이드에서 유니티 프로젝트 불러오기 - 퍼즐잎의 기술블로그
-
Unity 프로젝트 - Android Studio에 연동하기 - Dev Stack
위 방식과는 조금 다른 방식으로 보여지는데
-
OpenCV와 NDK를 사용하여 Android에서 Face Detection(얼굴 검출) - 멈춤보단 천천히라도
어떤 방식이 더 좋은 것인지는 모르겠습니다.
위 문서들에서 말하는 native에 unity를 통합하는 과정
-
Unity project를 apk로 직접 빌드 하지 않고 Android project로 export
-
export된 프로젝트를
-
main이 되는 android project에 합치기
(통합 과정도 여러 시행 착오가 있겠지만 어찌저찌 잘 통합되었다 치고)
통합 후 native(android, ios)와 unity간 메시지(데이터) 전달 방법에 대해 적어봅니다.
일부 예전에 사용했던 방식에 대해서도 이야기 하겠지만 전반적으로 검증되지 않은 저의 생각입니다. -0-
반응형
앱 구동과 이벤트 발생
유니티 구동은
-
main android에서
-
unity를 load/unload 시키는
방식이고
이벤트의 flow는
-
unity에서 버튼 클릭같은 이벤트가 생기면
-
main android를 거치거나 main android에 포함된 별도 모듈의 특정 api 호출한 후
-
결과를 다시 unity에서 받을 수 있어야 함
요 때, unity가 결과를 받는 방식을 동기나 비동기로 사용이 가능할 것 같습니다.
Android에서 Unity로
첫 번째, 동기 방식으로 받아도 된다면 아래 두 가지 정도 보시면 충분히 도움이 될 것이라 생각하고,
두 번째, 비동기로 받아야 한다면 위 두 가지 내용 외 추가로
-
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 |