Unity recompiles/builds the project once the window regains focus. I am working on a really big project that needs to be refactored, resulting in me needing to look a lot of stuff up in Unity and then moving back to Visual Studio. However each time I switch to Unity I need to wait a few seconds for it to recompile.
Is it possible to disable this? Maybe only recompile when clicking on run.
You need to put this script in an "Editor" folder anywhere in your project, then just click on the appropriate button. After having locked assembly reload and then unlocked, the assemblies will reload on the next time Unity Editor gains focus.
using UnityEngine;
using UnityEditor;
public class AssemblyReloadEditor : EditorWindow {
System.Action DebugDelegate;
[MenuItem("Custom/Assembly Reload Editor")]
public static void Init(){
GetWindow<AssemblyReloadEditor>();
}
bool locked = false;
void OnEnable(){
DebugDelegate = CompilingPrevented;
}
void OnGUI(){
if(EditorApplication.isCompiling && locked){
EditorApplication.LockReloadAssemblies();
DebugDelegate(); //this is just so the console won't be flooded
}
GUILayout.Label("Assemblies currently locked: "+locked.ToString());
if(GUILayout.Button("Lock Reload")){
locked = true;
}
if(GUILayout.Button("Unlock Reload")){
EditorApplication.UnlockReloadAssemblies();
locked = false;
if(EditorApplication.isCompiling){
Debug.Log("You can now reload assemblies.");
DebugDelegate = CompilingPrevented;
}
}
Repaint();
}
private void CompilingPrevented(){
Debug.Log("Compiling currently prevented: press Unlock Reload to reallow compilation.");
DebugDelegate = EmptyMethod;
}
private void EmptyMethod(){}
}
There is also a UnityEditorInternal.InternalEditorUtility.RequestScriptReload();, but I couldn’t make it reload the scripts on demand.