Optimizing Physics Performance
アプリケーションでの"アプリ内課金" の準備

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");

この関数は3つのパラメータを持っています:ターゲットになるGameObjectの名前,呼び出すメソッドの名前,メソッドに渡すメッセージ

既存の制限事項:

  1. 次の構文に対応するメソッドのみ,ネイティブコードから呼び出すことができます。: function MethodName(message:string)
  2. 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. ネイティブメソッドから返される文字列は,ヒープ領域から割り当てられUTF–8にエンコードされます。なお,文字列(strings)はMono側でリリースされるため,ネイティブコード側からfreeする必要はありません。
  4. 上記のように,プロジェクトが更新されるときそれが上書きされないので,XCodeプロジェクトの “Classes” フォルダは,ネイティブコードを保存する場所に適しています。
  5. ネイティブコードを保存するもう一つの良い場所は,Assetsフォルダまたはそのサブフォルダです。使用する場合は少しXCodeへの参照を加えます: “Classes” を右クリックし,“Add->Existing files…”を選択します。

サンプル

Bonjour Browserのサンプル

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

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

Optimizing Physics Performance
アプリケーションでの"アプリ内課金" の準備