物理演算のパフォーマンス最適化
Preparing your application for In-App Purchases (IAP)

iOS 用のプラグインをビルド

このページは プラグイン の iOS プラットフォーム版について説明します。

Building an application with a native plugin for iOS

  1. 以下のように C #ファイルで extern メソッドを定義します。

    [DllImport ("__Internal")]
    private static extern float FooPluginFunction();
    
  2. Set the editor to the iOS build target.

  3. Add your native code source files to the generated Xcode project’s Classes folder (this folder is not overwritten when the project is updated, but don’t forget to backup your native code).

もし 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 のサンプルコードを参照してください。

Calling C# back from native code

Unity iOS は、“UnitySendMessage” を媒介に、限定的なネイティブからマネージコードへのコールバック( native-to-managed callback )をサポートしています:

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

This function has three parameters: the name of the target GameObject, the script method to call on that object and the message string to pass to the called method.

以下の制限が知られています。

  1. 次のシグネチャに対応するメソッドのみ、ネイティブコードから呼び出すことができます。 function MethodName(message:string)
  2. UnitySendMessage への呼び出しは非同期であり、1 フレーム遅延します。

プラグイン統合の自動化

Unity iOS supports automated plugin integration in a limited way. All files with extensions .a,.m,.mm,.c,.cpp located in the Assets\Plugins\iOS folder will be merged into the generated Xcode project automatically. However, merging is done by symlinking files from Assets\Plugins\iOS to the final destination, which might affect some workflows. The .h files are not included in the Xcode project tree, but they appear on the destination file system, thus allowing compilation of .m/.mm/.c/.cpp files.

Note: Subfolders are currently not supported.

iOS Tips

  1. マネージコードからアンマネージコードの呼び出しは、iOS 上では高負荷です。フレームごとに複数のネイティブプラグインを呼び出さないでください。
  2. 前述のように、デバイス上でネイティブコードを呼び出し、エディターでダミーの値を返す C# のレイヤーをネイティブプラグインのラップに追加します。
  3. String values returned from a native method should be UTF–8 encoded and allocated on the heap. Mono marshalling calls are free for strings like this.
  4. As mentioned above, the Xcode project’s Classes folder is a good place to store your native code because it is not overwritten when the project is updated.
  5. Another good place for storing native code is the Assets folder or one of its subfolders. Just add references from the Xcode project to the native code files: right click on the Classes subfolder and choose Add > Existing files.

Bonjour Browser のサンプル

ネイティブコードプラグインの簡単な使用例は、ここ を探してください。

This sample demonstrates how objective-C code can be invoked from a Unity iOS application. This application implements a very simple Bonjour client. The application consists of a Unity iOS project (Plugins\Bonjour.cs is the C# interface to the native code, while BonjourTest.cs is the script that implements the application logic) and native code (Assets\Code) that should be added to the built Xcode project.


物理演算のパフォーマンス最適化
Preparing your application for In-App Purchases (IAP)