18
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

【Unity】Unity2017.3で追加されたAssembly Definitionをちょっと触ってみた

本記事はサムザップ 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バージョンとの表示の違いに気づくと思います。

AssemblyDefinition_01.PNG
Assembly Informationという項目が増えていて、
FilenameがAssembly-CSharp.dllとなっています。

なるほど、特殊フォルダ以外のフォルダに格納されているスクリプトはAssembly-CSharp.dllにまとめられるよね、というのが分かります。
では、Editorフォルダにスクリプトを置いてみましょう。

2017-12-21_17h19_52.png
こちらは、FilenameがAssembly-CSharp-Editor.dllとなっています。

このように、Unity2017.3から選択中のスクリプトがどのアセンブリーに属するのかがインスペクターで確認できるようになっています。

Assembly Definitionを使ってみる

AssemblyDefinition_02.gif
Crate > Assembly DefinitionでAssemblyDefinitionファイル(拡張子は.asmdef)を作成し名前をTestAとします。

2017-12-21_17h58_07.png
このファイルを、TestAというフォルダに移動するとTestAフォルダ内にあるスクリプトのアセンブリーが、TestA.dllになります。

なんとなく理解できてきました。
それなら、まずは外部アセットを格納しているフォルダのトップに外部アセット用のAssembly Definitionの設定をすれば、
開発中のコードを編集しても、外部アセットのスクリプトはコンパイルが走らないので手っ取り早く効果を試せると思ったのですが、
ここで1つ問題が起きました。

問題点

通常、Editorフォルダの中にあるスクリプトは、Assembly-CSharp-Editor-firstpass.dllAssembly-CSharp-Editor.dllにまとめられます。
2017-12-21_18h13_01.png
上記画像の配置だと、Assembly-CSharp-Editor.dllになります。

ここで、TestAフォルダにAssembly Definitionを設定してみると、
2017-12-21_18h15_23.png
おや、EditorフォルダにあるのにTestA.dllになっています。

このように、特殊フォルダであるEditorフォルダであっても親のAssembly Definitionの影響を受けるようです。
Editorフォルダは、親フォルダにAssembly Definitionのファイルが置いてあっても、そのままAssembly-CSharp-Editor-firstpass.dllAssembly-CSharp-Editor.dllになると思っていたので、ここはちょっと意表を突かれました。

特に、AssetStoreのアセットをもってきたときに、それぞれのアセットのEditorフォルダにAssembly Definitionの設定をしないといけないような気がしてきて、実用性がよく分からなくなってきました。

これから

上記のように、まだいまいちどう使うのがいいのか疑問点が多いのですが、コンパイル時間を減らせる大きな魅力があるので、
引き続き、色々と試行錯誤やフィードバックをしていきたいと思います。

参考

Unity2017.3bのアセンブリ定義ファイルを使ってみた
Unity2017.3のAssembly Definitionがコンパイル時間短縮の救世主になりそうな予感


明日は、noguchi_toma さんの パケットキャプチャツール/Charlesを試してみたです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
18
Help us understand the problem. What are the problem?