Update AssetBundleCollector

增加配置表自我修复功能。
pull/40/head
hevinci 2022-09-22 11:40:30 +08:00
parent a89127df1d
commit 8cec0abf0e
6 changed files with 101 additions and 8 deletions

View File

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEditor; using UnityEditor;
using UnityEngine;
namespace YooAsset.Editor namespace YooAsset.Editor
{ {
@ -14,6 +15,11 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public string CollectPath = string.Empty; public string CollectPath = string.Empty;
/// <summary>
/// 收集器的GUID
/// </summary>
public string CollectorGUID = string.Empty;
/// <summary> /// <summary>
/// 收集器类型 /// 收集器类型
/// </summary> /// </summary>
@ -68,7 +74,8 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public void CheckConfigError() public void CheckConfigError()
{ {
if (AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(CollectPath) == null) string assetGUID = AssetDatabase.AssetPathToGUID(CollectPath);
if (string.IsNullOrEmpty(assetGUID))
throw new Exception($"Invalid collect path : {CollectPath}"); throw new Exception($"Invalid collect path : {CollectPath}");
if (CollectorType == ECollectorType.None) if (CollectorType == ECollectorType.None)
@ -84,6 +91,44 @@ namespace YooAsset.Editor
throw new Exception($"Invalid {nameof(IAddressRule)} class type : {AddressRuleName} in collector : {CollectPath}"); throw new Exception($"Invalid {nameof(IAddressRule)} class type : {AddressRuleName} in collector : {CollectPath}");
} }
/// <summary>
/// 修复配置错误
/// </summary>
public bool FixConfigError()
{
bool isFixed = false;
if (string.IsNullOrEmpty(CollectorGUID) == false)
{
string convertAssetPath = AssetDatabase.GUIDToAssetPath(CollectorGUID);
if (string.IsNullOrEmpty(convertAssetPath))
{
Debug.LogWarning($"Collector GUID {CollectorGUID} is invalid and has been auto removed !");
CollectorGUID = string.Empty;
isFixed = true;
}
else
{
if (CollectPath != convertAssetPath)
{
CollectPath = convertAssetPath;
isFixed = true;
Debug.LogWarning($"Fix collect path : {CollectPath} -> {convertAssetPath}");
}
}
}
/*
string convertGUID = AssetDatabase.AssetPathToGUID(CollectPath);
if(string.IsNullOrEmpty(convertGUID) == false)
{
CollectorGUID = convertGUID;
}
*/
return isFixed;
}
/// <summary> /// <summary>
/// 获取打包收集的资源文件 /// 获取打包收集的资源文件
/// </summary> /// </summary>

View File

@ -20,6 +20,7 @@ namespace YooAsset.Editor
public const string XmlGroupDesc = "GroupDesc"; public const string XmlGroupDesc = "GroupDesc";
public const string XmlCollector = "Collector"; public const string XmlCollector = "Collector";
public const string XmlCollectPath = "CollectPath"; public const string XmlCollectPath = "CollectPath";
public const string XmlCollectorGUID = "CollectGUID";
public const string XmlCollectorType = "CollectType"; public const string XmlCollectorType = "CollectType";
public const string XmlAddressRule = "AddressRule"; public const string XmlAddressRule = "AddressRule";
public const string XmlPackRule = "PackRule"; public const string XmlPackRule = "PackRule";
@ -44,7 +45,7 @@ namespace YooAsset.Editor
// 读取配置版本 // 读取配置版本
string configVersion = root.GetAttribute(XmlVersion); string configVersion = root.GetAttribute(XmlVersion);
if(configVersion != ConfigVersion) if (configVersion != ConfigVersion)
{ {
throw new Exception($"The config version is invalid : {configVersion}"); throw new Exception($"The config version is invalid : {configVersion}");
} }
@ -97,13 +98,18 @@ namespace YooAsset.Editor
if (collectorElement.HasAttribute(XmlAssetTags) == false) if (collectorElement.HasAttribute(XmlAssetTags) == false)
throw new Exception($"Not found attribute {XmlAssetTags} in {XmlCollector}"); throw new Exception($"Not found attribute {XmlAssetTags} in {XmlCollector}");
string collectorGUID = string.Empty;
if (collectorElement.HasAttribute(XmlCollectorGUID))
collectorGUID = collectorElement.GetAttribute(XmlCollectorGUID);
AssetBundleCollector collector = new AssetBundleCollector(); AssetBundleCollector collector = new AssetBundleCollector();
collector.CollectPath = collectorElement.GetAttribute(XmlCollectPath); collector.CollectPath = collectorElement.GetAttribute(XmlCollectPath);
collector.CollectorGUID = collectorGUID;
collector.CollectorType = StringUtility.NameToEnum<ECollectorType>(collectorElement.GetAttribute(XmlCollectorType)); collector.CollectorType = StringUtility.NameToEnum<ECollectorType>(collectorElement.GetAttribute(XmlCollectorType));
collector.AddressRuleName = collectorElement.GetAttribute(XmlAddressRule); collector.AddressRuleName = collectorElement.GetAttribute(XmlAddressRule);
collector.PackRuleName = collectorElement.GetAttribute(XmlPackRule); collector.PackRuleName = collectorElement.GetAttribute(XmlPackRule);
collector.FilterRuleName = collectorElement.GetAttribute(XmlFilterRule); collector.FilterRuleName = collectorElement.GetAttribute(XmlFilterRule);
collector.AssetTags = collectorElement.GetAttribute(XmlAssetTags); ; collector.AssetTags = collectorElement.GetAttribute(XmlAssetTags);
group.Collectors.Add(collector); group.Collectors.Add(collector);
} }
} }
@ -155,6 +161,7 @@ namespace YooAsset.Editor
{ {
var collectorElement = xmlDoc.CreateElement(XmlCollector); var collectorElement = xmlDoc.CreateElement(XmlCollector);
collectorElement.SetAttribute(XmlCollectPath, collector.CollectPath); collectorElement.SetAttribute(XmlCollectPath, collector.CollectPath);
collectorElement.SetAttribute(XmlCollectorGUID, collector.CollectorGUID);
collectorElement.SetAttribute(XmlCollectorType, collector.CollectorType.ToString()); collectorElement.SetAttribute(XmlCollectorType, collector.CollectorType.ToString());
collectorElement.SetAttribute(XmlAddressRule, collector.AddressRuleName); collectorElement.SetAttribute(XmlAddressRule, collector.AddressRuleName);
collectorElement.SetAttribute(XmlPackRule, collector.PackRuleName); collectorElement.SetAttribute(XmlPackRule, collector.PackRuleName);

View File

@ -30,6 +30,26 @@ namespace YooAsset.Editor
} }
} }
/// <summary>
/// 修复配置错误
/// </summary>
public bool FixConfigError()
{
bool result = false;
foreach (var group in Groups)
{
foreach (var collector in group.Collectors)
{
bool isFixed = collector.FixConfigError();
if (isFixed)
{
result = true;
}
}
}
return result;
}
/// <summary> /// <summary>
/// 获取所有的资源标签 /// 获取所有的资源标签
/// </summary> /// </summary>

View File

@ -232,7 +232,7 @@ namespace YooAsset.Editor
} }
/// <summary> /// <summary>
/// 存储文件 /// 存储配置文件
/// </summary> /// </summary>
public static void SaveFile() public static void SaveFile()
{ {
@ -245,6 +245,18 @@ namespace YooAsset.Editor
} }
} }
/// <summary>
/// 修复配置文件
/// </summary>
public static void FixFile()
{
bool isFixed = Setting.FixConfigError();
if (isFixed)
{
IsDirty = true;
}
}
/// <summary> /// <summary>
/// 清空所有数据 /// 清空所有数据
/// </summary> /// </summary>
@ -360,10 +372,9 @@ namespace YooAsset.Editor
} }
// 资源收集器编辑相关 // 资源收集器编辑相关
public static void CreateCollector(AssetBundleCollectorGroup group, string collectPath) public static void CreateCollector(AssetBundleCollectorGroup group)
{ {
AssetBundleCollector collector = new AssetBundleCollector(); AssetBundleCollector collector = new AssetBundleCollector();
collector.CollectPath = collectPath;
group.Collectors.Add(collector); group.Collectors.Add(collector);
IsDirty = true; IsDirty = true;
} }

View File

@ -62,6 +62,10 @@ namespace YooAsset.Editor
visualAsset.CloneTree(root); visualAsset.CloneTree(root);
// 配置修复按钮
var fixBtn = root.Q<Button>("FixButton");
fixBtn.clicked += FixBtn_clicked;
// 导入导出按钮 // 导入导出按钮
var exportBtn = root.Q<Button>("ExportButton"); var exportBtn = root.Q<Button>("ExportButton");
exportBtn.clicked += ExportBtn_clicked; exportBtn.clicked += ExportBtn_clicked;
@ -209,6 +213,10 @@ namespace YooAsset.Editor
FillGroupViewData(); FillGroupViewData();
} }
private void FixBtn_clicked()
{
AssetBundleCollectorSettingData.FixFile();
}
private void ExportBtn_clicked() private void ExportBtn_clicked()
{ {
string resultPath = EditorTools.OpenFolderPanel("Export XML", "Assets/"); string resultPath = EditorTools.OpenFolderPanel("Export XML", "Assets/");
@ -472,6 +480,7 @@ namespace YooAsset.Editor
objectField1.RegisterValueChangedCallback(evt => objectField1.RegisterValueChangedCallback(evt =>
{ {
collector.CollectPath = AssetDatabase.GetAssetPath(evt.newValue); collector.CollectPath = AssetDatabase.GetAssetPath(evt.newValue);
collector.CollectorGUID = AssetDatabase.AssetPathToGUID(collector.CollectPath);
objectField1.value.name = collector.CollectPath; objectField1.value.name = collector.CollectPath;
AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector); AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
if (foldout.value) if (foldout.value)
@ -602,7 +611,7 @@ namespace YooAsset.Editor
return; return;
Undo.RecordObject(AssetBundleCollectorSettingData.Setting, "YooAsset.AssetBundleCollectorWindow AddCollector"); Undo.RecordObject(AssetBundleCollectorSettingData.Setting, "YooAsset.AssetBundleCollectorWindow AddCollector");
AssetBundleCollectorSettingData.CreateCollector(selectGroup, string.Empty); AssetBundleCollectorSettingData.CreateCollector(selectGroup);
FillCollectorViewData(); FillCollectorViewData();
} }
private void RemoveCollectorBtn_clicked(AssetBundleCollector selectCollector) private void RemoveCollectorBtn_clicked(AssetBundleCollector selectCollector)

View File

@ -3,6 +3,7 @@
<ui:Button text="Save" display-tooltip-when-elided="true" name="SaveButton" style="width: 50px; background-color: rgb(56, 147, 58);" /> <ui:Button text="Save" display-tooltip-when-elided="true" name="SaveButton" style="width: 50px; background-color: rgb(56, 147, 58);" />
<ui:Button text="导出" display-tooltip-when-elided="true" name="ExportButton" style="width: 50px; background-color: rgb(56, 147, 58);" /> <ui:Button text="导出" display-tooltip-when-elided="true" name="ExportButton" style="width: 50px; background-color: rgb(56, 147, 58);" />
<ui:Button text="导入" display-tooltip-when-elided="true" name="ImportButton" style="width: 50px; background-color: rgb(56, 147, 58);" /> <ui:Button text="导入" display-tooltip-when-elided="true" name="ImportButton" style="width: 50px; background-color: rgb(56, 147, 58);" />
<ui:Button text="修复" display-tooltip-when-elided="true" name="FixButton" style="width: 50px; background-color: rgb(56, 147, 58);" />
</uie:Toolbar> </uie:Toolbar>
<ui:VisualElement name="ContentContainer" style="flex-grow: 1; flex-direction: row;"> <ui:VisualElement name="ContentContainer" style="flex-grow: 1; flex-direction: row;">
<ui:VisualElement name="LeftContainer" style="width: 200px; flex-grow: 0; background-color: rgb(67, 67, 67); border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px;"> <ui:VisualElement name="LeftContainer" style="width: 200px; flex-grow: 0; background-color: rgb(67, 67, 67); border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px;">