Просмотр исходного кода

增加切回unity自动编译热更代码的支持 (#325)

Flamesky 4 лет назад
Родитель
Сommit
ed5d9f4671

+ 23 - 0
Unity/Assets/Editor/BuildEditor/BuildAssemblieEditor.cs

@@ -13,6 +13,20 @@ namespace ET
     {
         private const string CodeDir = "Assets/Bundles/Code/";
 
+        [MenuItem("Tools/Build/EnableAutoBuildCodeDebug _F1")]
+        public static void SetAutoBuildCode()
+        {
+            PlayerPrefs.SetInt("AutoBuild", 1);
+            ShowNotification("AutoBuildCode Enabled");
+        }
+        
+        [MenuItem("Tools/Build/DisableAutoBuildCodeDebug _F2")]
+        public static void CancelAutoBuildCode()
+        {
+            PlayerPrefs.DeleteKey("AutoBuild");
+            ShowNotification("AutoBuildCode Disabled");
+        }
+
         [MenuItem("Tools/Build/BuildCodeDebug _F5")]
         public static void BuildCodeDebug()
         {
@@ -179,6 +193,15 @@ namespace ET
             Debug.Log("set assetbundle success!");
             
             Debug.Log("build success!");
+            //反射获取当前Game视图,提示编译完成
+            ShowNotification("Build Code Success");
+        }
+
+        public static void ShowNotification(string tips)
+        {
+            var game = EditorWindow.GetWindow(typeof(EditorWindow).Assembly.GetType("UnityEditor.GameView"));
+            game?.ShowNotification(new GUIContent($"{tips}"));
         }
     }
+    
 }

+ 53 - 0
Unity/Assets/Editor/BuildEditor/EditorNotification.cs

@@ -0,0 +1,53 @@
+
+#if UNITY_EDITOR
+using UnityEditor;
+using UnityEngine;
+
+namespace ET
+{
+    [InitializeOnLoad]
+    public class EditorNotification : AssetPostprocessor
+    {
+        private static bool isFocused;
+        static EditorNotification()
+        {
+            EditorApplication.update += Update;
+        }
+
+        private static void Update()
+        {
+            if (isFocused == UnityEditorInternal.InternalEditorUtility.isApplicationActive)
+            {
+                return;
+            }
+            isFocused = UnityEditorInternal.InternalEditorUtility.isApplicationActive;
+            OnEditorFocus(isFocused);
+        }
+        /// <summary>
+        /// Unity窗口聚焦状态改变回调
+        /// </summary>
+        /// <param name="focus"></param>
+        private static void OnEditorFocus(bool focus)
+        {
+            if (focus)
+            {
+                //每次切回来Unity,自动执行脚本编译
+                // Debug.Log($"编辑器激活状态:{focus}");
+                bool autoBuild = PlayerPrefs.HasKey("AutoBuild");
+                if (!autoBuild)
+                    return;
+                BuildAssemblieEditor.BuildCodeDebug();
+            }
+        }
+
+        /// <summary>
+        /// Asset下文件改变时回调
+        /// </summary>
+        private void OnPreprocessAsset()
+        {
+            //Debug.Log("Asset下文件改变时回调");
+        }
+    }
+}
+
+#endif

+ 11 - 0
Unity/Assets/Editor/BuildEditor/EditorNotification.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 44929383c843e7c488b4b1e9c59972c2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: