This commit is contained in:
bao guo
2025-06-09 21:51:22 +08:00
committed by GitHub
2 changed files with 263 additions and 22 deletions

View File

@@ -14,10 +14,15 @@ namespace YooAsset.Editor
[MenuItem("YooAsset/AssetBundle Collector", false, 101)]
public static void OpenWindow()
{
AssetBundleCollectorWindow window = GetWindow<AssetBundleCollectorWindow>("AssetBundle Collector", true, WindowsDefine.DockedWindowTypes);
AssetBundleCollectorWindow window =
GetWindow<AssetBundleCollectorWindow>("AssetBundle Collector", true, WindowsDefine.DockedWindowTypes);
window.minSize = new Vector2(800, 600);
}
private string _lowerSearchKey = string.Empty;
private ToolbarSearchField _searchField;
private Button _saveButton;
private List<string> _collectorTypeList;
private List<RuleDisplayName> _activeRuleList;
@@ -62,8 +67,7 @@ namespace YooAsset.Editor
private int _lastModifyGroupIndex = 0;
private bool _showGlobalSettings = false;
private bool _showPackageSettings = false;
public void CreateGUI()
{
try
@@ -89,6 +93,9 @@ namespace YooAsset.Editor
visualAsset.CloneTree(root);
_searchField = root.Q<ToolbarSearchField>("SearchField");
_searchField.RegisterValueChangedCallback(OnSearchFieldValueChanged);
// 警示栏
_helpBoxContainer = root.Q("HelpBoxContainer");
@@ -358,6 +365,14 @@ namespace YooAsset.Editor
Debug.LogError(e.ToString());
}
}
private void OnSearchFieldValueChanged(ChangeEvent<string> evt)
{
_lowerSearchKey = evt.newValue.ToLower();
RefreshWindow();
}
public void OnEnable()
{
Undo.undoRedoPerformed += RefreshWindow;
@@ -400,6 +415,7 @@ namespace YooAsset.Editor
FillPackageViewData();
RefreshSettings();
}
private void FixBtn_clicked()
{
AssetBundleCollectorSettingData.FixFile();
@@ -450,6 +466,18 @@ namespace YooAsset.Editor
else
return ruleDisplayName.ClassName;
}
private void ShowSearchBorder(VisualElement element)
{
element.style.borderBottomColor = new Color(0.7f,0,0,1);
element.style.borderBottomWidth = 1;
}
private void ClearBorder(VisualElement element)
{
element.style.borderBottomColor = Color.white;
element.style.borderBottomWidth = 0;
}
// 设置栏相关
private void RefreshSettings()
@@ -516,6 +544,13 @@ namespace YooAsset.Editor
#if UNITY_2020_3_OR_NEWER
_helpBoxContainer.Clear();
if (string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
string tips = "Currently in search mode";
var helpBox = new HelpBox(tips, HelpBoxMessageType.Error);
_helpBoxContainer.Add(helpBox);
}
if (_enableAddressableToogle.value && _locationToLowerToogle.value)
{
string tips = "The [Enable Addressable] option and [Location To Lower] option cannot be enabled at the same time.";
@@ -542,7 +577,69 @@ namespace YooAsset.Editor
{
_packageListView.Clear();
_packageListView.ClearSelection();
_packageListView.itemsSource = AssetBundleCollectorSettingData.Setting.Packages;
List<AssetBundleCollectorPackage> packages = null;
if (string.IsNullOrWhiteSpace(_lowerSearchKey))
{
packages = AssetBundleCollectorSettingData.Setting.Packages;
}
else
{
packages = new List<AssetBundleCollectorPackage>();
foreach (var package in AssetBundleCollectorSettingData.Setting.Packages)
{
//检查packageName
if (package.PackageName.ToLower().Contains(_lowerSearchKey))
{
packages.Add(package);
continue;
}
//检查Groups和GroupAssetTags
foreach (var group in package.Groups)
{
if (group.GroupName.ToLower().Contains(_lowerSearchKey))
{
packages.Add(package);
break;
}
if (group.AssetTags.ToLower().Contains(_lowerSearchKey))
{
packages.Add(package);
break;
}
var needAdd = false;
//检查Collectors和tags
foreach (var collector in group.Collectors)
{
if (collector.CollectPath.ToLower().Contains(_lowerSearchKey))
{
needAdd = true;
break;
}
if (collector.AssetTags.ToLower().Contains(_lowerSearchKey))
{
needAdd = true;
break;
}
}
if (needAdd)
{
packages.Add(package);
break;
}
}
}
}
_packageListView.itemsSource = packages;
_packageListView.Rebuild();
if (_lastModifyPackageIndex >= 0 && _lastModifyPackageIndex < _packageListView.itemsSource.Count)
@@ -550,6 +647,7 @@ namespace YooAsset.Editor
_packageListView.selectedIndex = _lastModifyPackageIndex;
}
}
private VisualElement MakePackageListViewItem()
{
VisualElement element = new VisualElement();
@@ -567,13 +665,26 @@ namespace YooAsset.Editor
}
private void BindPackageListViewItem(VisualElement element, int index)
{
var package = AssetBundleCollectorSettingData.Setting.Packages[index];
var package = _packageListView.itemsSource[index] as AssetBundleCollectorPackage;
var textField1 = element.Q<Label>("Label1");
if (string.IsNullOrEmpty(package.PackageDesc))
textField1.text = package.PackageName;
else
textField1.text = $"{package.PackageName} ({package.PackageDesc})";
textField1.text = package.PackageName;
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
if(package.PackageName.ToLower().Contains(_lowerSearchKey))
{
ShowSearchBorder(element);
}
else
{
ClearBorder(element);
}
}
else
{
ClearBorder(element);
}
}
private void PackageListView_onSelectionChange(IEnumerable<object> objs)
{
@@ -620,9 +731,48 @@ namespace YooAsset.Editor
if (selectPackage == null)
return;
List<AssetBundleCollectorGroup> displayGroupList = null;
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
displayGroupList = new List<AssetBundleCollectorGroup>();
foreach(var group in selectPackage.Groups)
{
if(group.GroupName.ToLower().Contains(_lowerSearchKey))
{
displayGroupList.Add(group);
}
else if(group.AssetTags.ToLower().Contains(_lowerSearchKey))
{
displayGroupList.Add(group);
}
else
{
foreach(var collector in group.Collectors)
{
if(collector.CollectPath.ToLower().Contains(_lowerSearchKey))
{
displayGroupList.Add(group);
break;
}
if(collector.AssetTags.ToLower().Contains(_lowerSearchKey))
{
displayGroupList.Add(group);
break;
}
}
}
}
}
else
{
displayGroupList = selectPackage.Groups;
}
_groupListView.Clear();
_groupListView.ClearSelection();
_groupListView.itemsSource = selectPackage.Groups;
_groupListView.itemsSource = displayGroupList;
_groupListView.Rebuild();
if (_lastModifyGroupIndex >= 0 && _lastModifyGroupIndex < _groupListView.itemsSource.Count)
@@ -651,13 +801,26 @@ namespace YooAsset.Editor
if (selectPackage == null)
return;
var group = selectPackage.Groups[index];
var group = _groupListView.itemsSource[index] as AssetBundleCollectorGroup;
var textField1 = element.Q<Label>("Label1");
if (string.IsNullOrEmpty(group.GroupDesc))
textField1.text = group.GroupName;
else
textField1.text = $"{group.GroupName} ({group.GroupDesc})";
textField1.text = group.GroupName;
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
if(group.GroupName.ToLower().Contains(_lowerSearchKey))
{
ShowSearchBorder(element);
}
else
{
ClearBorder(element);
}
}
else
{
ClearBorder(element);
}
// 激活状态
IActiveRule activeRule = AssetBundleCollectorSettingData.GetActiveRuleInstance(group.ActiveRuleName);
@@ -679,8 +842,23 @@ namespace YooAsset.Editor
_groupNameTxt.SetValueWithoutNotify(selectGroup.GroupName);
_groupDescTxt.SetValueWithoutNotify(selectGroup.GroupDesc);
_groupTagsTxt.SetValueWithoutNotify(selectGroup.AssetTags);
FillCollectorViewData();
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
if(selectGroup.AssetTags.ToLower().Contains(_lowerSearchKey))
{
ShowSearchBorder(_groupTagsTxt);
}
else
{
ClearBorder(_groupTagsTxt);
}
}
else
{
ClearBorder(_groupTagsTxt);
}
FillCollectorViewData();
}
private void AddGroupBtn_clicked()
{
@@ -718,6 +896,19 @@ namespace YooAsset.Editor
_collectorScrollView.Clear();
for (int i = 0; i < selectGroup.Collectors.Count; i++)
{
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
if(selectGroup.Collectors[i].CollectPath.ToLower().Contains(_lowerSearchKey))
{
}
else if(selectGroup.Collectors[i].AssetTags.ToLower().Contains(_lowerSearchKey))
{
}
else
{
continue;
}
}
VisualElement element = MakeCollectorListViewItem();
BindCollectorListViewItem(element, i);
_collectorScrollView.Add(element);
@@ -881,11 +1072,45 @@ namespace YooAsset.Editor
// Collector Path
var objectField1 = element.Q<ObjectField>("ObjectField1");
objectField1.SetValueWithoutNotify(collectObject);
objectField1.RegisterValueChangedCallback(evt =>
if (string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
if (collector.CollectPath.ToLower().Contains(_lowerSearchKey))
{
ShowSearchBorder(objectField1);
}
else
{
ClearBorder(objectField1);
}
}
else
{
ClearBorder(objectField1);
}
objectField1.RegisterValueChangedCallback(evt =>
{
collector.CollectPath = AssetDatabase.GetAssetPath(evt.newValue);
collector.CollectorGUID = AssetDatabase.AssetPathToGUID(collector.CollectPath);
objectField1.value.name = collector.CollectPath;
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
if(collector.CollectPath.ToLower().Contains(_lowerSearchKey))
{
ShowSearchBorder(objectField1);
}
else
{
ClearBorder(objectField1);
}
}
else
{
ClearBorder(objectField1);
}
AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
if (foldout.value)
{
@@ -970,7 +1195,22 @@ namespace YooAsset.Editor
// Tags
var textFiled1 = element.Q<TextField>("TextField1");
textFiled1.SetValueWithoutNotify(collector.AssetTags);
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
{
if(collector.AssetTags.ToLower().Contains(_lowerSearchKey))
{
ShowSearchBorder(textFiled1);
}
else
{
ClearBorder(textFiled1);
}
}
else
{
ClearBorder(textFiled1);
}
textFiled1.SetValueWithoutNotify(collector.AssetTags);
textFiled1.RegisterValueChangedCallback(evt =>
{
collector.AssetTags = evt.newValue;

View File

@@ -4,6 +4,7 @@
<ui:Button text="Export" display-tooltip-when-elided="true" name="ExportButton" style="width: 50px; background-color: rgb(56, 147, 58);" />
<ui:Button text="Import" display-tooltip-when-elided="true" name="ImportButton" style="width: 50px; background-color: rgb(56, 147, 58);" />
<ui:Button text="Fix" display-tooltip-when-elided="true" name="FixButton" style="width: 50px; background-color: rgb(56, 147, 58);" />
<uie:ToolbarSearchField name="SearchField" />
</uie:Toolbar>
<ui:VisualElement name="PublicContainer" style="background-color: rgb(79, 79, 79); border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px;">
<ui:VisualElement name="HelpBoxContainer" style="flex-grow: 1;" />
@@ -28,7 +29,7 @@
<ui:VisualElement name="ContentContainer" style="flex-grow: 1; flex-direction: row;">
<ui:VisualElement name="PackageContainer" 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:Label text="Packages" display-tooltip-when-elided="true" name="PackageTitle" style="background-color: rgb(89, 89, 89); -unity-text-align: upper-center; -unity-font-style: bold; border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px; font-size: 12px;" />
<ui:ListView focusable="true" name="PackageListView" item-height="20" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" style="flex-grow: 1;" />
<ui:ListView focusable="true" name="PackageListView" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" fixed-item-height="20" style="flex-grow: 1;" />
<ui:VisualElement name="PackageAddContainer" style="height: 20px; flex-direction: row; justify-content: center;">
<ui:Button text=" - " display-tooltip-when-elided="true" name="RemoveBtn" />
<ui:Button text=" + " display-tooltip-when-elided="true" name="AddBtn" />
@@ -38,7 +39,7 @@
<ui:Label text="Groups" display-tooltip-when-elided="true" name="GroupTitle" style="background-color: rgb(89, 89, 89); -unity-text-align: upper-center; -unity-font-style: bold; border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px; font-size: 12px;" />
<ui:TextField picking-mode="Ignore" label="Package Name" name="PackageName" style="flex-direction: column;" />
<ui:TextField picking-mode="Ignore" label="Package Desc" name="PackageDesc" style="flex-direction: column;" />
<ui:ListView focusable="true" name="GroupListView" item-height="20" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" style="flex-grow: 1;" />
<ui:ListView focusable="true" name="GroupListView" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" fixed-item-height="20" style="flex-grow: 1;" />
<ui:VisualElement name="GroupAddContainer" style="height: 20px; flex-direction: row; justify-content: center;">
<ui:Button text=" - " display-tooltip-when-elided="true" name="RemoveBtn" />
<ui:Button text=" + " display-tooltip-when-elided="true" name="AddBtn" />
@@ -49,7 +50,7 @@
<ui:VisualElement name="ActiveRuleContainer" style="height: 20px;" />
<ui:TextField picking-mode="Ignore" label="Group Name" name="GroupName" />
<ui:TextField picking-mode="Ignore" label="Group Desc" name="GroupDesc" />
<ui:TextField picking-mode="Ignore" label="Asset Tags" name="GroupTags" />
<ui:TextField picking-mode="Ignore" label="Asset Tags" name="GroupTags" style="border-left-color: rgb(255, 255, 255); border-right-color: rgb(255, 255, 255); border-top-color: rgb(255, 255, 255); border-bottom-color: rgb(255, 255, 255); border-top-width: 0; border-right-width: 0; border-bottom-width: 0; border-left-width: 0; border-top-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0;" />
<ui:VisualElement name="CollectorAddContainer" style="height: 20px; flex-direction: row-reverse;">
<ui:Button text="[ + ]" display-tooltip-when-elided="true" name="AddBtn" />
</ui:VisualElement>