はじめに
Unity 2018.1b12 以降で使用できる「Unity Incremental Compiler」が公開されました
これは、次世代コンパイラと呼ばれる「Roslyn」を Unity で使用し、
変更があった部分だけをリコンパイルすることで、
スクリプトのコンパイル時間を大幅に短縮する仕組みです
また、C# 7.2 の機能も使用できるようになります
現在はまだアルファ版の公開となりますが、導入方法を紹介していきます
目次
導入方法
Unity 2018.1.0b12 のインストール
https://unity3d.com/jp/unity/beta-download
「Unity Incremental Compiler」は Unity 2018.1b12 以降で使用できるので、
上記のページから Unity 2018.1.0b12 をダウンロードしてインストールします
Visual Studio 2017 のバージョン 15.6.4 のインストール
https://www.visualstudio.com/ja/downloads/
「Unity Incremental Compiler」を使用するためには、
Visual Studio のバージョンが 15.6.4 以上である必要があります
もしも Visual Studio のバージョンが古い場合は、
上記のページからインストーラをダウンロードしてインストールします
manifest.json の編集
Unity 2018.1.0b12 で Unity プロジェクトを作成したら、
Unity プロジェクトの保存場所をエクスプローラで開き、
「Packages」フォルダ内の「manifest.json」をテキストエディタで開き、
下記のコードを貼り付けて保存します
{ "dependencies": { "com.unity.incrementalcompiler": "0.0.27" }, "registry": "https://staging-packages.unity.com" }
Scripting Runtime Version の変更
Unity で Player Settings を開き、「Scripting Runtime Version」を
「Stable (.NET 4.x Equivalent)」に変更し、Unity プロジェクトを再起動します
「Library/ScriptAssemblies」フォルダの削除
Unity プロジェクトを一旦閉じて、「Library」フォルダ内の
「ScriptAssemblies」フォルダを削除してから、再度 Unity プロジェクトを開きます
導入できているかどうかの確認
Unity メニューの「Window>Package Manager」を選択して
表示されたウィンドウに「IncrementalCompiler」が表示されていれば導入完了です
コンソールウィンドウの表示設定
Unity メニューの「Edit>Preferences...」を選択して表示されたウィンドウで
「Compiler」を選択し、「Show Console Window」をチェックしておくと
次回から Unity プロジェクトを開いた時に
コンパイル時間が確認できるコンソールが起動するようになります
コンパイル時間確認
自分の Unity プロジェクトでコンパイル時間を確認してみたところ
下記のような結果になりました
Assembly-CSharp.dll | Assembly-CSharp-Editor.dll | |
---|---|---|
初回 | 2.320 秒 | 0.277 秒 |
2回目以降 | 0.376 秒 | 0.143 秒 |
初回だけはすべてのスクリプトをコンパイルする必要があるため、
コンパイル時間が長くなりますが、
2回目以降は変更があった部分だけがコンパイルされており、
時間が短縮されていることが確認できました
C# 7.2 の機能の使用
using UnityEngine; public class Example : MonoBehaviour { readonly struct Point { public readonly int X; public readonly int Y; public Point( int x, int y ) => ( X, Y ) = ( x, y ); } void Start() { var pt = new Point( 1, 2 ); Debug.Log( pt.X + ", " + pt.Y ); } }
C# 7.2 から使用できる、readonly struct や
using UnityEngine; public class Example : MonoBehaviour { void Start() { var vec = new Vector3(); vec.Hoge(); Debug.Log( vec ); } } public static class Vector3Ext { public static void Hoge( ref this Vector3 self ) { self.x = 1; self.y = 2; self.z = 3; } }
参照渡しの拡張メソッドも問題なく使用できます
問題点
「Unity Incremental Compiler」はまだアルファ版なので、いくつか問題があります
Visual Studio
Visual Studio において、コードハイライトが一部適用されず、
また、インテリセンスが正常に動作しない状態のようです