このページは Native Code Plugins のiOSプラットフォーム版について説明します。
[DllImport ("__Internal")]
private static extern float FooPluginFunction();
もしC++(.cpp)もしくはObjective-C++(.mm)を使用してプラグインを実装している場合, Name Mangling の問題を避けるため,Cリンケージ(C linkage)で宣言されている事を確認する必要があります。
extern "C" {
float FooPluginFunction();
}
C または Objective-C で書かれたプラグインは,言語で Name Mangling を使用しないため,これを使用する必要がありません。
ネイティブプラグインは実際のデバイス展開時にのみ呼び出すことができるので,全てのネイティブプラグインはC#コードレイヤーでメソッドをラップすることをお勧めします。このコードはApplication.platformでデバイス上で動作しているか確認し,動作中のときのみネイティブメソッドを呼び出します。また,エディター上で動作しているときダミーの値を返すことができます。例えば,Bonjour browserのサンプルコードを参照してください。
Unity iOSは,“UnitySendMessage” を媒介に,限定的なネイティブからマネージコードへのコールバック(native-to-managed callback)をサポートしています:
UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
この関数は3つのパラメータを持っています:ターゲットになるGameObjectの名前,呼び出すメソッドの名前,メソッドに渡すメッセージ
既存の制限事項:
function MethodName(message:string)
Unityは自動化されたプラグインの統合をサポートしています。 Assets/Plugins/iOSに配置した .a , .m , .mm , .c , .cpp の拡張子を持つ全てのファイルは,自動的にXcodeプロジェクトにマージされます。しかし,マージは最終的にはシンボリックリンクファイル(symlinking files)によって行われます。これは一部のワークフローに影響を与える可能性があります。.h ファイルはXcodeのプロジェクトツリーに含まれません。しかし,コピー先のファイルシステムには表示されるので, .m/.mm/.c/.cppファイルのコンパイルを可能にします。
注意: サブフォルダは現在サポートされていません
ネイティブコードプラグインの簡単な使用例は, ここ を探してください。
このサンプルでは,UnityのiOSアプリケーションからObjective-Cのコードを呼び出す方法を示します。このアプリケーションは非常に簡単なBonjourのクライアントを実装しています。 アプリケーションは,Unity iOSのプロジェクト及びネイティブコードで構成されています。それはビルドしたXCodeプロジェクトに追加する必要があります。 アプリケーションはUnity iOSプロジェクト(Plugins/Bonjour.csはネイティブコードのC#インターフェースです。BonjourTest.jsはアプリケーションロジックを実装するJSスクリプトです。)とネイティブコード(Assets/Code)で構成されています。 そしてそれらをビルドしてXcodeプロジェクトへ追加します。