using TFramework; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditor.PackageManager; using UnityEditor.PackageManager.Requests; public class Prepare { private const string PACKAGENAME = "com.code-philosophy.hybridclr"; private const string PACKAGEGITPATH = "https://github.com/focus-creative-games/hybridclr_unity.git"; static ListRequest _listRequest; [InitializeOnLoadMethod] public static void InitEnv() { if (CheckInstall()) return; _listRequest = Client.List(); EditorApplication.update += Update; } public static bool CheckEnv() { bool isHaveEnv = false; foreach (var info in _listRequest.Result) { if(info.name==PACKAGENAME) { isHaveEnv = true; break; } } return isHaveEnv; } public static bool CheckInstall() { #if HybridCLR return new HybridCLR.Editor.Installer.InstallerController().HasInstalledHybridCLR(); #else return false; #endif } private static void Update() { if (_listRequest.IsCompleted) { if (_listRequest.Status == StatusCode.Success) { if (!CheckEnv()) { if (EditorUtility.DisplayDialog("环境检查提示", "当前不存在热更环境,是否导入环境?", "马上导入", "稍后再说")) { AddRequest addRequest = Client.Add(PACKAGEGITPATH); while (!addRequest.IsCompleted) { if (addRequest.Status == StatusCode.InProgress) Debug.Log(addRequest.Status); else { Debug.LogError($"安装热更环境【{PACKAGENAME}】出错"); break; } } if (addRequest.IsCompleted) { if (addRequest.Status >= StatusCode.Failure) Debug.LogError(addRequest.Error.message); } } } else if(!IsAddSymbols()) { AddDefineSymbols("HybridCLR"); } else if (!CheckInstall()) { EditorApplication.ExecuteMenuItem("HybridCLR/Installer..."); } } else if (_listRequest.Status >= StatusCode.Failure) Debug.Log(_listRequest.Error.message); EditorApplication.update -= Update; } } public static void AddDefineSymbols(string symbol) { BuildTargetGroup buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; string symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); if (symbols.Split(';').Contains(symbol)) return; symbols = string.IsNullOrEmpty(symbols) ? symbol : symbols += $";{symbol}"; PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, symbols); } public static bool IsAddSymbols() { #if HybridCLR return true; #else return false; #endif } }