Unity as a Library(UAAL)를 활용한 네이티브 모바일 앱 통합 가이드

🤖 AI 추천

Unity로 개발한 기능을 기존 Android 및 iOS 네이티브 앱에 통합하려는 모바일 개발자, 게임 개발자와 네이티브 앱 개발자 간의 협업을 진행하는 개발 리드, 또는 새로운 아키텍처 도입을 고려하는 소프트웨어 아키텍트에게 이 콘텐츠를 추천합니다.

🔖 주요 키워드

Unity as a Library(UAAL)를 활용한 네이티브 모바일 앱 통합 가이드

핵심 기술

Unity as a Library(UAAL) 방식을 활용하여 Unity로 개발한 앱을 기존 Android 및 iOS 네이티브 프로젝트에 통합하는 방법을 상세히 안내합니다. 이를 통해 Unity 엔진의 기능을 네이티브 앱 환경에서 직접 구동할 수 있습니다.

기술적 세부사항

  • Unity 버전: 6.2
  • 개발 환경: Xcode 16.4, Android Studio 2025.1.3
  • 최소 OS 요구사항: iOS 15, Android API 29 (Android 10.0)
  • Android 통합:
    • Unity 프로젝트를 Android Library (AAR) 형태로 Export합니다.
    • unityLibrary/manifests/AndroidManifest.xml에서 중복 앱 아이콘 생성 방지를 위해 관련 설정을 제거합니다.
    • unityLibrary 모듈을 Assemble하여 unityLibrary-xxx.aar 파일을 생성합니다.
    • 생성된 AAR 파일을 네이티브 Android 프로젝트의 libs 폴더에 추가하고, Project Structure에서 Dependency로 등록합니다.
    • UnityPlayerGameActivity 사용 시 games-activity 라이브러리 의존성을 추가합니다.
    • XML 또는 Jetpack Compose UI에서 startActivity를 사용하여 Unity 콘텐츠를 호출하는 방법을 설명합니다.
    • Jetpack Compose 사용 시 appcompat 라이브러리 추가가 필요함을 명시합니다.
  • iOS 통합:
    • Unity 프로젝트를 iOS Framework (UnityFramework.framework) 형태로 빌드합니다.
    • UnityFramework.framework 내 Data 폴더를 Framework에 포함하도록 Target Membership을 설정합니다.
    • Unity-iPhone Scheme을 UnityFramework로 변경하여 빌드합니다.
    • 네이티브 Xcode 프로젝트에 UnityFramework.framework를 추가하고, 'Frameworks, Libraries, and Embedded Content'에서 'Embed & Sign'으로 설정합니다.
    • 'Build Phases'의 'Copy Bundle Resources'에 Data 폴더를 추가합니다.
    • UnityFramework를 동적으로 로드하고 runEmbedded 메서드를 호출하여 Unity 콘텐츠를 렌더링하는 Swift 코드를 제시합니다.
    • UnityManager 싱글턴 클래스를 통해 Unity 로딩을 간소화합니다.
  • iOS 빌드 시 주의사항: Target SDK를 Device만 지원하거나 Simulator만 지원하도록 선택해야 하며, 일반적으로 Device SDK를 선택합니다.

개발 임팩트

  • 기존 네이티브 앱에 Unity로 구현된 풍부한 3D 그래픽, 게임 로직, 인터랙티브 콘텐츠를 손쉽게 통합할 수 있습니다.
  • 모듈화된 AAR 파일 및 Framework 배포를 통해 재사용성과 유지보수성을 높일 수 있습니다.
  • 크로스 플랫폼 개발의 복잡성을 줄이고, 각 플랫폼에 최적화된 기능을 활용하는 하이브리드 아키텍처 구축에 기여합니다.

커뮤니티 반응

  • 자료가 많지 않아 마이너한 개발 파트로 언급됩니다.
  • SDK 배포 시 용량 이슈로 Moven, SwiftManager 활용에 제약이 있을 수 있습니다.
  • iOS의 경우, 시뮬레이터 지원 불가 이슈 및 Gamma Color Space 의존성 문제가 제기될 수 있습니다.
  • UnityFramework를 XCFramework로 만들면 시뮬레이터 지원 문제를 해결할 수 있으나, 난이도가 높다고 언급됩니다.

📚 관련 자료