本日は Unity の小ネタ枠です。
アセンブリ定義のAutoReferencedを使ってAssembly-CSharpから他のアセンブリへのアクセスを制御する方法について記事にします。
Assembly-CSharp
Unity ではアセンブリ定義ファイルを設定していないスクリプトは全て Assembly-CSharp のアセンブリに集約されます。
Assembly-CSharp は扱いが特殊で、通常、他の全てのアセンブリにアクセス可能であり、一方で他のアセンブリからはアクセスできないアセンブリとして扱われます。
docs.unity3d.com
ただしより厳密に言うと Assembly-CSharp は Auto Referenced を有効(デフォルト)にした他の全てのアセンブリにアクセス可能であるというのが正しいようです。
Auto Referenced を有効にしたアセンブリは常にコンパイル対象となります。Assembly-CSharp から参照しないアセンブリは Auto Referenced を無効にすることでコンパイル時間の短縮が図れます。
docs.unity3d.com
動作確認
サンプルプロジェクトを作成して動作を確認してみました。
以下の二種類のアセンブリ定義のフォルダとそれに含まれるスクリプトを用意しました。
・OffAutoReferenced:Auto Referenced を無効化したアセンブリ定義
・OnAutoReferenced:Auto Referenced を有効化したアセンブリ定義
以下の通り、アセンブリを定義しない Assembly-CSharp に含まれたスクリプトからだと Auto Referenced を無効にしたアセンブリのスクリプトは参照が失敗します。
Auto Referenced を無効にしたアセンブリのスクリプトを参照するにはアセンブリ定義を追加して、そこに明示的に対象のアセンブリへの参照を設定します。