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を解除したタイミングでも、コンパイルが走るようにしてあります。
おわりに
エディタ拡張初挑戦でした!
もし良くない部分がありましたら、ご指摘いただけますと大変ありがたいです。
これで気持ちよく開発できそうです。