こんにちは、Unityエンジニアのオオバです。
Unity2017.2までは、各ソースはディレクリ命名ルールから以下の4種類のAssemblyファイルが生成されていました。
- Assembly-CSharp-firstpass.dll
- Assembly-CSharp-Editor-firstpass.dll
- Assembly-CSharp.dll
- Assembly-CSharp-Editor.dll
詳しくはコチラをどうぞ。
Unityのコンパイル時間短縮化の工夫
先の記事でも書きましたが、Assembly-CSharp.dll
が大抵肥大化することとなり、コンパイル時間を大きく増やす原因になります。
オオバが経験してきたプロジェクトの中で最長コンパイル時間は40秒〜1分ほどです。
1行コードを書いただけでこれだけ時間かかると結構ストレスです。
※こちらの時間はパソコンのスペックを上げてもあまり変化がありません。
少しでもコンパイル時間を早くするには、Pluginsフォルダへ移動させたり、そもそもソースコードを減らしたり工夫する必要があります。
そんな苦労が多少軽減されるであろう機能がUnity2017.3実装予定のAssembly Definitionです。
開発者指定ディレクトリレベルでAssemblyを分割できるようになります!
例えば、以下のような独立したモジュール単位でアセンブリを作ることが可能です。(更に細分化も可能)
- タイトル
- メニュー
- バトル
- リザルト
こうすることで例えばタイトルのソースコードを変更した場合はタイトルのコードだけがコンパイルされますので、コンパイル時間は今までに比べると早くなる可能性が高いでしょう。
また、共通で使用するCommon的なモジュールが存在する場合も、Commonで区切ってアセンブリ化し、それを参照として各モジュールに渡すことも可能です。
Commonが肥大化する可能性もありますが、今まで全ソースコンパイルしていたことを考えると大きな改善だと思われます。
アセットストアからダウンロードしたコードたちを1つのアセンブリにしても良いかもしれません。アセットの更新が掛かるときだけコンパイルされるので、大規模なアセット、多くのアセットを使用している際は効果が大きそうです。
このようにCreate
> Assembly Definition
でAssemblyDefinitionファイルを作成します。
先の説明に合ったCommon的な共通で使用したいモジュールは、そのアセンブリをReferences
に渡すだけです。
最後に
Assemblu Definitionは、結構前から欲しかった機能でした。大規模プロジェクトになるとどうしてもコンパイル時間がキーで開発効率が下がっていましたので、それを打破する一手になるんじゃないかなって思います。
Unity2017.3が待ち遠しいです。
余談
循環参照すると以下のエラーが出力されるので注意。
Assembly with cyclic references detected
この記事が気に入ったらフォローしよう
- Unity2017.3.0b8