You cannot use Windows Store Apps specific plugins in Unity Editor if you use Windows Runtime APIs (http://msdn.microsoft.com/en-us/library/windows/apps/br211377.aspx), so we changed a bit how Unity Editor handles them. If you intend to use the plugin only for Windows Store Apps and not in Unity editor, you can skip making a placeholder. If you do this, you need to wrap the code which uses the plugin API with the following:
# if !UNITY_EDITOR
// プラグインコード
# endif
プレースホルダーが必要な場合は、2種類のプラグインを作ります。
重要 Unity エディターのプレースホルダープラグインは、UnityEditor.dll を参照できません。そうでない場合は、以下のエラーが表示されます。
The Assembly UnityEditor is referenced by Plugin ('Assets/Plugins/Plugin.dll'). But the dll is not allowed to be included or could not be found.
どちらも同じ名前と同じアセンブリバージョンでなければなりません。例えば、エディターに対応したプラグインは Assets\Plugins\MyPlugin.dll に配置し、Windows ストアアプリ専用プラグインは Assets\Plugins\WSA\MyPlugin.dll に配置します。
Assets\Plugins\MyPlugin.dll に行き、互換性のある唯一のプラットフォームであるエディターを選択します
Assets\Plugins\WSA\MyPlugin.dll に行き、互換性のある唯一のプラットフォームである Windows ストアアプリを選択し、Windows ストアアプリプラグイン設定へ行きます
Pick ‘Assets\Plugins\MyPlugin.dll’ in the placeholder field, this means that when building to Windows Store apps ‘Assets\Plugins\MyPlugin.dll’ will be used when compiling your scripts, but ‘Assets\Plugins\WSA\MyPlugin.dll’ will be copied to final folder instead of ‘Assets\Plugins\MyPlugin.dll’. This achieves two things - Unity Editor will successfully compile your scripts, but during the game you’ll be using API from Windows Store Apps specific plugin.
Don’t process オプション
このオプションは Unity にアセンブリのパッチを行ってほしくない場合に使用します。通常このオプションはプラグインが多量の Windows Runtime API を使用していたり、Unity がパッチに失敗するような場合に適用します。
プロパティー | 機能 |
---|---|
SDK | Windows ストアアプリへのプラグインのビルドを SDK 8.0 や SDK 8.1 に制限する |
CPU | プラグインを 32 bit、64 bit あるいは ARM プレイヤーで制限する。 |
Don’t process | (マネージド アセンブリのみに適用) このアセンブリへのパッチを無効にします。パッチはアセンブリが Unity によってシリアライズ可能なクラスを含む場合に必要です。このケースでは、追加の IL コードがアセンブリに注入されます。もしアセンブリがそういったクラスを持たないとわかっている場合、パッチを無効にしても安全です。注意: もしアセンブリにパッチが適用されてない状態で Unity が実行時にシリアライズを試みた場合は、‘Out of bounds’ エラーかそれに近いエラーが発生します。 |
Placeholder | (マネージド アセンブリのみに適用) Windows ストアアプリ でも .NET コアでコンパイルしたプラグインが持てます。Unity エディターは Mono 上で動作するため、それらのアセンブリは認識できません。その結果、C# や JS ファイルからそれらを参照することはできなくなります。これを解消するには、本来のプラグインではプレースホルダとして動作させためにまったく同じ API を .NET 3.5 でコンパイルしたアセンブリが必要です。 |
例えば、次のような二つのアセンブリがあるとします。
Plugins\WSA\MyPlugin.dll - Windows Runtime API を内部で使用している .NET コアでコンパイルされたアセンブリ。
Plugins\MyPlugin.dll - まったく同一の public API でダミーの関数を実装し .NET 3.5 でコンパイルしたアセンブリ。
Plugins\WSA\MyPlugin.dllをクリックし、Placeholder から Plugins\MyPlugin.dll を選択します。
この方法は Plugins\MyPlugin.dll を参照するスクリプトを Unity がコンパイルする際に用いますが、Unity が最終的にプラグインをディレクトリーにコピーする際には Plugins\WSA\MyPlugin.dll が Plugins\MyPlugin.dll の代わりにコピーされます。
Unity はアゼンブリにシリアライズのコードを注入します。これはプラグインに MonoBehaviour のクラスがあることを目的としています。Unity がそのパッチを行わなかった場合、実行時に serialization エラーが発生することとなります。
これらは両方とも同じ名前でなければなりません。例えば、エディターと互換性のあるプラグインは Assets\Plugins\MyPlugin.dll として配置し、Windows ストアアプリ専用プラグインは Assets\Plugins\WSA\MyPlugin.dll として配置します。エディターでの作業中は Assets\Plugins\MyPlugin.dll が使用され、Windows ストアアプリとしてビルドする際には Assets\Plugins\WSA\MyPlugin.dll がコピーされます。