using System; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEditor; using UnityEngine; namespace Stary.Evo { [CreateAssetMenu(fileName = "HotfixMainResDomain", menuName = "Evo/Create HotfixMainResDomain")] public class HotfixMainResDomain : ScriptableObject { [TabGroup("MainResDomain")] [InlineProperty, HideLabel] public HotfixMainResDomainEntity hotfixMainResDomainEntity; [TabGroup("ProjectInfo")] [InlineProperty, HideLabel] public ProjectInfo projectInfo; [TabGroup("BuildConfig")] [InlineProperty, HideLabel] public BuildConfig buildConfig; private static HotfixMainResDomain globalInstance; public static HotfixMainResDomain Get { get { // 在Resources目录下查找配置 if (globalInstance == null) { globalInstance = Resources.Load("HotfixMainResDomain"); } // 无该配置时尝试创建 else if (globalInstance == null) { globalInstance = CreateInstance(); var path = AssetDatabase.GenerateUniqueAssetPath("Resources/HotfixMainResDomain.asset"); AssetDatabase.CreateAsset(globalInstance, path); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } // 返回热更资源配置 return globalInstance; } } } [Serializable] public class HotfixMainResDomainEntity { public string ipconfig = "http://192.168.31.100:5005/HotRefresh"; public string mainDomainVersion = ""; public string username = "UnityHot"; public string password = "Unity1234"; } [Serializable] public class ProjectInfo { /// /// 项目中文名称 /// public string projectName; /// /// 项目代号 /// public string projectCode; /// /// 项目包名 /// [ReadOnly] public string projectPackageName; #if UNITY_EDITOR /// /// 资源加载场景 /// [LabelText("资源加载场景")] [Required("如果需要场景作为资源加载过程中的过渡,请将其拖到此处")] public SceneAsset loadingScene; #endif /// /// 资源加载场景(路径) /// public string loadingScenePath; } [Serializable] public class BuildConfig { [LabelText("包体配置")] private List packages = new(); public PackageConfig Get(string packageID) { var result = packages.Find(x=>x.packageID==packageID); if (result == null) { result = new PackageConfig(); packages.Add(result); } return result; } public void Set(string packageID, PackageConfigInfo config) { var package = Get(packageID); package.info = config; } } [Serializable] public class PackageConfig { [FoldoutGroup("@packageID")] [LabelText("包体ID")] public string packageID; [FoldoutGroup("@packageID")] [InlineProperty, HideLabel] public PackageConfigInfo info; } [Serializable] public class PackageConfigInfo { [LabelText("App名称")] public string appName; } }