なんとなく使い始めている Assembly Definition Files ですが、これによって複数のアセンブリに分割すると、他のアセンブリにあるクラスを参照できなくなったりします。


Scripts フォルダに Assembly Definition File を設定したら、アセットのコンポーネントを取得できなくなった

自作のスクリプトを置いている Scripts フォルダに Assembly Definition File(以下、ADF)を設定したら、その外にあるアセットのコンポーネントを GetComponent で取得できなくなって焦りました。
具体的には、みんな大好き DOTween ProDOTweenAnimation コンポーネント。

こんな感じで、GetComponent ができない!
スクリーンショット (805).png

Assembly Definition References の設定をしよう

解決策は以下のとおり。
  • 呼び出される側のスクリプトを含むフォルダ(の親フォルダでも可)に、ADF を設定する。
  • 呼び出す側のスクリプトの属する ADF のインスペクターで、Assembly Definition References に呼び出される側の ADF を設定する。

今回は、自作のスクリプトたちを置くフォルダに main という ADF を置き、そのインスペクターで DOTween の親フォルダに置いた ADF (demigiant)を参照する設定をしました。 
スクリーンショット (804).png

これで無事解決。
たったこれだけのことですが、実際やってみて、つまづいてみないと覚えられないんだよなあ。

以上のとおりで、Unityエディター上では問題なく動くようになったのですが、ビルド時にエラーが出ることに気づきました。これはまた後で検証したいと思います。


(追記) アセット内のEditorフォルダに注意しよう

アセットのフォルダ内に、Editor フォルダが含まれていることがありますが、このときは注意が必要です。適切に ADF を設定しないと、ビルド時にエラーになってしまったりします。

DOTween Pro の場合は、以下のように設定することでビルド時のエラーを解消できました。
スクリーンショット (943).png
  • DOTweenProの下にあるEditorフォルダにADFを作る。
  • Assembly Definition Reference に、DOTween の親フォルダに設定した ADF を指定する。
  • Platforms には Editor だけを指定する。

Editor フォルダは Assets フォルダの直下じゃないところにも置けるので、見逃しがちかもしれませんね。


参考資料

Assembly Definition Files の詳しい解説は テラシュールブログ様 でどうぞ。


今回は以上です。