(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


Assembly Definition Filesを使ってるのにコンパイル時間が早くならない場合の対処法【Unity】【Assembly Definition Files】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2019.4.17f1


はじめに

Unityでコンパイル時間を短縮したい場合、Assembly Definition Filesが便利ですが、

ざっくりまとめると、

好きなようにコンパイルする範囲を設定でき、それがコンパイル時間短縮に繋がるという事です。


ちょっと使い方を間違えるだけで、全く効果を発揮しない場合があります。

今回はそんなAssembly Definition Filesを使ってるのにコンパイル時間が早くならない場合の対処法です!


Auto Referenced

例えば以下のようにConstants、Data、Gameという3つのディレクトリそれぞれに

Assembly Definitionを設定し、Gameに他2つの参照を設定したとします。

f:id:kan_kikuchi:20210312142125j:plain


これでConstansAやDataAからManagerやPlayerへのアクセスが出来なくなりますが、

その代わり、Game内のスクリプトを変更した場合は

ConstantsやDataをコンパイルしないため早くなります。


と思い気や、実はただAssembly Definition Files作っただけだとコンパイル時間は変わりません。

なぜなら、Auto Referencedという

毎回コンパイル対象にする設定がデフォルトで有効になっているからです。

f:id:kan_kikuchi:20210313084001j:plain


なのでAssembly Definitionを作成したら基本的にAuto Referencedは無効にすれば良いのですが、

Assembly-CSharpに属している(Assembly Definitionを設定していない)スクリプトから

参照できなくなるという点には注意が必要です。

f:id:kan_kikuchi:20210312153001j:plain


なお、Auto Referencedを有効にしてもまだコンパイルが遅い場合は分割の粒度が大きい

そもそもコンパイルが原因じゃない(シーンが重い、他のソフトが重いなど)等が考えられます。


ちなみにUnity 2020.2以降はコンパイル時間の最適化が進んでいるそうなので、

プロジェクトによってはUnityをアップデートするというのも一つの手かもしれません。

Unity 2020.2 に向けて、コンパイル時間を最適化するために役立つ複数の機能を設計しました。




参考