Optimizing Physics Performance
응용 프로그램에서의 "어플리케이션 내 과금(In App Purchases)" 준비

iOS 용 플러그인 빌드

이 페이지는 Native Code Plugins의 iOS 플랫폼 버전에 대해 설명합니다.

iOS 용 네이티브 플러그인을 사용한 응용 프로그램 만들기

  1. 다음과 같이 C# 파일에서 extern 메소드를 정의합니다 :
[DllImport ("__Internal")]
private static extern float FooPluginFunction();
  1. iOS 빌드 타겟 에디터를 설정
  2. 생성된 Xcode 프로젝트의 “Classes” 폴더에 당신의 네이티브 코드의 소스 파일을 추가합니다 (이 폴더에는 프로젝트가 업데이트됐을 때 덮어 쓰지 않지만, 당신의 네이티브 코드를 백업하는 것을 잊지 마십시오).

만약 C++(.cpp) 혹은 Objective-C++(.mm)를 사용하여 플러그인을 구현하는 경우, Name Mangling 문제를 피하기 위해 C 링키지(C linkage)으로 선언되어 있는지 확인해야 합니다.

extern "C" {
  float FooPluginFunction();
}

C 또는 Objective-C로 작성된 플러그인은, Name Mangling을 사용하지 않기 때문에 이것을 사용할 필요가 없습니다.

C#에서 플러그인을 사용

네이티브 플러그인은 실제 장치 배포 중에만 호출할 수 있으므로, 모든 네이티브 플러그인은 C# 코드 레이어에서 메소드를 래핑하는 것이 좋습니다. 이 코드는 Application.platform 장치에서 작동하고 있는지 확인하고, 실행중인 경우에만 네이티브 메소드를 호출합니다. 또한 에디터에서 작동할 때 더미 값을 반환할 수 있습니다. 예를 들어, Bonjour browser의 샘플 코드를 참조하십시오.

네이티브 코드에서 C#/JavaScript를 콜백

Unity iOS는 “UnitySendMessage”를 통해 제한된 네이티브에서 관리 코드로의 콜백(native-to-managed callback)을 지원합니다 :

UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");

이 함수는 세 개의 파라미터를 가지고 있습니다 : 대상이 될 GameObject의 이름, 호출할 메소드의 이름, 메소드에 전달할 메시지

알려진 제한 사항 :

1 다음 구문에 해당하는 메소드만 네이티브 코드에서 호출할 수 있습니다. function MethodName(message:string) 1. UnitySendMessage은 비동기이고, 1 프레임의 지연을 가지고 있습니다.

플러그인 통합의 자동화

Unity는 자동화된 플러그인의 통합을 지원하고 있습니다. Assets/Plugins/iOS에 배치한 .a, .m, .mm, .c, .cpp 확장자를 가진 모든 파일은 자동으로 Xcode 프로젝트에 병합됩니다. 그러나 병합은 최종적으로는 심볼릭 링크 파일(symlinking files)에 의해 이루어집니다. 이것은 일부 워크 플로우에 영향을 미칠 수 있습니다. .h 파일은 Xcode 프로젝트 트리에 포함되지 않습니다. 그러나 대상 파일 시스템에 표시되므로 .m/.mm/.c/.cpp 파일의 컴파일을 가능하게 합니다.

참고: 서브 폴더는 현재 지원되지 않습니다.

iOS Tips

  1. 관리 코드에서 비관리 코드 호출은 iOS에서 부하가 높습니다. 프레임마다 여러 개의 네이티브 메서드를 호출하지 마십시오.
  2. 앞에서 언급했듯이, 장치에서 네이티브 코드를 호출하여, 에디터에서 더미 값을 반환하는 네이티브 메서드를 추가 C# 레이어와 래핑 합니다.
  3. 네이티브 메소드로부터 반환되는 문자열은 힙(Heap)에서 할당되어 UTF–8로 인코딩됩니다. 또한 문자열(strings)은 Mono 측에서 릴리즈되기 때문에 네이티브 코드 측에서 free 할 필요가 없습니다.
  4. 위와 같이 프로젝트가 업데이트 될 때 그것이 덮어 써지지 않기 때문에 XCode 프로젝트의 “Classes”폴더는 네이티브 코드를 저장하는 장소에 적합합니다.
  5. 네이티브 코드를 저장하는 또 다른 좋은 장소는 Assets 폴더 또는 그 하위 폴더입니다. Xcode프로젝트에서 native code 파일로 참조를 추가 합니다 : “Classes”를 오른쪽 클릭하고 “Add-> Existing files …”를 선택합니다.

샘플

Bonjour Browser 샘플

네이티브 코드 플러그인의 간단한 예제는 여기를 찾아보십시오.

이 샘플은 어떻게 objective-C code가 호출 될 수 있는지 보여줍니다. 이 샘플에서는 Unity의 iOS 응용 프로그램에서 Objective-C 코드를 호출하는 방법을 보여줍니다. 이 애플리케이션은 매우 간단한 Bonjour 클라이언트를 구현하고 있습니다. 응용 프로그램은 Unity iOS 프로젝트(Plugins/Bonjour.cs는 네이티브 코드 C# 인터페이스입니다. BonjourTest.js는 응용 프로그램 논리를 구현하는 JS 스크립트입니다.)와 네이티브 코드(Assets / Code)로 구성되어 있습니다. Xcode 프로젝트에 추가 되어야 합니다.

Optimizing Physics Performance
응용 프로그램에서의 "어플리케이션 내 과금(In App Purchases)" 준비