UaaL (Unity as a Library) : Unity를 라이브러리로 표준 Android 앱에 통합하기

너스레:)·2023년 5월 14일
1

Android_Kotlin

목록 보기
2/2
post-thumbnail

0. 요구 사항

  • Android Studio Bumblebee (2021.1.1) 이상
  • 유니티 버전 2022.2.0a18 이상 -- 2022.2.0b1 (적절)

1. 소스 가져오기

UaaL (안드로이드&유니티 간의 통합)이라는 주제에 집중하기 위해 Android, Unity 프로젝트 각각을 제작하는 과정은 생략하겠습니다.
깃허브의 uaal-example 레포지토리에서 미리 만들어진 프로젝트들을 클론/다운로드 해주세요.
해당 레포지토리에 포함되어있는 프로젝트들은 다음과 같습니다:

  • NativeAndroidApp : Unity 프로젝트가 통합될 Android Studio의 Basic Activity application 입니다. OverrideUnityActivity를 extends하여 만든 심플한 UI의 MainUnityActivity가 있고, 이는 Intent를 통해 시작할 준비가 되어있습니다.
  • UnityProject : 표준 Android 애플리케이션에 통합될 Unity로 만든 간단한 데모 프로젝트입니다.

2. Android 플랫폼용 Gradle 프로젝트 생성하기

Unity Editor에서 UnityProject를 열어주세요!

① Build Settings로 이동

  • 어떻게? :
    Menu > File > Build Settings
  • Android Platform으로 Switch 해줍니다

② Player Settings로 이동

  • 어떻게? :
    Build Settings의 좌측 하단 Player Settings 버튼, 또는, Edit > Project Settings > 왼쪽의 Player
  • Other SettingsConfiguration 섹션에서 Target Architectures를 선택해줍니다

Q. 'Target Architectures'에서 ARMv7, ARM64, x86 (Chrome OS), x86-64 (Chrome OS)가 '모두' 활성화가 안 되어있고 몇 개만 선택이 가능하도록 뜬다면?

A. 'Scripting Backend'가 'Mono'로 설정되어있진 않은지 확인하고, 이를 'IL2CPP'로 변경해주세요. 그러면 모든 Target Architectures가 활성화되어 선택 가능해집니다.

Q. Target Architectures를 선택하는 기준은?
A. 웬만하면 모든 Architectures를 선택해주세요. 왜냐하면 어플리케이션을 디바이스 상에서 돌리려 할 때, 디바이스의 아키텍처와 맞지 않으면 build 자체가 안 되는 문제가 발생할 수 있어서 처음부터 다 포함해주는 게 낫습니다. 나중에 변경해주려면 export부터 다시 해야해요.
만약 아키텍처에 관해 잘 알고 계시고, 그래서 특정 아키텍처로 정말 타겟팅하고자 하는 상황이라면 해당 아키텍처만 골라서 export하는 게 당연히 문제되지 않습니다.

③ 다시 Build Settings로 이동

  • Export Project 옵션을 선택합니다 (※ '3-②' 단계와 이어집니다. 주의해주세요!)
  • Export 버튼을 누릅니다
  • 이때, androidBuild 폴더에 UnityProject를 export 해주세요

Q. 'Android SDK is outdated'라는 팝업이 떴습니다!

A. 저는 'Use Highest Installed'을 클릭했더니 별 문제 없이 해결되었습니다.

3. NativeAndroidApp에 Unity Library 모듈 추가해주기

이제부터는 아까 export 시킨 AndroidBuild/unityLibrary 모듈을 Android Studio의 NativeAndroidApp Gradle 프로젝트에 추가해주기 위한 작업을 해볼 예정입니다.

Android Studio에서 NativeAndroidApp를 열어주세요!

① settings.gradle 파일

  • '기본 앱' 모듈의 뒷부분에, unityLibrary 모듈을 가리키는 새 프로젝트를 추가해줍니다
include ':unityLibrary'
project(':unityLibrary').projectDir=new File('..\\UnityProject\\androidBuild\\unityLibrary')
  • dependencyResolutionManagement{repositories{ 블럭 내부에 다음 내용을 추가합니다
flatDir {
  dirs "${project(':unityLibrary').projectDir}/libs"
}

그 결과, settings.gradle 파일 :

② build.gradle(Module: NativeAndroidApp.app) 파일

  • dependencies{ 블럭 내부에 다음 내용을 추가합니다
implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])

  • android{defaultConfig{ndk{ 블럭 내부의 abiFilters가, 아까 '2-③' 단계에서 UnityProject를 export 시키기 직전에 선택했던 Export Project 옵션의 아키텍쳐(들)과 완전히 일치하는지 꼭 확인해주세요!
  • 만약 Unity에서는 'ARMv7 아키텍쳐'만 export 했었는데, abiFilters에는 'arm64-v8a'가 포함되어있다면, 어플리케이션은 ARM64 디바이스에서 crash 될 겁니다.
  • 참고) 유효한 abiFilters의 값들

③ NativeAndroidApp & UnityProject의 gradle.properties 파일

  • export 된 UnityProject의 gradle.properties 파일의 내용을 복사해서, NativeAndroidApp의 gradle.properties 파일에 붙여넣기 해주세요
    - 혹시 Unity 프로젝트를 업데이트하고 re-import 할 경우에는, export 시킨 프로젝트의 gradle.properties 파일 내용이 변경되지 않았는지 꼭 확인합니다. 변경된 경우, 이 단계를 반복합니다.

  • gradle 파일에 변경이 있다면 sync를 해주세요 (시간 좀 걸릴 수 있어요 기다려주세요~)

지금까지 모두 잘 따라왔다면, 다음과 같이 Android 뷰에 unityLibrary가 잘 추가되어있는 모습을 확인할 수 있습니다!

4. 프로젝트 완성!

빌드 & 실행(run) & 디버그 해봅시다!

아래는 앱 시연 영상입니다!







참고한 공식 문서 : https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md

profile
💻 (CSE) Computer Science and Engineering

0개의 댓글