이 페이지에서는 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.framework 파일을 생성합니다.Unity를 다른 Xcode 프로젝트에 통합하려면 Xcode 프로젝트(네이티브 Xcode 프로젝트와 Unity에서 생성하는 Xcode 프로젝트 모두)를 단일 Xcode 작업 공간에 결합하고, UnityFramework.framework 파일을 네이티브 Xcode 프로젝트에 대한 Application 타겟의 Embedded Binaries 섹션에 추가해야 합니다. 이렇게 하면 UnityFramework 클래스를 사용하여 Unity 런타임을 제어할 수 있습니다.
이 저장소는 Unity를 Xcode 프로젝트에 통합하는 방법을 설명하는 예시 프로젝트와 플러그인을 상세한 기술 자료와 함께 제공합니다.
UnityFramework.framework의 기본 클래스인 UnityFramework Objective-C 클래스의 인스턴스를 통해 Unity 런타임을 제어할 수 있습니다.
| 메서드 | 설명 |
|---|---|
+ (UnityFramework*)getInstance; |
인스턴스를 UnityFramework에 반환하는 싱글톤 클래스 메서드입니다. |
- (UnityAppController*)appController; |
UIApplicationDelegate의 UnityAppController 서브 클래스를 반환합니다. 네이티브 쪽의 루트 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 기능이 일부 사례에서 작동하지 않을 수 있습니다. 알려진 제한 사항은 다음과 같습니다.
UIStatusBarHidden 또는 UIViewControllerBasedStatusBarAppearance 키를 설정합니다.prefersStatusBarHidden을 설정하고 setNeedsStatusBarAppearanceUpdate 메서드를 호출합니다.childViewControllerForStatusBarHidden을 설정합니다.