Unity2017.3bのアセンブリ定義ファイルを使ってみた

Unity2017.3bに含まれている機能として下記のアセンブリの分割があります。
こちらの機能が気になったので試してみた内容をメモ。

> Editor: Added assembly definition files feature for script compilation pipeline in the editor. Allows you to define your own managed assemblies based upon scripts inside a folder. By splitting your project's scripts into multiple assemblies, script compilation times in the editor can be greatly reduced. Note that the latest version of Visual Studio Tools for Unity is required for this feature to work with solution and project generation for Visual Studio.

- Unity2017.3.b2で検証
    - <font color="Red">※こちらの記事はβ版で試した物となります。</font>



# 使い方について

使い方と言った基本的な情報については[こちらの資料(「Script Compilation - Assembly Definition Files」)](https://blogs.unity3d.com/wp-content/uploads/2017/10/Script-Compilation-Assembly-Definition-Files-manual-edition.pdf)に概ね記載されておりますが、実際に試した際にはアセンブリ定義ファイルの拡張子が「.assembly.json」では無く「.asmdef」になっていたり、jsonの設定項目がEditor上から編集可能だったりしたので、今回はEditor上から設定を行う前提でやり方をメモ。
※アセンブリ定義ファイルについて、拡張子は違っても内容自体は資料中にある物と一致している模様。




## 設定手順

例として、以下の"Assets/Script"以下にある"Test2.cs"を別のアセンブリに分割する手順をメモ。
→現時点では何も設定を行っていないので"Assembly-CSharp.dll"に含まれる形になっている事が確認出来ます。
※含まれるアセンブリについてはソースファイルを選択した際にInspector中の「Assembly Information -> Filename」に表示される様になっている模様。

![ss1.png](https://qiita-image-store.s3.amazonaws.com/0/80207/e9e7cea7-1cd2-2109-09a8-49964dbc0547.png)


- 手順
    - ①. 分割するScriptを入れるフォルダを作成
        - ※例として"Assets/Scripts/TestAsm"を作成
    - ②. ①の手順で作成したフォルダ内にアセンブリ分割ファイルを作成
        - アセンブリ分割ファイルは右クリックメニューの「Create -> Assembly Definition」から作成可能
        - ※例として作成したAssembly Definitionのファイル名を"TestAsm.asmdef"に設定

![ss6.png](https://qiita-image-store.s3.amazonaws.com/0/80207/20608f95-4b68-0dfd-33d3-bcbbd2fc0878.png)



これで設定は完了。
→分割予定のフォルダ中にあるTest2.csが"TestAsm.dll"に含まれる形に変更されている事が確認出来ます。

![ss3.png](https://qiita-image-store.s3.amazonaws.com/0/80207/403f9bfc-55f7-295c-6952-c6af33673296.png)





# アセンブリ定義ファイルについて

アセンブリ定義ファイル(.asmdef)について把握している情報をメモ。

- Inspector上での表示は下記の様になっており、以下の項目が設定できる模様
    - *References*
        - 他のアセンブリの参照を設定する項目
        - ※内容については「[Script Compilation - Assembly Definition Files](https://blogs.unity3d.com/wp-content/uploads/2017/10/Script-Compilation-Assembly-Definition-Files-manual-edition.pdf)」の「How is Works -> References」を参照
    - *Platforms*
        - 特定のプラットフォームにアセンブリを含めるか否かを設定
        - ※内容については「[Script Compilation - Assembly Definition Files](https://blogs.unity3d.com/wp-content/uploads/2017/10/Script-Compilation-Assembly-Definition-Files-manual-edition.pdf)」の「How is Works -> Platforms」を参照

![ss5.png](https://qiita-image-store.s3.amazonaws.com/0/80207/0196f6c4-037b-1817-edde-c12da5b5ec6a.png)


見たままではありますが、Referencesは「+」ボタンを押下して項目を増やし、参照させたいアセンブリ定義ファイル(.asmdef)を指定することで設定可能。Platformsは必要な項目に対しチェックを付ける形で設定可能。





# その他情報/注意点など

- 「[Script Compilation - Assembly Definition Files](https://blogs.unity3d.com/wp-content/uploads/2017/10/Script-Compilation-Assembly-Definition-Files-manual-edition.pdf)」には上述しているInspector上から設定できる項目以外にも「フォルダ内に複数言語(C#/JavaScript(UnityScript)/Boo)存在する場合の挙動」「下位互換性(コンパイル順、Unityの定義済みアセンブリとの依存関係、etc)」と言った各種情報が記載されているので要チェック。





# 関連/参考サイト

- [Unity 2017.3.0b2 Release Notes ](https://unity3d.com/jp/unity/beta/unity2017.3.0b2)
- [Unity 2017.3 Beta is out](https://blogs.unity3d.com/jp/2017/09/30/unity-2017-3-beta-is-out/)
    - [Assembly definition files](https://blogs.unity3d.com/wp-content/uploads/2017/10/Script-Compilation-Assembly-Definition-Files-manual-edition.pdf)