本記事はサムザップ 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を試してみたです。