本記事はサムザップ Advent Calendar 2017の21日目の記事です。
昨日は@you1933さんの「Unity ちょっとシェーダーで遊んでみた」でした
Assembly Definitionとは何か?
Script compilation and assembly definition files
上記に概要が書かれています。
読み解くと、今まではいわゆる通常のスクリプトはAssembly-CSharp.dll
にまとめられるので、
スクリプトを変更するとAssembly-CSharp.dll
に含まれる全てがリコンパイルされるので時間がかかっていたけれど、
いい感じのアセンブリーの単位に分ける事ができるようになるので、スクリプトを変更してもそれに関連するものしかリコンパイルが走らなくて、時間が稼げるよという事みたいです。
Unity2017.3でのスクリプトのインスペクター
実際に、Assembly Definitionを試してみる前にUnity2017.3でスクリプトを選択するとそれ以前のUnityバージョンとの表示の違いに気づくと思います。
Assembly Informationという項目が増えていて、
FilenameがAssembly-CSharp.dll
となっています。
なるほど、特殊フォルダ以外のフォルダに格納されているスクリプトはAssembly-CSharp.dll
にまとめられるよね、というのが分かります。
では、Editor
フォルダにスクリプトを置いてみましょう。
こちらは、FilenameがAssembly-CSharp-Editor.dll
となっています。
このように、Unity2017.3から選択中のスクリプトがどのアセンブリーに属するのかがインスペクターで確認できるようになっています。
Assembly Definitionを使ってみる
Crate
> Assembly Definition
でAssemblyDefinitionファイル(拡張子は.asmdef
)を作成し名前をTestA
とします。
このファイルを、TestAというフォルダに移動するとTestAフォルダ内にあるスクリプトのアセンブリーが、TestA.dll
になります。
なんとなく理解できてきました。
それなら、まずは外部アセットを格納しているフォルダのトップに外部アセット用のAssembly Definition
の設定をすれば、
開発中のコードを編集しても、外部アセットのスクリプトはコンパイルが走らないので手っ取り早く効果を試せると思ったのですが、
ここで1つ問題が起きました。
問題点
通常、Editor
フォルダの中にあるスクリプトは、Assembly-CSharp-Editor-firstpass.dll
かAssembly-CSharp-Editor.dll
にまとめられます。
上記画像の配置だと、Assembly-CSharp-Editor.dll
になります。
ここで、TestAフォルダにAssembly Definition
を設定してみると、
おや、EditorフォルダにあるのにTestA.dll
になっています。
このように、特殊フォルダであるEditor
フォルダであっても親のAssembly Definition
の影響を受けるようです。
Editor
フォルダは、親フォルダにAssembly Definition
のファイルが置いてあっても、そのままAssembly-CSharp-Editor-firstpass.dll
かAssembly-CSharp-Editor.dll
になると思っていたので、ここはちょっと意表を突かれました。
特に、AssetStoreのアセットをもってきたときに、それぞれのアセットのEditor
フォルダにAssembly Definition
の設定をしないといけないような気がしてきて、実用性がよく分からなくなってきました。
これから
上記のように、まだいまいちどう使うのがいいのか疑問点が多いのですが、コンパイル時間を減らせる大きな魅力があるので、
引き続き、色々と試行錯誤やフィードバックをしていきたいと思います。
参考
Unity2017.3bのアセンブリ定義ファイルを使ってみた
Unity2017.3のAssembly Definitionがコンパイル時間短縮の救世主になりそうな予感
明日は、noguchi_toma さんの パケットキャプチャツール/Charlesを試してみたです。