こんにちわ、Unityエンジニアのオオバです。

Unityは特殊なフォルダ名でコンパイルされるソースの順番と出来上がるDLLファイルが違います。

まとめるとこんな感じです。

セクションフォルダ名書き出されるDLL名
A・Standard Assets・Pro Standard Assets・Plugins上記のフォルダAssembly-CSharp-firstpass.dll
B・Standard Assets・Pro Standard Assets・Plugins上記内のEditorフォルダAssembly-CSharp-Editor-firstpass.dll
CA, B, Editor以外のフォルダAssembly-CSharp.dll
DEditorフォルダAssembly-CSharp-Editor.dll

ビルドされる順番はA, B, C, Dという順番で行われます。
そして、格納フォルダ名の違いによって作られるDLLが異なり、また先の表のA〜Dセクションのソースはそれぞれでコンパイル処理が走ります。
例えばCに含まれるソースを変更した場合、A, B, Dのビルドは走らず、Cのみ実行されます。

話は変わりますが、大規模開発をしていると、大抵Cのソースが増えていき、ちょっとした変更でも長めのコンパイル時間が発生するようになります。
しかし、このルールを利用してコンパイル時間を短縮することが出来ます。

早い話A〜Dにソースを分散させます。

この記事の内容

1.Pluginsフォルダにソースを移す

Cのソースがコンパイル時間のボトルネックになることは仕方がないことです。ということで、できるだけCからAに移します。
※実質Pluginsフォルダへ移します。Standard Assets, Pro Standard Assetsへのソース追加は管理上分かりづらいのでやめたほうが良いでしょう

しかしCから何でもかんでも移せるわけではありません。

先のコンパイル順番の規則から、CからAは参照できてもAからCは参照できません。

参照方向可否
A -> C
C -> A

あくまでPluginsフォルダに入れることが出来るのはCに格納されるゲームロジックから独立したものにした方がソース管理的に無難です。

などが当てはまるのかなと思います。

可能であれば開発初期からソースをPluginsに分けて制作した方が良いです。間違えてゲームロジックにアクセスしていたなどのミスもコンパイルエラーという形で発見できます。

2.Editorスクリプトで出来ることはEditorに移す

Unityエディタでのテストコードがこれに当たることがあります。
例えば特定のアセットバンドルをダウンロードするテストは、Editorスクリプト側で処理を書くとか。

最後に

ソースのコンパイル順はリファレンスに詳しく載っています。オオバの経験上、開発を続けているとやはりコンパイル時間は我慢できないほど長くなっていきます。
何か手を打つにしても、開発後半では動きづらくなります。
開発の初期設計から分けられるソースを見極めていくほうが良い気がしています。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事