MRが楽しい

MRやVRについて学習したことを書き残す

アセンブリ定義のAutoReferencedを使ってAssembly-CSharpから他のアセンブリへのアクセスを制御する

本日は 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 を無効にしたアセンブリスクリプトを参照するにはアセンブリ定義を追加して、そこに明示的に対象のアセンブリへの参照を設定します。

参考サイト

qiita.com