using UnityEditor; using UnityEngine; using VRC.SDKBase.Editor.BuildPipeline; namespace UdonSharp { public class UdonSharpBuildChecks : IVRCSDKBuildRequestedCallback { public int callbackOrder => -1; /// /// If you're considering commenting any section of this out, try enabling the force compile in the U# settings first. /// This is here to prevent you from corrupting your project files. /// If scripts are left uncompiled from Unity's side when uploading, there is a chance to corrupt your assemblies which can cause all of your UdonBehaviours to lose their variables if handled wrong. /// /// /// public bool OnBuildRequested(VRCSDKRequestedBuildType requestedBuildType) { UdonSharpSettings settings = UdonSharpSettings.GetSettings(); bool shouldForceCompile = settings != null && settings.shouldForceCompile; // Unity doesn't like this and will throw errors if it ends up compiling scripts. But it seems to work. // This is marked experimental for now since I don't know if it will break horribly in some case. if (shouldForceCompile) { AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate | ImportAssetOptions.ForceSynchronousImport); } else { AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); if (EditorApplication.isCompiling) { Debug.LogError("[UdonSharp] Scripts are in the process of compiling, please retry build after scripts have compiled."); UdonSharpUtils.ShowEditorNotification("Scripts are in the process of compiling, please retry build after scripts have compiled."); return false; } } return true; } } }