mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-06-29 09:53:57 +00:00
Compare commits
17 Commits
2.3.9
...
ac1e78144e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ac1e78144e | ||
|
|
ae087453d9 | ||
|
|
31c79f3f84 | ||
|
|
4293d70f85 | ||
|
|
6f5bc1b628 | ||
|
|
453cb26500 | ||
|
|
f35248c119 | ||
|
|
830eb7c460 | ||
|
|
ce4a00ef7c | ||
|
|
986a31cae2 | ||
|
|
1aecb54964 | ||
|
|
33ac8556ce | ||
|
|
517f133b21 | ||
|
|
517830dbef | ||
|
|
4f62b249b4 | ||
|
|
fe7f9bff08 | ||
|
|
e71077f294 |
@@ -196,6 +196,32 @@ namespace YooAsset.Editor
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导入单个报告对象
|
||||
/// </summary>
|
||||
public void ImportSingleReprotFile(ScanReport report)
|
||||
{
|
||||
_reportCombiner = new ScanReportCombiner();
|
||||
|
||||
try
|
||||
{
|
||||
_reportCombiner.Combine(report);
|
||||
|
||||
// 刷新页面
|
||||
RefreshToolbar();
|
||||
FillTableView();
|
||||
RebuildView();
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
_reportCombiner = null;
|
||||
_titleLabel.text = "导入报告失败!";
|
||||
_descLabel.text = e.Message;
|
||||
UnityEngine.Debug.LogError(e.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void ImportSingleBtn_clicked()
|
||||
{
|
||||
string selectFilePath = EditorUtility.OpenFilePanel("导入报告", _lastestOpenFolder, "json");
|
||||
@@ -445,16 +471,32 @@ namespace YooAsset.Editor
|
||||
columnStyle.Units = header.Units;
|
||||
var column = new TableColumn(header.HeaderTitle, header.HeaderTitle, columnStyle);
|
||||
column.MakeCell = () =>
|
||||
{
|
||||
if (header.HeaderType == EHeaderType.AssetObject)
|
||||
{
|
||||
var objectFiled = new ObjectField();
|
||||
return objectFiled;
|
||||
}
|
||||
else
|
||||
{
|
||||
var label = new Label();
|
||||
label.style.marginLeft = 3f;
|
||||
label.style.unityTextAlign = TextAnchor.MiddleLeft;
|
||||
return label;
|
||||
}
|
||||
};
|
||||
column.BindCell = (VisualElement element, ITableData data, ITableCell cell) =>
|
||||
{
|
||||
if (header.HeaderType == EHeaderType.AssetObject)
|
||||
{
|
||||
var objectFiled = element as ObjectField;
|
||||
objectFiled.value = (UnityEngine.Object)cell.GetDisplayObject();
|
||||
}
|
||||
else
|
||||
{
|
||||
var infoLabel = element as Label;
|
||||
infoLabel.text = (string)cell.GetDisplayObject();
|
||||
}
|
||||
};
|
||||
_elementTableView.AddColumn(column);
|
||||
}
|
||||
@@ -480,6 +522,10 @@ namespace YooAsset.Editor
|
||||
{
|
||||
tableData.AddAssetPathCell(scanInfo.HeaderTitle, scanInfo.ScanInfo);
|
||||
}
|
||||
else if (header.HeaderType == EHeaderType.AssetObject)
|
||||
{
|
||||
tableData.AddAssetObjectCell(scanInfo.HeaderTitle, scanInfo.ScanInfo);
|
||||
}
|
||||
else if (header.HeaderType == EHeaderType.StringValue)
|
||||
{
|
||||
tableData.AddStringValueCell(scanInfo.HeaderTitle, scanInfo.ScanInfo);
|
||||
|
||||
@@ -8,6 +8,11 @@ namespace YooAsset.Editor
|
||||
/// </summary>
|
||||
AssetPath,
|
||||
|
||||
/// <summary>
|
||||
/// 资源对象
|
||||
/// </summary>
|
||||
AssetObject,
|
||||
|
||||
/// <summary>
|
||||
/// 字符串
|
||||
/// </summary>
|
||||
|
||||
@@ -126,6 +126,12 @@ namespace YooAsset.Editor
|
||||
if (string.IsNullOrEmpty(guid))
|
||||
throw new Exception($"{HeaderTitle} value is invalid asset path : {value}");
|
||||
}
|
||||
else if (HeaderType == EHeaderType.AssetObject)
|
||||
{
|
||||
string guid = AssetDatabase.AssetPathToGUID(value);
|
||||
if (string.IsNullOrEmpty(guid))
|
||||
throw new Exception($"{HeaderTitle} value is invalid asset object : {value}");
|
||||
}
|
||||
else if (HeaderType == EHeaderType.DoubleValue)
|
||||
{
|
||||
if (double.TryParse(value, out double doubleValue) == false)
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace YooAsset.Editor
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return new ScannerResult(e.Message);
|
||||
return new ScannerResult(e.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace YooAsset.Editor
|
||||
if (Succeed)
|
||||
{
|
||||
var reproterWindow = AssetArtReporterWindow.OpenWindow();
|
||||
reproterWindow.ImportSingleReprotFile(ReprotFilePath);
|
||||
reproterWindow.ImportSingleReprotFile(Report);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -63,7 +68,6 @@ namespace YooAsset.Editor
|
||||
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();
|
||||
@@ -451,6 +467,18 @@ namespace YooAsset.Editor
|
||||
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;
|
||||
|
||||
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
|
||||
{
|
||||
if(package.PackageName.ToLower().Contains(_lowerSearchKey))
|
||||
{
|
||||
ShowSearchBorder(element);
|
||||
}
|
||||
else
|
||||
textField1.text = $"{package.PackageName} ({package.PackageDesc})";
|
||||
{
|
||||
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;
|
||||
|
||||
if(string.IsNullOrWhiteSpace(_lowerSearchKey) == false)
|
||||
{
|
||||
if(group.GroupName.ToLower().Contains(_lowerSearchKey))
|
||||
{
|
||||
ShowSearchBorder(element);
|
||||
}
|
||||
else
|
||||
textField1.text = $"{group.GroupName} ({group.GroupDesc})";
|
||||
{
|
||||
ClearBorder(element);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ClearBorder(element);
|
||||
}
|
||||
|
||||
// 激活状态
|
||||
IActiveRule activeRule = AssetBundleCollectorSettingData.GetActiveRuleInstance(group.ActiveRuleName);
|
||||
@@ -680,6 +843,21 @@ namespace YooAsset.Editor
|
||||
_groupDescTxt.SetValueWithoutNotify(selectGroup.GroupDesc);
|
||||
_groupTagsTxt.SetValueWithoutNotify(selectGroup.AssetTags);
|
||||
|
||||
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);
|
||||
|
||||
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,6 +1195,21 @@ namespace YooAsset.Editor
|
||||
|
||||
// Tags
|
||||
var textFiled1 = element.Q<TextField>("TextField1");
|
||||
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 =>
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
#if UNITY_2019_4_OR_NEWER
|
||||
using UnityEditor;
|
||||
using System;
|
||||
|
||||
namespace YooAsset.Editor
|
||||
{
|
||||
public class AssetObjectCell : ITableCell, IComparable
|
||||
{
|
||||
public string SearchTag { private set; get; }
|
||||
public object CellValue { set; get; }
|
||||
public string StringValue
|
||||
{
|
||||
get
|
||||
{
|
||||
return (string)CellValue;
|
||||
}
|
||||
}
|
||||
|
||||
public AssetObjectCell(string searchTag, string assetPath)
|
||||
{
|
||||
SearchTag = searchTag;
|
||||
CellValue = assetPath;
|
||||
}
|
||||
|
||||
public object GetDisplayObject()
|
||||
{
|
||||
return AssetDatabase.LoadMainAssetAtPath(StringValue);
|
||||
}
|
||||
public int CompareTo(object other)
|
||||
{
|
||||
if (other is AssetObjectCell cell)
|
||||
{
|
||||
return this.StringValue.CompareTo(cell.StringValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 39db4a569a0f69443a7675e19c99c389
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -31,9 +31,14 @@ namespace YooAsset.Editor
|
||||
var cell = new ButtonCell(searchTag);
|
||||
Cells.Add(cell);
|
||||
}
|
||||
public void AddAssetPathCell(string searchTag, string path)
|
||||
public void AddAssetPathCell(string searchTag, string assetPath)
|
||||
{
|
||||
var cell = new AssetPathCell(searchTag, path);
|
||||
var cell = new AssetPathCell(searchTag, assetPath);
|
||||
Cells.Add(cell);
|
||||
}
|
||||
public void AddAssetObjectCell(string searchTag, string assetPath)
|
||||
{
|
||||
var cell = new AssetObjectCell(searchTag, assetPath);
|
||||
Cells.Add(cell);
|
||||
}
|
||||
public void AddStringValueCell(string searchTag, string value)
|
||||
|
||||
@@ -34,6 +34,20 @@ namespace YooAsset
|
||||
return str.Remove(index); //"assets/config/test.unity3d" --> "assets/config/test"
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// URL地址是否包含双斜杠
|
||||
/// 注意:只检查协议之后的部分
|
||||
/// </summary>
|
||||
public static bool HasDoubleSlashes(string url)
|
||||
{
|
||||
if (url == null)
|
||||
throw new ArgumentNullException();
|
||||
|
||||
int protocolIndex = url.IndexOf("://");
|
||||
string partToCheck = protocolIndex == -1 ? url : url.Substring(protocolIndex + 3);
|
||||
return partToCheck.Contains("//") || partToCheck.Contains(@"\\");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 合并路径
|
||||
/// </summary>
|
||||
|
||||
@@ -75,7 +75,14 @@ namespace YooAsset
|
||||
if (_driver != null)
|
||||
GameObject.Destroy(_driver);
|
||||
|
||||
OnApplicationQuit(true);
|
||||
// 终止并清空所有包裹的异步操作
|
||||
ClearAllPackageOperation();
|
||||
|
||||
// 卸载所有AssetBundle
|
||||
AssetBundle.UnloadAllAssetBundles(true);
|
||||
|
||||
// 清空资源包裹列表
|
||||
_packages.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,25 +98,15 @@ namespace YooAsset
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 应用程序退出处理
|
||||
/// 终止并清空所有包裹的异步操作
|
||||
/// </summary>
|
||||
internal static void OnApplicationQuit(bool unloadAllAssetBundles)
|
||||
internal static void ClearAllPackageOperation()
|
||||
{
|
||||
// 说明:在编辑器下确保播放被停止时IO类操作被终止。
|
||||
foreach (var package in _packages)
|
||||
{
|
||||
OperationSystem.ClearPackageOperation(package.PackageName);
|
||||
}
|
||||
OperationSystem.DestroyAll();
|
||||
|
||||
// 清空资源包裹列表
|
||||
_packages.Clear();
|
||||
|
||||
// 卸载所有AssetBundle
|
||||
if (unloadAllAssetBundles)
|
||||
{
|
||||
AssetBundle.UnloadAllAssetBundles(true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -24,7 +24,8 @@ namespace YooAsset
|
||||
#if UNITY_EDITOR
|
||||
void OnApplicationQuit()
|
||||
{
|
||||
YooAssets.OnApplicationQuit(false);
|
||||
// 说明:在编辑器下确保播放被停止时IO类操作被终止。
|
||||
YooAssets.ClearAllPackageOperation();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -198,6 +198,15 @@ internal class WechatFileSystem : IFileSystem
|
||||
RemoteServices = new WebRemoteServices(webRoot);
|
||||
}
|
||||
|
||||
// 检查URL双斜杠
|
||||
// 注意:双斜杠会导致微信插件加载文件失败,但网络请求又不返回失败!
|
||||
{
|
||||
var mainURL = RemoteServices.GetRemoteMainURL("test.bundle");
|
||||
var fallbackURL = RemoteServices.GetRemoteFallbackURL("test.bundle");
|
||||
if (PathUtility.HasDoubleSlashes(mainURL) || PathUtility.HasDoubleSlashes(fallbackURL))
|
||||
throw new Exception($"{nameof(RemoteServices)} returned URL contains double slashes. !");
|
||||
}
|
||||
|
||||
_fileSystemMgr = WX.GetFileSystemManager();
|
||||
}
|
||||
public virtual void OnDestroy()
|
||||
|
||||
Reference in New Issue
Block a user