본문 바로가기
공허의 유산/표현의 자유

Unity as Library - Unity를 Android에 Activity로 사용하기

by 바른생활머시마 2023. 3. 6.
728x90
반응형

Unity - Manual: Using Unity as a Library in other applications (unity3d.com)

 

 

Unity - Manual: Using Unity as a Library in other applications

Using Unity as a Library in other applications Unity as a Library is intended for specialist users who use native platform technologies such as Java/Android, Objective C/iOS, or Windows Win32/UWP, and want to include Unity-powered features in their games o

docs.unity3d.com

 

3D View가 도움이 될 만한 서비스가 많은데 그럴 때 3D 뷰를 OpenGL ES로 구현하는 것은 쉽지 않은 일입니다. 그런 일이 생기면 Unity 같은 것을 쏙~ 집어넣으면 좋겠다는 생각이 드는데, 위 매뉴얼이 그런 내용을 다루고 있습니다.

그 내용 중, Android에 대한 내용은 아래 링크에 따로 정리가 되어 있어요.

 

Unity - Manual: Integrating Unity into Android applications (unity3d.com)

 

Unity - Manual: Integrating Unity into Android applications

Specify Unity start-up arguments Integrating Unity into Android applications This page describes how to integrate the Unity Runtime Library into Android applications using the Unity as a Library feature. You can use this feature to include Unity-powered fe

docs.unity3d.com

 

위 매뉴얼을 보니, Unity 2022.2.0a18와 그 이후 버젼은 방식이 좀 달라졌는지, 그 이전과 다른 예제를 제공하고 있습니다. 겸사겸사 최신 버젼으로 업데이트 해서 한번 살펴 보도록 하겠습니다.

 

Unity 2022.2.0a18과 그 이후 버젼에 대한 예제 저장소

uaal-example/android.md at master · Unity-Technologies/uaal-example (github.com)

 

GitHub - Unity-Technologies/uaal-example

Contribute to Unity-Technologies/uaal-example development by creating an account on GitHub.

github.com

 

Unity 2019.3.0b4 to 2022.2.0a17까지의  버젼에 해당하는 예제 저장소

Unity-Technologies/uaal-example at uaal-example/19LTS-21LTS (github.com)

 

GitHub - Unity-Technologies/uaal-example

Contribute to Unity-Technologies/uaal-example development by creating an account on GitHub.

github.com

 

Example repository

Unity-Technologies/uaal-example (github.com)

 

GitHub - Unity-Technologies/uaal-example

Contribute to Unity-Technologies/uaal-example development by creating an account on GitHub.

github.com

 

 

 

 

 

Library로 사용 할 Unity3d project 준비

겸사겸사 글 작성 시점에서 꽤 최신 버젼을 한번 설치 해 보겠습니다.

 

Install Unity3d 2022.2.9f1

 

보통 Android 관련 된 패키지들만 설치하면 되었는데, MS Visual Studio가 체크되어 있어서 뭔가 하고 살펴보니,

MS Visual Studio Community도 2019에서 2022로 업데이트 되었네요.

 

저장소에서 받은 프로젝트를 열면, 이 프로젝트가 2022.2.0.b1에서 제작 된 것을 알 수 있습니다. 일단 설치한 것이 더 최신 버젼이니까 새로 설치한 최신 버젼으로 프로젝트를 열어봅니다.

 

와우~~~~ 색다른 그림이네요. PACT 출판사의 책 표지 같은 느낌이 드네요.

 

자세한 내용은 위에 버젼별로 알려준 github의 Guide를 보면서 진행하면 됩니다.

간혹 설명이 조금 부족한 부분도 있는데, 그런 것을 직접 해결하는 것도 공부에 큰 도움이 되죠.(힘들지만...)

 

guide에서 ARM64도 선택하라는 말은 있는데, IL2CPP에 대해서는 따로 언급이 없었습니다. 샘플 프로젝트의 기본값이 IL2CPP였으면 괜찮은데, Mono였거든요. 최근에 AAR 연동 하면서 보니 저걸 IL2CPP로 해줘야 ARM64가 활성화 된다는 것을 알고 있었던 차에 딱 요런 것이 보인 것이죠.

아래와 같이 실제 프로젝트가 되어 있어서, 먼저 IL2CPP를 선택한 후, ARM64를 해줘야 하죠..

 

또 하나, Minimun SDK 설정도 빼먹으면 안되죠. 요렇게 3가지를 잘 준비 해 줍니다.

Unity 프로젝트 내용은 뭔지 보지도 않았네요...

이제 이 Unity project를 Android project로 내보냅니다.

아래와 같이 Build Settings에서 Export Project를 선택하면 아래 Export 버튼이 뜹니다.

 

Expor를 하면 뭐가 잔뜩 지나가는 것을 보니, 프로젝트에 이것저것 많은가봅니다.

저장 위치는 Unity project 하위에 폴더(androidBuild)를 만들고 그 폴더를 선택하여 export합니다.

 

반응형

 

 

 

 

 

Android Native 

내려받은 코드들에 Android Project도 포함되어 있습니다. 

Guide의 내용을 따라가면 별로 어렵지 않습니다. 

 

저는 gradle에 대해서는 사실 거의 알지 못합니다. 그래서, 이 guide처럼 gradle의 내용을 수정하는 것은 정확히 무슨 의미인지 잘 알지 못합니다. 그래도, 필요할 때 똑같이 일단 해보고, 그때 안되면 또 여기저기 수소문 해보면 뭔가 나오겠죠. 이렇게 gradle 수정을 하고 난 후, Sync Now를 눌러 수정한 사항을 반영 해 줍니다.

Android SDK 버젼이 32로 나오는 것이 눈에 확 띄네요. Unity project에서 내보낼 때 설정한 버젼과 다른 것 같은데 어찌되나 보도록 하죠.

지금까지의 과정은 unityLibrary를 가져오는 과정으로써, 이 과정을 마치고 나면 프로젝트에 unityLibrary가 모듈로 추가되어 있습니다. 아마, GUI를 통해서 추가하는 방법도 있지 않을까 싶네요.상세한 내용은 가이드 문서를 참고 바랍니다. 간단해서 별로 어렵지 않아요.

이렇게 추가한 후, 에뮬레이터에서 한번 실행 해 보겠습니다.

일단 앱 실행은 잘 되었네요~ 저기서 SHOW UNITY를 누르면 Unity 화면이 나오겠죠?

그랬더니, 익숙한 핑크빛 색상이~~~ Unity에서 재질이 없거나 문제가 있을 때 보여지는 핑크색~

무슨 문제일까요???

가이드를 보면 SHOW UNITY를 누르면 Unity가 새로운 Activity 형태로 뜨는 것 같은데....

오류 로그를 보니 Shader가 제대로 컴파일 안된 것 같은데....

사용한 에뮬레이터의 android sdk가 30버젼이라서 32로 한번 올려봤습니다만, 결과는 똑같았습니다.

 

오류 내용을 찬찬히 살펴보던 중, 아래 내용을 보니, 에뮬레이터라서 생긴 오류가 아닌가 싶어서 실제 Device를 연결해 보기로 했습니다.

2023-03-06 15:20:20.266 3802-3828/com.unity.mynativeapp E/EGL_emulation: [getAttribValue] Bad attribute idx

 

실제 Device 연결했더니~~~ 오호라~~

 

 

요렇게 잘 되네요.

 

이제 샘플 프로젝트 코드를 좀 분석하면,  Unity를 Android App에 사용 할 수 있겠네요.

여러 개의 3D View를 동시에 사용 할 수 있을지, iOS는 어떻게 해야 할지 등등 여러가지 숙제가 많기는 하지만, 일단 Android에서 이렇게 3D View를 Unity로 쉽게 가져 와서 쓸 수 있다는 사실이 참 고무적이네요. Android의 Fragment에 대해서 좀 공부를 해야 될 것 같습니다.

728x90
반응형

댓글