【Unity】スクリプトのコンパイル時間を大幅に短縮し、C# 7.2 の機能を使用できる「Unity Incremental Compiler」の導入方法を紹介

# 備考

この投稿は自分のブログの記事の転載になります
http://baba-s.hatenablog.com/entry/2018/03/29/111500

# はじめに

https://forum.unity.com/threads/unity-incremental-c-compiler.523993/

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 プロジェクトの保存場所をエクスプローラで開き、

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329103627.png)

「Packages」フォルダ内の「manifest.json」をテキストエディタで開き、
下記のコードを貼り付けて保存します

```json
{
    "dependencies": {
        "com.unity.incrementalcompiler": "0.0.27"
    },
    "registry": "https://staging-packages.unity.com"
}
```

## Scripting Runtime Version の変更

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329102858.png)

Unity で Player Settings を開き、「Scripting Runtime Version」を
「Stable (.NET 4.x Equivalent)」に変更し、Unity プロジェクトを再起動します

## 「Library/ScriptAssemblies」フォルダの削除

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329103704.png)

Unity プロジェクトを一旦閉じて、「Library」フォルダ内の
「ScriptAssemblies」フォルダを削除してから、再度 Unity プロジェクトを開きます

## 導入できているかどうかの確認

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329103331.png)

Unity メニューの「Window>Package Manager」を選択して
表示されたウィンドウに「IncrementalCompiler」が表示されていれば導入完了です

## コンソールウィンドウの表示設定

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329104155.png)

Unity メニューの「Edit>Preferences...」を選択して表示されたウィンドウで
「Compiler」を選択し、「Show Console Window」をチェックしておくと

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329104500.png)

次回から Unity プロジェクトを開いた時に
コンパイル時間が確認できるコンソールが起動するようになります

## コンパイル時間確認

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329110811.png)

自分の Unity プロジェクトでコンパイル時間を確認してみたところ
下記のような結果になりました

|　|Assembly-CSharp.dll|Assembly-CSharp-Editor.dll|
|:--|:--|:--|
|初回|2.320 秒|0.277 秒|
|2回目以降|0.376 秒|0.143 秒|

初回だけはすべてのスクリプトをコンパイルする必要があるため、
コンパイル時間が長くなりますが、
2回目以降は変更があった部分だけがコンパイルされており、
時間が短縮されていることが確認できました

## C# 7.2 の機能の使用

```cs
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 や

```cs
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

![](https://cdn-ak.f.st-hatena.com/images/fotolife/b/baba_s/20180329/20180329105415.png)

Visual Studio において、コードハイライトが一部適用されず、
また、インテリセンスが正常に動作しない状態のようです

# 関連記事

http://baba-s.hatenablog.com/entry/2018/03/28/090000