Version: 2018.2
マネージド プラグイン
デスクトップ向けのプラグインをビルド

ネイテイブプラグイン

Unity は C++や C 言語で書かれたネイティブコードのライブラリをネイティブ プラグイン として幅広くサポートしています。プラグインはこれらのライブラリからあなたのゲームコード(JavaScript や C#で書かれた)の関数を呼び出すことを許可します。この機能によって Unity とミドルウェアライブラリや既存の C/ C++ゲームコードとを統合することができます。

ネイティブプラグインを使用するには、まず C ベースの言語の関数を記述する必要があり、必要な機能にアクセスし、ライブラリでそれらをコンパイルします。Unity では、C#スクリプトを作成する必要があり、ネイティブプラグイン内の関数を呼び出す事も必要です。

ネイティブプラグインは、C#のスクリプトから他のユーザスクリプトに公開してシンプルな C のインターフェースを提供する必要があります。Unity は一定のローレベル レンダリング イベントが発生したときに関数を呼び出す事が可能です。(例えば、グラフィック デバイスが作成された時)、詳細に関しては低レベルネイティブプラグインインターフェースを参照してください。

以下のような 1 つの機能を持つ非常に簡単なネイティブライブラリのソースコードの例があるとします。

    float FooPluginFunction () { return 5.0F; }

Unity 内からこのコードにアクセスするには、次のようなコードを使用できます。

    using UnityEngine;
        using System.Runtime.InteropServices;

        class SomeScript : MonoBehaviour {

           #if UNITY_IPHONE
   
           //  iOS では、プラグインは静的に実行ファイルに
           // リンクしているので、ライブラリ名として __Internal を
           // 使用しなければなりません。
           [DllImport ("__Internal")]

           #else

           // 他のプラットフォームでは、プラグインを動的に読み込んで
           // いるので、プラグインの名前を動的ライブラリに渡します。
           [DllImport ("PluginName")]
    
           #endif

           private static extern float FooPluginFunction ();

           void Awake () {
              // プラグイン内部で FooPluginFunction を呼び出します。
              //  5 をコンソールに表示します。
              print (FooPluginFunction ());
           }
        }

Javascript を使用しているとき、次の構文を使用する必要がある事に注意してください。この構文では、DLLName はあなたの書いた plugin の名前、あるいは、静的にリンクしたネイティブコードを書いている場合は “__Internal” です。

    @DllImport (DLLName)
        static private function FooPluginFunction () : float {};

ネイティブプラグインの作成

一般的には、プラグインは、ターゲットプラットフォーム上でネイティブコードコンパイラを使って構築されています。プラグインの関数は C 言語に基づいたコール·インタフェース(C-based call interface)を使用するので、C++や Objective-C を使用した場合はネーム・マングル(name mangling)の問題を避けなければなりません。

追加情報

マネージド プラグイン
デスクトップ向けのプラグインをビルド