Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【小技】Unityのコンパイルを無効化する【Unity】

今回は久々にTwitterネタをやっていきます。
このようなツイートを見つけました。

私も複数のアセットをインポートした時はAsset/AssetStoreというフォルダを作りまとめたりしますが、
フォルダを移動するたびにコンパイルが走るのが実に煩わしいところ。

 

そこで、Unityのコンパイルを無効化する方法についてまとめました

 

開発環境

Unity 2020.1.0f1

 

 

 

方法1 Auto Refreshを切る(うまくいかなかった)

同ツイートのリプライにあった方法です。

Preferences/General/AutoRefreshのチェックを外し、アセットのリフレッシュを無効化します

f:id:Raspberly:20200807015320p:plain

※リフレッシュとはアセットの変更をAssetDatabaseにコミットして、プロジェクト内のアセットを最新の状態にすることです

 

リフレッシュ自体はCtrl+Rや、Assets/Refreshで実行できます。

f:id:Raspberly:20200807022101p:plain

 

 

 

ただし、この方法ではうまくいきませんでした
Scriptの編集、及びフォルダやファイルの移動でコンパイルが走りました

 

 

 

 

 

方法2 LockReloadAssembliesとUnlockReloadAssembliesをエディタ拡張から叩く

同ツイートのリプライにあった方法です。

Editor拡張でLockReloadAssembliesを呼ぶとコンパイルがロックされ、
UnlockReloadAssembliesを呼ぶとアンロックされるようです。


今回は以下のScriptをEditorフォルダに置きました。

using UnityEngine;
using UnityEditor;

public class CompileLock : MonoBehaviour
{
	[MenuItem("Compile/Lock", false, 1)]
	static void Lock ()
	{
		Debug.Log("コンパイルしなくなります");
		EditorApplication.LockReloadAssemblies();
	}

	[MenuItem("Compile/UnLock", false, 1)]
	static void Unlock ()
	{
		Debug.Log("コンパイルするようになります");
		EditorApplication.UnlockReloadAssemblies();
	}
}

 

すると、UnityエディターのメニューバーにCompileという項目が増えます。
さらにCompile/Lockを押すとコンパイルがされなくなり、Compile/UnLockで解除されます

f:id:Raspberly:20200807021550p:plain

 

Lockしている時にScriptを編集すると、Unityエディターの右下に鍵マークが表示されました
コンパイル中だとクルクル回る所ですね。鍵マークが表示されている時はコンパイルされないようです

f:id:Raspberly:20200807005921p:plain

同じく、ファイルやフォルダの移動でもコンパイルは走りませんでした
※アセットのインポートではコンパイルが走ります。

 

 

追記 8月7日

@deco_c_さんが改良版のEditorScriptを作成してくださいました!

 

 

 

 

 

方法3 Playモード中を利用する

同ツイートのリプライにあった方法です。

 

Playモード(ゲーム実行)中スクリプトなどが変更された場合の挙動は、
Preferences/General/ScriptChangesWhilePlayingから変更できます。

f:id:Raspberly:20200807010923p:plain

これには3つのモードが用意されています。

Recompile And Continue Playing

プレイモード中にScriptが変更された場合、プレイモードを続行したままコンパイルします
Unityにはホットリロードと呼ばれる、Scriptの変更をゲームを終了させずに反映できる機能があります。
ホットリロードを有効にするのがこのモードです。

Recompile After Finished Playing

プレイモード中にScriptが変更された場合、プレイモードはそのまま続行できますがコンパイルはされず、
プレイモードの終了後にコンパイルされるモードです。

Stop Playing And Recompile

プレイモード中にScriptが変更された場合、プレイモードを即終了しコンパイルを行うモードです。

 

 

今回は、プレイモード中にコンパイルしないようにしたいので、
Recompile After Finished Playingに設定します

f:id:Raspberly:20200807021034p:plain

実際にプレイモード中にScriptを編集したところ、
方法2と同じように鍵マークが表示されコンパイルされませんでした
ファイルやフォルダの移動をしても同じようにコンパイルが走りません

f:id:Raspberly:20200807005921p:plain

 

ただし、プレイモード中はアセットのインポートができないので注意しましょう。

f:id:Raspberly:20200807013143p:plain



 

 

 

 

まとめ

以下の2つの方法でUnityのコンパイルを無効化できる。
LockReloadAssembliesとUnlockReloadAssembliesをエディタ拡張から叩く
ScriptChangesWhilePlayingをRecompile After Finished Playingにする

 

 

 

 

参考資料

farcepeace.wixsite.com

naichilab.hatenablog.com

trapezoid.hatenablog.com

docs.unity3d.com

ekulabo.com

 

 

 

 

 

他わかりにくい所、間違っている所がありましたらコメントまでおねがいします!