Version: 2019.2
物理演算のパフォーマンス最適化
アプリケーションのアプリ内課金 (IAP) の設定

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

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

iOS 用のネイティブプラグインを使用したアプリケーションの作成

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

    [DllImport ("__Internal")]
    private static extern float FooPluginFunction();
    
  2. iOS のビルドターゲットにエディターを設定します。

  3. ネイティブコードのソースファイルを作成した Xcode プロジェクトの Classes フォルダー (プロジェクトが更新されても、このフォルダーは上書きされません。しかし、ネイティブコードのバックアップは忘れないように) に加えます。

C++ (.cpp) か Objective-C++ (.mm) を使用してプラグインを実装する場合、名前修飾 の問題を避けるために、関数を C リンケージで宣言する必要があります。

extern "C" {
  float FooPluginFunction();
}

C または Objective-C で書かれたプラグインは、名前修飾を使用しないため、これを使用する必要がありません。

C# からプラグインを使用する

iOS ネイティブプラグインは実際のデバイスに展開する時にのみ呼び出すことができるので、すべてのネイティブコードのメソッドを C# コードレイヤーでラップすることを推奨します。このコードは Application.platform をチェックして、アプリケーションがデバイス上で実行中のときのみネイティブメソッドを呼び出します。また、エディター上で実行しているときは、ダミーの値を返します。例に挙げた Bonjour Browser のサンプルコードを参照してください。

ネイティブコードから C# をコールバックする

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

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

この関数は 3 つのパラメーターを持っています。ターゲットであるゲームオブジェクト の名前、そのオブジェクトに対して呼び出すスクリプトメソッド、呼び出されたメソッドに渡すメッセージの文字列です。

以下は既知の制限です。

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

自動的なプラグイン統合

Unity iOS は、制限された方法内で自動的なプラグイン統合をサポートします。Assets\Plugins\iOS フォルダーに置かれた .a.m.mm.c.cpp 拡張子を持つすべてのファイルは、生成された Xcode に自動的に統合されます。ただし、統合は Assets\Plugins\iOS から統合先へのシンボリックリンクによって行われます。これは、ワークフローの一部に影響を与える場合があります。.h ファイルは Xcode プロジェクトツリーに含まれていませんが、統合先のファイルシステムに表示されます。そのため、 .m/.mm/.c/.cpp ファイルのコンパイルが可能です。

iOS ヒント

  1. マネージコードからアンマネージコードへの呼び出しは、iOS 上では高負荷です。フレームごとに複数のネイティブメソッドを呼び出さないでください。
  2. 前に述べたように、追加の C# レイヤーでネイティブメソッドをラップします。この C# レイヤーはデバイス上でネイティブコードを呼び出し、エディターでダミーの値を返します。
  3. ネイティブメソッドから返される文字列値は UTF–8 でエンコードされ、ヒープに割り当てられる必要があります。Mono マーシャリングは、このような文字列に対して free を呼び出します。
  4. 前に述べたように、Xcode プロジェクトの Classes フォルダーは、プロジェクトが更新されても上書きされないため、ネイティブコードを保存するのに適した場所です。
  5. ネイティブコードを格納するためのもう 1 つの良い場所は、Assets フォルダーまたはそのサブフォルダーです。Xcode プロジェクトからネイティブコードファイルへの参照を追加するだけです。Classes サブフォルダーを右クリックして Add > Existing files の順に選択します。

Bonjour Browser のサンプル

ネイティブコードプラグインの簡単な使用例は、こちら からダウンロードしてください。

このサンプルは、Unity iOS アプリケーションから Objective-C コードを呼び出す方法を示しています。このアプリケーションは非常に単純な Bonjour クライアントを実装しています。 アプリケーションは Unity iOS プロジェクト (Plugins\Bonjour.cs はネイティブコードへの C# インターフェースで、一方、BonjourTest.cs はアプリケーションロジックを実装するスクリプト) と、ビルドされた Xcode プロジェクトに加える必要があるネイティブコード (Assets\Code) から構成されています。

物理演算のパフォーマンス最適化
アプリケーションのアプリ内課金 (IAP) の設定