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

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

マネージドプラグイン

Windows ストアアプリに特化したプラグイン、例えば次のような API を使用している場合は Unity エディターでは使えません https://msdn.microsoft.com/ja-jp/library/windows/apps/br211377.aspx、Unity エディターがこれらを扱えるよう少々変更が必要です。基本的には二つのバージョンのプラグインを作ります。

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

どちらも同じ名前と同じアセンブリバージョンでなければなりません。例えば、エディターに対応したプラグインは Assets\Plugins\MyPlugin.dll に配置し、Windows ストアアプリ専用プラグインは Assets\Plugins\WSA\MyPlugin.dll に配置します。

  • Assets\Plugins\MyPlugin.dll に行き、互換性のある唯一のプラットフォームであるエディターを選択します

  • Assets\Plugins\WSA\MyPlugin.dll に行き、互換性のある唯一のプラットフォームである Windows ストアアプリを選択し、Windows ストアアプリプラグイン設定へ行きます

  • ‘Assets\Plugins\MyPlugin.dll’ をプレースホルダのフィールドへ設定します。これは Windows ストアアプリをビルドする際にスクリプトのコンパイルには ‘Assets\Plugins\MyPlugin.dll’ が使用されることを意味しますが、最終的にフォルダーにコピーされるものは ‘Assets\Plugins\MyPlugin.dll’ ではなく ‘Assets\Plugins\MyPlugin.dll’ です。これは二つのものをアーカイブします - Unity エディターがコンパイルに成功したスクリプト、およびゲーム中 Windows ストアアプリから使用される API の専用プラグイン。 プラグインインスペクター

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 でのデバッギング