Windows ストアアプリ: .NET Scripting Backend で未対応の .NET 型
Windows ストアアプリ: .NET Scripting Backend でのデバッグ

Windows ストアアプリ: .NET Scripting Backend でのプラグイン設定

マネージドプラグイン

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 エディター用のプラグイン
  • Windows ストア用のプラグイン (注意: Windows Phone 8.1 silverlight アセンブリは Windows Phone 8.1 のプラグインとしてサポートされません)

重要 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.
    Plugin Inspector

Don’t process オプション

このオプションは Unity にアセンブリのパッチを行ってほしくない場合に使用します。通常このオプションはプラグインが多量の Windows Runtime API を使用していたり、Unity がパッチに失敗するような場合に適用します。

Windows ストアアプリプラグイン設定

エディタータブのオプション
エディタータブのオプション
プロパティー 機能
SDK Windows ストアアプリへのプラグインのビルドを SDK 8.0SDK 8.1 に制限する
CPU プラグインを 32 bit64 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.dllPlugins\MyPlugin.dll の代わりにコピーされます。

Unity がアセンブリにパッチしなかったらどうなりますか。

Unity はアゼンブリにシリアライズのコードを注入します。これはプラグインに MonoBehaviour のクラスがあることを目的としています。Unity がそのパッチを行わなかった場合、実行時に serialization エラーが発生することとなります。

これらは両方とも同じ名前でなければなりません。例えば、エディターと互換性のあるプラグインは Assets\Plugins\MyPlugin.dll として配置し、Windows ストアアプリ専用プラグインは Assets\Plugins\WSA\MyPlugin.dll として配置します。エディターでの作業中は Assets\Plugins\MyPlugin.dll が使用され、Windows ストアアプリとしてビルドする際には Assets\Plugins\WSA\MyPlugin.dll がコピーされます。

Windows ストアアプリ: .NET Scripting Backend で未対応の .NET 型
Windows ストアアプリ: .NET Scripting Backend でのデバッグ