Version: 2020.1
언어: 한국어
iOS
iOS 개발 시작

Unity를 네이티브 iOS 애플리케이션에 통합

이 페이지에서는 Unity as a Library 기능을 사용하여 Unity 런타임 라이브러리를 iOS 네이티브 애플리케이션에 통합하는 방법을 설명합니다.

이 기능을 통해 3D/2D 실시간 렌더링, AR 경험, 3D 모델 상호작용, 2D 미니 게임 등과 같은 Unity 지원 기능을 네이티브 애플리케이션에 포함할 수 있습니다. Unity 런타임 라이브러리는 네이티브 애플리케이션 내에서 콘텐츠를 로드, 활성화 및 언로드하는 시기와 방법을 관리하는 컨트롤을 제공합니다.

작동 방식

iOS용 Unity as a Library를 사용하려면 먼저 Unity에서 평상시처럼 Xcode 프로젝트를 빌드해야 합니다. 자세한 내용은 iOS용 빌드 설정을 참조하십시오.

모든 Unity iOS Xcode 프로젝트의 구조는 다음과 같습니다.

  • 소스, 플러그인, 종속성 프레임워크를 포함하는 UnityFramework 타겟의 라이브러리 파트입니다. 또한 UnityFramework.framework 파일을 생성합니다.
  • 앱 표현 데이터를 포함하고 라이브러리를 실행하는 Unity-iPhone 타겟의 씬 런처 파트입니다. Unity-iPhone 타겟에는 UnityFramework 타겟에 대한 단일 종속성이 있습니다.

Unity를 다른 Xcode 프로젝트에 통합하려면 Xcode 프로젝트(네이티브 Xcode 프로젝트와 Unity에서 생성하는 Xcode 프로젝트 모두)를 단일 Xcode 작업 공간에 결합하고, UnityFramework.framework 파일을 네이티브 Xcode 프로젝트에 대한 Application 타겟의 Embedded Binaries 섹션에 추가해야 합니다. 이렇게 하면 UnityFramework 클래스를 사용하여 Unity 런타임을 제어할 수 있습니다.

저장소는 Unity를 Xcode 프로젝트에 통합하는 방법을 설명하는 예제 프로젝트와 플러그인을 상세한 문서와 함께 제공합니다.

UnityFramework 클래스

UnityFramework.framework 의 기본 클래스인 UnityFramework Objective-C 클래스의 인스턴스를 통해 Unity 런타임을 제어할 수 있습니다.

메서드 설명
+ (UnityFramework*)getInstance; 인스턴스를 UnityFramework에 반환하는 싱글톤 클래스 메서드입니다.
- (UnityAppController*)appController; UIApplicationDelegateUnityAppController 서브 클래스를 반환합니다. 이는 네이티브 측에 있는 루트 Unity 클래스이며, 앱의 뷰 관련 오브젝트(예: UIView, UIViewControllers, CADisplayLink 또는 DisplayConnection)에 액세스할 수 있습니다.
- (void)setDataBundleId:(const char*)bundleId; Unity 런타임이 Data 폴더를 찾아야 하는 번들을 설정합니다. 자세한 내용은 Data 폴더 문서를 참조하십시오. runUIApplicationMainWithArgc 또는 runEmbeddedWithArgc를 호출하기 전에 이 메서드를 호출하십시오.
- (void)runUIApplicationMainWithArgc:(int)argc argv:(char*[])argv; 다른 뷰가 없는 메인 메서드에서 Unity를 실행하는 기본 방법입니다.
- (void)runEmbeddedWithArgc:(int)argc argv:(char*[])argv appLaunchOpts:(NSDictionary*)appLaunchOpts; 다른 뷰가 있을 때 Unity를 실행해야 하는 경우 이 메서드를 호출하십시오.
- (void)unloadApplication; 이 메서드를 호출하면 Unity를 언로드하고, 언로드가 완료된 후 UnityFrameworkListener에 대한 콜백을 수신할 수 있습니다. Unity는 차지하고 있는 대부분의 메모리를 해제합니다(전부는 아님). Unity를 다시 실행할 수 있습니다.
- (void)registerFrameworkListener:(id<UnityFrameworkListener>)obj; UnityFramework 라이프사이클 관련 이벤트의 콜백을 수신하는 리스너 오브젝트를 등록합니다.
- (void)unregisterFrameworkListener:(id<UnityFrameworkListener>)obj; 리스너 오브젝트를 등록 해제합니다.
- (void)showUnityWindow; 비 Unity 뷰가 표시되는 동안 이 메서드를 호출하면 이미 실행 중인 Unity 뷰도 표시됩니다.
- (void)pause:(bool)pause; Unity를 일시정지합니다.
- (void)setExecuteHeader:(const MachHeader*)header; Unity를 실행하기 전에 이 메서드를 호출해야 CrashReporter가 제대로 동작합니다.
- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; 이 메서드는 UnitySendMessage의 프록시입니다. 이름을 기준으로 게임 오브젝트를 찾고, 단일 문자열 메시지 파라미터를 사용하여 functionName을 호출합니다.
(void)quitApplication:(int)exitCode; 이 메서드를 호출하면 Unity를 완전히 언로드하고, Unity가 종료될 때 UnityFrameworkListener에 대한 콜백을 수신합니다. Unity는 모든 메모리를 해제합니다.

참고: 이 호출 이후에는 동일한 프로세스로 Unity를 다시 실행할 수 없습니다. AppController에 대해 quitHandler를 설정하여 기본 프로세스 종료를 오버라이드할 수 있습니다.

제한 사항

Unity는 런타임 라이프사이클을 제어하지 않으므로 Unity as a Library 기능이 일부 사례에서 동작하지 않을 수 있습니다. 알려진 제한 사항은 다음과 같습니다.

  • Unity as a Library는 전체화면 렌더링만 지원하며, 화면 일부의 렌더링은 지원하지 않습니다.
  • 두 개 이상의 Unity 런타임 인스턴스를 로드할 수 없습니다.
  • Unity 런타임에서 동작하도록 만들기 위해 타사 플러그인(네이티브관리되는 플러그인 모두)을 조정해야 할 수 있습니다.

  • 2019.3에서 iOS용 ‘Unity as a Library’ 기능 추가됨NewIn20193
iOS
iOS 개발 시작