Unity iOS 네이티브 플러그인 빌드 가이드
이 문서는 Unity에서 iOS 플랫폼용 네이티브 코드를 플러그인으로 구축하는 방법에 대해 설명합니다. 아래 단계에 따라 네이티브 플러그인을 생성하고 사용하는 방법을 알아보겠습니다.
네이티브 플러그인 빌드하기
iOS용 네이티브 플러그인을 빌드하려면 다음 단계를 따릅니다:
- 호출할 네이티브 함수에 대해 C# 파일에서
extern
메서드를 정의합니다.csharp [DllImport("__Internal")] private static extern float FooPluginFunction();
- Unity 프로젝트에 네이티브 코드 소스 파일을 추가합니다.
- 플러그인 인스펙터 창에서 플러그인 설정을 커스터마이즈합니다. 네이티브 코드가 iOS 전용인 경우, 플러그인이 iOS용으로만 활성화되어 있는지 확인합니다.
- C++ 또는 Objective-C++를 사용하여 플러그인을 구현하는 경우, 네임 맹글링 문제를 피하기 위해 C 링크를 사용하여 함수를 선언해야 합니다.
csharp extern "C" { float FooPluginFunction(); }
C#에서 플러그인 사용하기
- iOS 네이티브 플러그인은 실제 기기에 배포된 경우에만 호출할 수 있습니다. 따라서 모든 네이티브 코드 메서드는 추가 C# 코드 레이어로 래핑해야 합니다.
- 다음과 같이
#if
지시문을 사용하여 플랫폼별 코드를 구분합니다.csharp void MyMethod() { #if UNITY_IOS && !UNITY_EDITOR CallNativeMethodImplementation(); #else CallEditorMethodImplementation(); #endif }
네이티브 코드에서 C# 콜백
Unity iOS는 제한된 네이티브-매니지드 콜백 기능을 지원합니다. 아래 두 가지 방법 중 하나로 구현할 수 있습니다:
1. UnitySendMessage 사용
이 방법은 간단하지만 몇 가지 제한 사항이 있습니다:
GameObject
의 이름, 호출할 메서드, 전송할 메시지를 인자로 받습니다.csharp UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
- 호출할 메서드는
void MethodName(string message);
형식이어야 하며, 비동기적으로 1 프레임 지연 후 호출됩니다.
2. Delegate 사용
델리게이트를 사용하는 경우, C# 메서드는 정적이어야 하며 MonoPInvokeCallback
속성을 가져야 합니다. C# 코드는 다음과 같습니다:
delegate void MyFuncType();
[AOT.MonoPInvokeCallback(typeof(MyFuncType))]
static void MyFunction() { }
static extern void RegisterCallback(MyFuncType func);
C 코드에서는 다음과 같이 구현합니다:
typedef void (*MyFuncType)();
void RegisterCallback(MyFuncType func) {}
자동화된 플러그인 통합
Unity는 플러그인 인스펙터에서 iOS를 활성화하면 자동으로 플러그인을 통합합니다. 다음 파일 확장자를 가진 모든 파일을 복사합니다: .a, .m, .mm, .c, .cpp, .h
.
파일 경로 | 설명 |
---|---|
Assets/Plugins/iOS | iOS 전용 플러그인 파일 경로 |
참고: Xcode 프로젝트에 파일을 복사한 후, Unity 프로젝트의 파일과 연결되지 않으므로 Xcode에서 변경시 Unity에서 다시 복사해야 합니다.
iOS 성능 최적화 팁
- iOS에서 관리 코드에서 비관리 코드를 호출하는 것은 부하가 크므로 프레임당 여러 개의 네이티브 메서드 호출을 지양하세요.
- 네이티브 메서드의 반환값은 UTF-8로 인코딩되어야 하며, 모노 마셜링을 자유롭게 사용할 수 있습니다.
Bonjour 브라우저 샘플
Bonjour 브라우저 샘플을 통해 네이티브 코드 플러그인을 사용하는 예제를 다운로드할 수 있습니다. 이 애플리케이션은 간단한 Bonjour 클라이언트를 구현합니다.
파일명 | 설명 |
---|---|
Plugins\Bonjour.cs | 네이티브 코드에 대한 C# 인터페이스 |
BonjourTest.cs | 애플리케이션 로직을 구현하는 스크립트 |
Assets/Plugins/iOS | 네이티브 코드 파일 위치 |
이 문서가 Unity iOS 네이티브 플러그인 개발에 도움이 되길 바랍니다.