본문 바로가기

Flutter

Flutter + ARFoundation 기본세팅 (Windows)

· 세팅환경

- Unity 2019.3.0fb

- Android SDK 30.0
- Android Studio 4.0 
- Flutter 1.17.3
- Dart 2.8.4

안드로이드 스튜디오는 이미 설정이 되었다고 가정하고, 안드로이드 스튜디오에 flutter를 사용하여 Unity ARFoundation을 위젯 형식으로 사용하는 방법을 설명하고자 한다. 만약 안드로이드 스튜디어 설정이 되어있지 않다면 다음 게시글을 참조.


· Flutter + Unity

https://github.com/snowballdigital/flutter-unity-view-widget

먼저 Flutter와 ARFoundation을 연결하기 전에, Flutter에서 Unity 씬을 위젯형식으로 불러보도록 하자. 위의 링크를 통해 예제를 받아볼 수 있다. 세팅 방법이 자세하게 적혀져 있지만, 정리차원하는 차원에서 다시 설명하도록 하겠다. 전반적인 세팅 방법을 설명하고 있는 동영상도 있으니 참조.

 

1) 예제 다운로드

먼저 위의 예제를 다운받고 압축을 풀어주도록 하자. 다운 받은 예제의 example폴더에 Unity 프로젝트 파일과 Android 파일이 모두 들어있다. 따라서 example 폴더의 unity 폴더는 유니티로 열어주고 example 폴더는 안드로이드 스튜디오로 열어주자. 

 

2) flutter doctor

시작하기 전에 플러터 개발 환경 구성이 잘 되어있는지 검사 해보도록 하자. 안드로이드 스튜디오 터미널에서 다음 명령어를 사용하여 환경 구성이 조성되었는지 확인해보자. 

안드로이드 스튜디오 하단의 Terminal을 이용한다.

환경 구성이 잘 되어있다면 다음과 같은 결과를 볼 수 있다. 플러터와 안드로이드 SDK 버전과 안드로이드 스튜디오 버전을 확인할 수 있고 마지막으로 연결된 디바이스나 에뮬레이터가 있는지를 확인해준다. 본 포스팅은 에뮬레이터를 사용하지 않고 디바이스를 직접연결하여 진행되었다. 

 

3) Unity Export

전반적인 구성 방식은 Unity의 씬을 .jar 형식의 플러그인으로 export하여 이를 안드로이드 스튜디오에서 위젯형식으로 넣는 방식이다. 따라서 우리는 불러오고자 하는 유니티 씬을 export 해주어야하는데, 그 전에 안드로이드 스튜디오에 맞게 렌더 세팅을 해주어야 한다.

(1) 플랫폼을 Android로 바꾸기

(2) 렌더 세팅 

- Graphics API : Vulkan을 삭제하고 OpenGLES3, OpenGLES2를 추가

- Scripting Backend : IL2CPP로 변경

- Target Architectures : ARMv7, ARM64 체크 (x86은 Unity 2019.2+ 이상에서는 지원 중단)

 

다음 세팅이 설정되지 않으면 export가 성공하여도 안드로이드 빌드시 문제가 생기기 때문에 꼭 확인해야한다!

 

(3) Unity Flutter Export

위의 세팅이 완료 되었다면 Unity 상단의 Flutter 탭을 사용하여 Export 해준다.

Unity 2019.3 이상의 버전은 Export Android (Unity 2019.3.*)을 이용해 Export 해준다.

 

4) .jar을 안드로이드 스튜디오에 추가

Unity에서 Export가 완료되면 example 파일에 UnityExport 폴더가 새로 생성되고 UnityExport/libs에  .jar 파일이 생성된다. 이 .jar 파일을 라이브러리로 추가한뒤 unity-classes 폴더에 넣어준다. 예제파일에서는 이미 unity-classes 폴더에 같은 이름의 .jar 파일이 있으므로 overwrite 할것인지 물어보는 알림이 뜬다 이때 승인해주면 된다.

생성된 .jar 파일
다음과 같이 라이브러리 추가해준다

5) setting.gradle

마지막으로 추가한 파일을 읽을수 있게 UnityExport/setting.gradle 에서 경로를 추가해주면 된다. 아래 코드를 다음과 같이 추가해 주자.

include ":UnityExport"
project(":UnityExport").projectDir = file("./UnityExport")

6) flutter run

이제 빌드하여 실행시켜보자. 안드로이드 터미널에서 flutter run 하여 실행시킬 수 있다.


· Flutter + Unity ARFoundation

https://github.com/juicycleff/flutter-unity-arkit-demo

앞서 살펴보았던 예제를 응용하여 ARFoundation을 위젯형식으로 불러오는 예제이다. 유니티 내에서 Export 하는 렌더 세팅을 위와 같으니 설명하지 않도록 하겠다. 하지만 ARFoundation을 사용하는 경우 .jar 파일 뿐만아니라 .aar 파일도 같이 생성되는데 이에 대한 경로 설정을 해주어야 하므로 이를 설명하고 포스팅을 마치도록 하겠다.

 

1) Unity Export

위와 같은 환경으로 export 해준다.

 

2) 경로설정

export를 무사히 마쳤다면 UnityExport/libs 폴더에 다음과 같이 .jar 과 .aar 파일이 생성된다. 이때 .jar 파일은 라이브러리 추가한뒤 위의 설정처럼 unity-classes 폴더에 overwrite 해주면된다. 또한 위의 설정처럼 UnityExport/setting.gradle 파일을 수정해 주어야 한다.

 

하지만 문제는 .aar 파일이다. 나의 경우, 종속성문제인지 예제 파일에서 .aar 파일을 못 읽어오는 문제가 있어서 다음과 같이 UnityExport/build.gradle 파일을 수정해 주었다.

dependencies {
    implementation project(':unity-classes')
    implementation(name: 'arcore_client', ext:'aar')
    implementation(name: 'ARPresto', ext:'aar')
    implementation(name: 'unityandroidpermissions', ext:'aar')
    implementation(name: 'UnityARCore', ext:'aar')
}

와 같이 작성되었던 것을

dependencies {
    implementation project(':unity-classes')
    implementation files ("arcore_client.aar")
    implementation files ("ARPresto.aar")
    implementation files ("unityandroidpermissions.aar")
    implementation files ("UnityARCore.aar")
}

다음과 같이 수정해 주었다.

 

3) SDK 버전 설정

이렇게 경로 설정을 해주어서 파일을 읽어왔지만 다음과 같은 에러가 발생했다. 

Unity에서 Export시에 최소 SDK 버전을 24로 설정해 놓았는데 (ARFoundation의 최소 요구 SDK 버전이 24이다) 이와 맞지않아 생긴 문제인것 같다. 따라서 UnityExport/setting.gradle 파일을 다음과 같이 수정해 주었다.

android {
    ...

    defaultConfig {
        minSdkVersion 24
        targetSdkVersion 28
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
        versionCode 1
        versionName '0.1'
        consumerProguardFiles 'proguard-unity.txt'
    }

    ...
}

 

4) flutter run

안드로이드 스튜디오 터미널을 이용하여 flutter run 하여 빌드 후 실행 시켜보면 잘 돌아가는 것을 확인할 수 있다. 

'Flutter' 카테고리의 다른 글

Flutter Swiper  (0) 2020.07.21
Flutter 기본 Widget 구현  (0) 2020.07.17
Flutter 기본예제  (0) 2020.07.15
Flutter + Unity(IOS)  (0) 2020.06.19
Flutter 설치 (MAC)  (0) 2020.06.18