27
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-21

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

27
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?