Version: 2017.1
物理演算のパフォーマンス最適化
アプリケーションでの"アプリ内課金" の準備

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

このページは プラグイン の 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 iOS は自動化されたプラグインの統合を制限された範囲でサポートしています。Assets/Plugins/iOS__に配置した .a,.m,.mm,.c,.cpp__ の拡張子を持つすべてのファイルは、自動的に Xcode プロジェクトにマージされます。ただし、マージは最終的には Assets/Plugins/iOS からのシンボリックリンクファイル(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 プロジェクトへ追加します。

物理演算のパフォーマンス最適化
アプリケーションでの"アプリ内課金" の準備