Unityの自動コンパイルを無効化するエディタ拡張

Scriptを書き換えたりアセットを移動させたりすると、自動でコンパイルが走ります。
積み重なるロスタイム。。
煩わしく感じていましたが、設定1つで止められるらしい!!

…と知って試したところ上手くいかず、エディタ拡張で叩くことにしました。
参考にさせて頂いたエディタ拡張をカスタマイズし、より扱いやすくするところまでの備忘録です。

▼最終的な動作は、このようになりました。

自動コンパイルをOFFにする環境設定

Edit > Preferenses の中にあります。

・古いバージョンでは General > AutoRefresh (一番上)
  チェックボックスを外す。
・私の環境(Unity 2022.2.2f1) では Asset Pipeline > Auto Refresh
  Disabled を選択。

これで自動コンパイルがOFFになるそうです。

自動コンパイルをOFFにするエディタ拡張

私の環境では、前述の設定ではコンパイルがOFFになりませんでした。
不思議に思って調べたところ同様の方がいらっしゃったので、参考にさせて頂きました。
 - 【小技】Unityのコンパイルを無効化する【Unity】


@deco_c_さん が公開してくださっている下記スクリプトを、Editerフォルダ内に入れて導入。
これで自動コンパイルがOFFにできました!!
ありがとうございます。
 - CompileLocker.cs

※Editerフォルダがまだ無い場合 同名でフォルダ作成し、そこへ入れる


上のメニューバーに新しく「Compile」が追加。
Lockをクリックするたびに、コンパイルのON/OFF が切り替わります。

切り替えるとConsoleにログが表示されます。

Lock 中にScriptの書き換え等を行うと画面右下のマークが鍵マークになり、コンパイルがLockされていることがわかります。

エディタ拡張をカスタマイズ

先程の CompileLocker で、コンパイルのON/OFF を切り替えられるようになりました。
が、もうちょっと便利にならないかなぁと思う点が2つ…

・上部メニューをポチポチしに行くのが手間。
  → ショートカットキーが欲しい
・Lock状態で再生ボタンを押すとプレイモードに入れない
  → 再生ボタンを押した際に自動でコンパイルを走らせたい


これらを解決すべく改造。最終的にはこのようになりました。
動作は、冒頭に貼った動画の通りです。

using UnityEngine;
using UnityEditor;

/// <summary>
/// This editor utility can lock/unlock unity script compile from menu item.
/// See more https://raspberly.hateblo.jp/entry/InvalidateUnityCompile
/// </summary>
public static class CompileLocker
{
    //# は Shift、% は Ctrl (MacはCmd) を表す
    [MenuItem("Compile/Lock #%L", false, 1)]        //Shift + Ctrl + L で Lock をクリックするショートカットを書き足し
    [InitializeOnLoadMethod]
    static void Lock()
    {

        var menuPath = "Compile/Lock";
        var isLocked = Menu.GetChecked(menuPath);

        if (isLocked)
        {
            Debug.Log("Compile Unlocked");
            EditorApplication.UnlockReloadAssemblies();
            Menu.SetChecked(menuPath, false);

            //ロック解除時にリフレッシュするよう書き足し
            Menu.SetChecked(menuPath, false);
            AssetDatabase.Refresh();
        }
        else
        {
            Debug.Log("Compile Locked");
            EditorApplication.LockReloadAssemblies();
            Menu.SetChecked(menuPath, true);

            //プレイモードに入った際、強制的にアセットをリフレッシュするよう書き足し
            EditorApplication.playModeStateChanged += (PlayModeStateChange state) =>
            {
                if (state == PlayModeStateChange.ExitingEditMode)
                {
                    EditorApplication.UnlockReloadAssemblies();
                    Menu.SetChecked(menuPath, false);
                    AssetDatabase.Refresh();
                }
            };
        }
    }
 }

ショートカットキーを追加

[MenuItem(“上部メニューの名称”)]
となっているところを
[MenuItem(“上部メニューの名称 #%L”)]
のようにします。

半角スペースと、ショートカットキーを表す記号を記述すれば良いようです。
今回は Shift + Ctrl + L で記述しました。

再生ボタンを押した際に自動でコンパイルを走らせる

プレイモードに入る際にコンパイルを走らせる方法に関して、こちらを参考にさせて頂きました!
 - 【Unity】スクリプトを変更するたびにコンパイルが走らないようにする

今回の拡張エディタでコンパイルLockモードにしている時は、そのままでは動作しません。
CompileLocker.cs と合体させ、Lockモードの時の処理の中に書き足してみました。
Lockを解除したタイミングでも、コンパイルが走るようにしてあります。

おわりに

エディタ拡張初挑戦でした!
もし良くない部分がありましたら、ご指摘いただけますと大変ありがたいです。

これで気持ちよく開発できそうです。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次