Files
plugin-library/Assets/00.StaryEvo/Runtime/PlayerSettings/HotfixMainResDomain.cs
mzh 428b6f50b6 【m】优化HotfixMainResDomain配置文件
1.添加配置文件全局获取方法HotfixMainResDomain.Get,含不存在时补充创建逻辑
2.优化加载场景的缺失提示和获取途径,处理选中配置文件时循环报错的问题
3.添加包体配置项,允许对子包配置做独立处理
2026-03-31 15:29:50 +08:00

131 lines
3.7 KiB
C#

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>("HotfixMainResDomain");
}
// 无该配置时尝试创建
else if (globalInstance == null)
{
globalInstance = CreateInstance<HotfixMainResDomain>();
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
{
/// <summary>
/// 项目中文名称
/// </summary>
public string projectName;
/// <summary>
/// 项目代号
/// </summary>
public string projectCode;
/// <summary>
/// 项目包名
/// </summary>
[ReadOnly]
public string projectPackageName;
/// <summary>
/// 资源加载场景
/// </summary>
[LabelText("资源加载场景")]
[Required("如果需要场景作为资源加载过程中的过渡,请将其拖到此处")]
public SceneAsset loadingScene;
/// <summary>
/// 资源加载场景(路径)
/// </summary>
public string loadingScenePath => AssetDatabase.GetAssetPath(loadingScene);
}
[Serializable]
public class BuildConfig
{
[LabelText("包体配置")]
private List<PackageConfig> 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;
}
}