はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】マネージプラグインのGeneral設定項目について(Auto Reference, Validate References)

はじめに

今回はマネージプラグインのGeneral/Validate References設定項目について書きたいと思います。

マネージプラグインのGeneral

その前に

マネージプラグインとネイティブプラグイン

Unityのプラグインにはマネージプラグインネイティブプラグインの2種類があります。

  • マネージプラグイン : .dllにコンパイル済みの.NET アセンブリ
  • ネイティブプラグイン : C、C++、Objective-C などの言語で記述できるネイティブコードのライブラリ

// マネージプラグイン
マネージプラグインとは、.NET アセンブリ を作成し、Visual Studio などのツールで Unity の外部でコンパイルして動的リンクライブラリ (DLL) にしたものです。

これは、ソースファイルとして Unity プロジェクトの Assets フォルダーに格納する標準的な C# スクリプトとは処理が異なります。Unity は標準的な C# スクリプトを変更するたびにコンパイルしますが、DLL は事前にコンパイルされているので変わりません。コンパイルされた .dll ファイルをプロジェクトに追加し、それが含むクラスを ゲームオブジェクト に、標準のスクリプトと同じ方法でアタッチすることが可能です。
...
マネージプラグインには .NET コードのみが含まれているため、.NET ライブラリでサポートされていない機能にアクセスできません。ただし、マネージコードは Unity がスクリプトのコンパイルに使用する標準の .NET ツールにアクセスできます。

マネージプラグイン - Unity マニュアル

// ネイティブプラグイン
Unity はネイティブプラグインをサポートしています。これは、C、C++、Objective-C などの言語で記述できるネイティブコードのライブラリです。プラグインを使用すると、C#で記述したコードからこれらのライブラリの関数を呼び出すことができます。この機能により、Unity はミドルウェアライブラリや既存の C/C++ コードと統合できます。

ネイティブのプラグインは、C# スクリプトが他のユーザースクリプトにアクセスする簡単な C インターフェースを提供します。また、 ある低レベルのレンダリングイベントが発生したとき (例えば、グラフィックススデバイスを作成したときなど) に、ネイティブプラグインによってエクスポートされた関数を呼び出すことも可能です。詳しくは、低レベルのネイティブプラグインインターフェース を参照してください。

ネイティブプラグイン - Unity マニュアル

プラグインのGeneral設定項目

プラグインのGeneralの設定項目はマネージプラグインのみ表示されます。

マネージプラグイン (左) とネイティブプラグイン (右) の設定。

プラグインのインポートと設定 - Unity マニュアル

Auto Referenceとは

Unity がプロジェクト用に作成した事前定義されたアセンブリ(Assembly-CSharp)から参照するかどうかを設定します。つまり自身で.asmdefを配置しない場合は、Auto ReferenceONでなければ利用することができません。

.asmdefAuto Referenceと同じ意味ですね。

Validate Referencesとは

プラグインの参照がプロジェクト内で利用可能か確認します。具体的には以下の2つですね。

  • プラグインが参照するプラグインが存在しているか
  • 参照先のプラグインのバージョンが適切か(厳密にバージョン一致 か or newerが要検証)

またValidate ReferencesOFFの場合はこれらの検証がエディタで行われず、ランタイムでエラーが発生する可能性があります。

Unityでは、プラグインの参照がプロジェクト内で利用可能かどうかを確認することができます。この検証を行わないと、欠落した参照が使用されそうになると、ランタイムエラーが発生する可能性があります。

プラグインのインポートと設定 - Unity マニュアル

また参照先のプラグインのバージョンの検証のみOFFにしたい場合はProject Settings -> Player -> Other Settings -> ConfigurationsよりAssembly Version Validationを無効すればOKです。(ただしUnity2021.3.0f1にあるのは確認できましたが、Unity2022.3.10f1では確認できませんでした)

Unity2021.3.0f1でのAssembly Version Validation