Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

yos316
cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。
http://www.cyberagent.co.jp/
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