AssetBundleCollectorWindow.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. #if UNITY_2019_4_OR_NEWER
  2. using System.IO;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5. using UnityEditor;
  6. using UnityEngine;
  7. using UnityEditor.UIElements;
  8. using UnityEngine.UIElements;
  9. namespace YooAsset.Editor
  10. {
  11. public class AssetBundleCollectorWindow : EditorWindow
  12. {
  13. [MenuItem("YooAsset/AssetBundle Collector", false, 101)]
  14. public static void ShowExample()
  15. {
  16. AssetBundleCollectorWindow window = GetWindow<AssetBundleCollectorWindow>("资源包收集工具", true, EditorDefine.DockedWindowTypes);
  17. window.minSize = new Vector2(800, 600);
  18. }
  19. private Button _saveButton;
  20. private List<string> _collectorTypeList;
  21. private List<string> _activeRuleList;
  22. private List<string> _addressRuleList;
  23. private List<string> _packRuleList;
  24. private List<string> _filterRuleList;
  25. private ListView _groupListView;
  26. private ScrollView _collectorScrollView;
  27. private PopupField<string> _activeRulePopupField;
  28. private Toggle _enableAddressableToogle;
  29. private TextField _groupNameTxt;
  30. private TextField _groupDescTxt;
  31. private TextField _groupAssetTagsTxt;
  32. private VisualElement _groupContainer;
  33. private string _lastModifyGroup = string.Empty;
  34. public void CreateGUI()
  35. {
  36. Undo.undoRedoPerformed -= RefreshWindow;
  37. Undo.undoRedoPerformed += RefreshWindow;
  38. try
  39. {
  40. _collectorTypeList = new List<string>()
  41. {
  42. $"{nameof(ECollectorType.MainAssetCollector)}",
  43. $"{nameof(ECollectorType.StaticAssetCollector)}",
  44. $"{nameof(ECollectorType.DependAssetCollector)}"
  45. };
  46. _activeRuleList = AssetBundleCollectorSettingData.GetActiveRuleNames();
  47. _addressRuleList = AssetBundleCollectorSettingData.GetAddressRuleNames();
  48. _packRuleList = AssetBundleCollectorSettingData.GetPackRuleNames();
  49. _filterRuleList = AssetBundleCollectorSettingData.GetFilterRuleNames();
  50. VisualElement root = this.rootVisualElement;
  51. // 加载布局文件
  52. var visualAsset = EditorHelper.LoadWindowUXML<AssetBundleCollectorWindow>();
  53. if (visualAsset == null)
  54. return;
  55. visualAsset.CloneTree(root);
  56. // 配置修复按钮
  57. var fixBtn = root.Q<Button>("FixButton");
  58. fixBtn.clicked += FixBtn_clicked;
  59. // 导入导出按钮
  60. var exportBtn = root.Q<Button>("ExportButton");
  61. exportBtn.clicked += ExportBtn_clicked;
  62. var importBtn = root.Q<Button>("ImportButton");
  63. importBtn.clicked += ImportBtn_clicked;
  64. // 配置保存按钮
  65. _saveButton = root.Q<Button>("SaveButton");
  66. _saveButton.clicked += SaveBtn_clicked;
  67. // 公共设置相关
  68. _enableAddressableToogle = root.Q<Toggle>("EnableAddressable");
  69. _enableAddressableToogle.RegisterValueChangedCallback(evt =>
  70. {
  71. AssetBundleCollectorSettingData.ModifyAddressable(evt.newValue);
  72. RefreshWindow();
  73. });
  74. // 分组列表相关
  75. _groupListView = root.Q<ListView>("GroupListView");
  76. _groupListView.makeItem = MakeGroupListViewItem;
  77. _groupListView.bindItem = BindGroupListViewItem;
  78. #if UNITY_2020_1_OR_NEWER
  79. _groupListView.onSelectionChange += GroupListView_onSelectionChange;
  80. #else
  81. _groupListView.onSelectionChanged += GroupListView_onSelectionChange;
  82. #endif
  83. // 分组添加删除按钮
  84. var groupAddContainer = root.Q("GroupAddContainer");
  85. {
  86. var addBtn = groupAddContainer.Q<Button>("AddBtn");
  87. addBtn.clicked += AddGroupBtn_clicked;
  88. var removeBtn = groupAddContainer.Q<Button>("RemoveBtn");
  89. removeBtn.clicked += RemoveGroupBtn_clicked;
  90. }
  91. // 分组容器
  92. _groupContainer = root.Q("GroupContainer");
  93. // 分组名称
  94. _groupNameTxt = root.Q<TextField>("GroupName");
  95. _groupNameTxt.RegisterValueChangedCallback(evt =>
  96. {
  97. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  98. if (selectGroup != null)
  99. {
  100. selectGroup.GroupName = evt.newValue;
  101. AssetBundleCollectorSettingData.ModifyGroup(selectGroup);
  102. }
  103. });
  104. // 分组备注
  105. _groupDescTxt = root.Q<TextField>("GroupDesc");
  106. _groupDescTxt.RegisterValueChangedCallback(evt =>
  107. {
  108. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  109. if (selectGroup != null)
  110. {
  111. selectGroup.GroupDesc = evt.newValue;
  112. AssetBundleCollectorSettingData.ModifyGroup(selectGroup);
  113. }
  114. });
  115. // 分组的资源标签
  116. _groupAssetTagsTxt = root.Q<TextField>("GroupAssetTags");
  117. _groupAssetTagsTxt.RegisterValueChangedCallback(evt =>
  118. {
  119. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  120. if (selectGroup != null)
  121. {
  122. selectGroup.AssetTags = evt.newValue;
  123. AssetBundleCollectorSettingData.ModifyGroup(selectGroup);
  124. }
  125. });
  126. // 收集列表相关
  127. _collectorScrollView = root.Q<ScrollView>("CollectorScrollView");
  128. _collectorScrollView.style.height = new Length(100, LengthUnit.Percent);
  129. _collectorScrollView.viewDataKey = "scrollView";
  130. // 收集器创建按钮
  131. var collectorAddContainer = root.Q("CollectorAddContainer");
  132. {
  133. var addBtn = collectorAddContainer.Q<Button>("AddBtn");
  134. addBtn.clicked += AddCollectorBtn_clicked;
  135. }
  136. // 分组激活规则
  137. var activeRuleContainer = root.Q("ActiveRuleContainer");
  138. {
  139. _activeRulePopupField = new PopupField<string>("Active Rule", _activeRuleList, 0);
  140. _activeRulePopupField.name = "ActiveRuleMaskField";
  141. _activeRulePopupField.style.unityTextAlign = TextAnchor.MiddleLeft;
  142. activeRuleContainer.Add(_activeRulePopupField);
  143. _activeRulePopupField.RegisterValueChangedCallback(evt =>
  144. {
  145. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  146. if (selectGroup != null)
  147. {
  148. selectGroup.ActiveRuleName = evt.newValue;
  149. AssetBundleCollectorSettingData.ModifyGroup(selectGroup);
  150. FillGroupViewData();
  151. }
  152. });
  153. }
  154. // 刷新窗体
  155. RefreshWindow();
  156. }
  157. catch (System.Exception e)
  158. {
  159. Debug.LogError(e.ToString());
  160. }
  161. }
  162. public void OnDestroy()
  163. {
  164. // 注意:清空所有撤销操作
  165. Undo.ClearAll();
  166. if (AssetBundleCollectorSettingData.IsDirty)
  167. AssetBundleCollectorSettingData.SaveFile();
  168. }
  169. public void Update()
  170. {
  171. if (_saveButton != null)
  172. {
  173. if (AssetBundleCollectorSettingData.IsDirty)
  174. {
  175. if (_saveButton.enabledSelf == false)
  176. _saveButton.SetEnabled(true);
  177. }
  178. else
  179. {
  180. if (_saveButton.enabledSelf)
  181. _saveButton.SetEnabled(false);
  182. }
  183. }
  184. }
  185. private void RefreshWindow()
  186. {
  187. _enableAddressableToogle.SetValueWithoutNotify(AssetBundleCollectorSettingData.Setting.EnableAddressable);
  188. _groupContainer.visible = false;
  189. FillGroupViewData();
  190. }
  191. private void FixBtn_clicked()
  192. {
  193. AssetBundleCollectorSettingData.FixFile();
  194. }
  195. private void ExportBtn_clicked()
  196. {
  197. string resultPath = EditorTools.OpenFolderPanel("Export XML", "Assets/");
  198. if (resultPath != null)
  199. {
  200. AssetBundleCollectorConfig.ExportXmlConfig($"{resultPath}/{nameof(AssetBundleCollectorConfig)}.xml");
  201. }
  202. }
  203. private void ImportBtn_clicked()
  204. {
  205. string resultPath = EditorTools.OpenFilePath("Import XML", "Assets/", "xml");
  206. if (resultPath != null)
  207. {
  208. AssetBundleCollectorConfig.ImportXmlConfig(resultPath);
  209. RefreshWindow();
  210. }
  211. }
  212. private void SaveBtn_clicked()
  213. {
  214. AssetBundleCollectorSettingData.SaveFile();
  215. }
  216. // 分组列表相关
  217. private void FillGroupViewData()
  218. {
  219. _groupListView.Clear();
  220. _groupListView.ClearSelection();
  221. _groupListView.itemsSource = AssetBundleCollectorSettingData.Setting.Groups;
  222. _groupListView.Rebuild();
  223. for (int index = 0; index < AssetBundleCollectorSettingData.Setting.Groups.Count; index++)
  224. {
  225. var group = AssetBundleCollectorSettingData.Setting.Groups[index];
  226. if (group.GroupName == _lastModifyGroup)
  227. {
  228. _groupListView.selectedIndex = index;
  229. break;
  230. }
  231. }
  232. }
  233. private VisualElement MakeGroupListViewItem()
  234. {
  235. VisualElement element = new VisualElement();
  236. {
  237. var label = new Label();
  238. label.name = "Label1";
  239. label.style.unityTextAlign = TextAnchor.MiddleLeft;
  240. label.style.flexGrow = 1f;
  241. label.style.height = 20f;
  242. element.Add(label);
  243. }
  244. return element;
  245. }
  246. private void BindGroupListViewItem(VisualElement element, int index)
  247. {
  248. var group = AssetBundleCollectorSettingData.Setting.Groups[index];
  249. // Group Name
  250. var textField1 = element.Q<Label>("Label1");
  251. if (string.IsNullOrEmpty(group.GroupDesc))
  252. textField1.text = group.GroupName;
  253. else
  254. textField1.text = $"{group.GroupName} ({group.GroupDesc})";
  255. // 激活状态
  256. IActiveRule activeRule = AssetBundleCollectorSettingData.GetActiveRuleInstance(group.ActiveRuleName);
  257. bool isActive = activeRule.IsActiveGroup();
  258. textField1.SetEnabled(isActive);
  259. }
  260. private void GroupListView_onSelectionChange(IEnumerable<object> objs)
  261. {
  262. FillCollectorViewData();
  263. }
  264. private void AddGroupBtn_clicked()
  265. {
  266. Undo.RecordObject(AssetBundleCollectorSettingData.Setting, "YooAsset.AssetBundleCollectorWindow AddGroup");
  267. AssetBundleCollectorSettingData.CreateGroup("Default Group");
  268. FillGroupViewData();
  269. }
  270. private void RemoveGroupBtn_clicked()
  271. {
  272. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  273. if (selectGroup == null)
  274. return;
  275. Undo.RecordObject(AssetBundleCollectorSettingData.Setting, "YooAsset.AssetBundleCollectorWindow RemoveGroup");
  276. AssetBundleCollectorSettingData.RemoveGroup(selectGroup);
  277. FillGroupViewData();
  278. }
  279. // 收集列表相关
  280. private void FillCollectorViewData()
  281. {
  282. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  283. if (selectGroup == null)
  284. {
  285. _groupContainer.visible = false;
  286. return;
  287. }
  288. _lastModifyGroup = selectGroup.GroupName;
  289. _groupContainer.visible = true;
  290. _activeRulePopupField.SetValueWithoutNotify(selectGroup.ActiveRuleName);
  291. _groupNameTxt.SetValueWithoutNotify(selectGroup.GroupName);
  292. _groupDescTxt.SetValueWithoutNotify(selectGroup.GroupDesc);
  293. _groupAssetTagsTxt.SetValueWithoutNotify(selectGroup.AssetTags);
  294. // 填充数据
  295. _collectorScrollView.Clear();
  296. for (int i = 0; i < selectGroup.Collectors.Count; i++)
  297. {
  298. VisualElement element = MakeCollectorListViewItem();
  299. BindCollectorListViewItem(element, i);
  300. _collectorScrollView.Add(element);
  301. }
  302. }
  303. private VisualElement MakeCollectorListViewItem()
  304. {
  305. VisualElement element = new VisualElement();
  306. VisualElement elementTop = new VisualElement();
  307. elementTop.style.flexDirection = FlexDirection.Row;
  308. element.Add(elementTop);
  309. VisualElement elementBottom = new VisualElement();
  310. elementBottom.style.flexDirection = FlexDirection.Row;
  311. element.Add(elementBottom);
  312. VisualElement elementFoldout = new VisualElement();
  313. elementFoldout.style.flexDirection = FlexDirection.Row;
  314. element.Add(elementFoldout);
  315. VisualElement elementSpace = new VisualElement();
  316. elementSpace.style.flexDirection = FlexDirection.Column;
  317. element.Add(elementSpace);
  318. // Top VisualElement
  319. {
  320. var button = new Button();
  321. button.name = "Button1";
  322. button.text = "-";
  323. button.style.unityTextAlign = TextAnchor.MiddleCenter;
  324. button.style.flexGrow = 0f;
  325. elementTop.Add(button);
  326. }
  327. {
  328. var objectField = new ObjectField();
  329. objectField.name = "ObjectField1";
  330. objectField.label = "Collector";
  331. objectField.objectType = typeof(UnityEngine.Object);
  332. objectField.style.unityTextAlign = TextAnchor.MiddleLeft;
  333. objectField.style.flexGrow = 1f;
  334. elementTop.Add(objectField);
  335. var label = objectField.Q<Label>();
  336. label.style.minWidth = 63;
  337. }
  338. // Bottom VisualElement
  339. {
  340. var label = new Label();
  341. label.style.width = 90;
  342. elementBottom.Add(label);
  343. }
  344. {
  345. var popupField = new PopupField<string>(_collectorTypeList, 0);
  346. popupField.name = "PopupField0";
  347. popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
  348. popupField.style.width = 150;
  349. elementBottom.Add(popupField);
  350. }
  351. if (_enableAddressableToogle.value)
  352. {
  353. var popupField = new PopupField<string>(_addressRuleList, 0);
  354. popupField.name = "PopupField1";
  355. popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
  356. popupField.style.width = 200;
  357. elementBottom.Add(popupField);
  358. }
  359. {
  360. var popupField = new PopupField<string>(_packRuleList, 0);
  361. popupField.name = "PopupField2";
  362. popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
  363. popupField.style.width = 150;
  364. elementBottom.Add(popupField);
  365. }
  366. {
  367. var popupField = new PopupField<string>(_filterRuleList, 0);
  368. popupField.name = "PopupField3";
  369. popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
  370. popupField.style.width = 150;
  371. elementBottom.Add(popupField);
  372. }
  373. {
  374. var textField = new TextField();
  375. textField.name = "TextField1";
  376. textField.label = "Tags";
  377. textField.style.width = 100;
  378. textField.style.marginLeft = 20;
  379. textField.style.flexGrow = 1;
  380. elementBottom.Add(textField);
  381. var label = textField.Q<Label>();
  382. label.style.minWidth = 40;
  383. }
  384. // Foldout VisualElement
  385. {
  386. var label = new Label();
  387. label.style.width = 90;
  388. elementFoldout.Add(label);
  389. }
  390. {
  391. var foldout = new Foldout();
  392. foldout.name = "Foldout1";
  393. foldout.value = false;
  394. foldout.text = "Main Assets";
  395. elementFoldout.Add(foldout);
  396. }
  397. // Space VisualElement
  398. {
  399. var label = new Label();
  400. label.style.height = 10;
  401. elementSpace.Add(label);
  402. }
  403. return element;
  404. }
  405. private void BindCollectorListViewItem(VisualElement element, int index)
  406. {
  407. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  408. if (selectGroup == null)
  409. return;
  410. var collector = selectGroup.Collectors[index];
  411. var collectObject = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(collector.CollectPath);
  412. if (collectObject != null)
  413. collectObject.name = collector.CollectPath;
  414. // Foldout
  415. var foldout = element.Q<Foldout>("Foldout1");
  416. foldout.RegisterValueChangedCallback(evt =>
  417. {
  418. if (evt.newValue)
  419. RefreshFoldout(foldout, selectGroup, collector);
  420. else
  421. foldout.Clear();
  422. });
  423. // Remove Button
  424. var removeBtn = element.Q<Button>("Button1");
  425. removeBtn.clicked += () =>
  426. {
  427. RemoveCollectorBtn_clicked(collector);
  428. };
  429. // Collector Path
  430. var objectField1 = element.Q<ObjectField>("ObjectField1");
  431. objectField1.SetValueWithoutNotify(collectObject);
  432. objectField1.RegisterValueChangedCallback(evt =>
  433. {
  434. collector.CollectPath = AssetDatabase.GetAssetPath(evt.newValue);
  435. collector.CollectorGUID = AssetDatabase.AssetPathToGUID(collector.CollectPath);
  436. objectField1.value.name = collector.CollectPath;
  437. AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
  438. if (foldout.value)
  439. {
  440. RefreshFoldout(foldout, selectGroup, collector);
  441. }
  442. });
  443. // Collector Type
  444. var popupField0 = element.Q<PopupField<string>>("PopupField0");
  445. popupField0.index = GetCollectorTypeIndex(collector.CollectorType.ToString());
  446. popupField0.RegisterValueChangedCallback(evt =>
  447. {
  448. collector.CollectorType = StringUtility.NameToEnum<ECollectorType>(evt.newValue);
  449. AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
  450. if (foldout.value)
  451. {
  452. RefreshFoldout(foldout, selectGroup, collector);
  453. }
  454. });
  455. // Address Rule
  456. var popupField1 = element.Q<PopupField<string>>("PopupField1");
  457. if (popupField1 != null)
  458. {
  459. popupField1.index = GetAddressRuleIndex(collector.AddressRuleName);
  460. popupField1.RegisterValueChangedCallback(evt =>
  461. {
  462. collector.AddressRuleName = evt.newValue;
  463. AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
  464. if (foldout.value)
  465. {
  466. RefreshFoldout(foldout, selectGroup, collector);
  467. }
  468. });
  469. }
  470. // Pack Rule
  471. var popupField2 = element.Q<PopupField<string>>("PopupField2");
  472. popupField2.index = GetPackRuleIndex(collector.PackRuleName);
  473. popupField2.RegisterValueChangedCallback(evt =>
  474. {
  475. collector.PackRuleName = evt.newValue;
  476. AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
  477. if (foldout.value)
  478. {
  479. RefreshFoldout(foldout, selectGroup, collector);
  480. }
  481. });
  482. // Filter Rule
  483. var popupField3 = element.Q<PopupField<string>>("PopupField3");
  484. popupField3.index = GetFilterRuleIndex(collector.FilterRuleName);
  485. popupField3.RegisterValueChangedCallback(evt =>
  486. {
  487. collector.FilterRuleName = evt.newValue;
  488. AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
  489. if (foldout.value)
  490. {
  491. RefreshFoldout(foldout, selectGroup, collector);
  492. }
  493. });
  494. // Tags
  495. var textFiled1 = element.Q<TextField>("TextField1");
  496. textFiled1.SetValueWithoutNotify(collector.AssetTags);
  497. textFiled1.RegisterValueChangedCallback(evt =>
  498. {
  499. collector.AssetTags = evt.newValue;
  500. AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
  501. });
  502. }
  503. private void RefreshFoldout(Foldout foldout, AssetBundleCollectorGroup group, AssetBundleCollector collector)
  504. {
  505. // 清空旧元素
  506. foldout.Clear();
  507. if (collector.IsValid() == false)
  508. {
  509. Debug.LogWarning($"The collector is invalid : {collector.CollectPath} in group : {group.GroupName}");
  510. return;
  511. }
  512. if (collector.CollectorType == ECollectorType.MainAssetCollector || collector.CollectorType == ECollectorType.StaticAssetCollector)
  513. {
  514. List<CollectAssetInfo> collectAssetInfos = null;
  515. try
  516. {
  517. collectAssetInfos = collector.GetAllCollectAssets(EBuildMode.DryRunBuild, group);
  518. }
  519. catch (System.Exception e)
  520. {
  521. Debug.LogError(e.ToString());
  522. }
  523. if (collectAssetInfos != null)
  524. {
  525. foreach (var collectAssetInfo in collectAssetInfos)
  526. {
  527. VisualElement elementRow = new VisualElement();
  528. elementRow.style.flexDirection = FlexDirection.Row;
  529. foldout.Add(elementRow);
  530. string showInfo = collectAssetInfo.AssetPath;
  531. if (_enableAddressableToogle.value)
  532. {
  533. IAddressRule instance = AssetBundleCollectorSettingData.GetAddressRuleInstance(collector.AddressRuleName);
  534. AddressRuleData ruleData = new AddressRuleData(collectAssetInfo.AssetPath, collector.CollectPath, group.GroupName);
  535. string addressValue = instance.GetAssetAddress(ruleData);
  536. showInfo = $"[{addressValue}] {showInfo}";
  537. }
  538. var label = new Label();
  539. label.text = showInfo;
  540. label.style.width = 300;
  541. label.style.marginLeft = 0;
  542. label.style.flexGrow = 1;
  543. elementRow.Add(label);
  544. }
  545. }
  546. }
  547. }
  548. private void AddCollectorBtn_clicked()
  549. {
  550. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  551. if (selectGroup == null)
  552. return;
  553. Undo.RecordObject(AssetBundleCollectorSettingData.Setting, "YooAsset.AssetBundleCollectorWindow AddCollector");
  554. AssetBundleCollectorSettingData.CreateCollector(selectGroup);
  555. FillCollectorViewData();
  556. }
  557. private void RemoveCollectorBtn_clicked(AssetBundleCollector selectCollector)
  558. {
  559. var selectGroup = _groupListView.selectedItem as AssetBundleCollectorGroup;
  560. if (selectGroup == null)
  561. return;
  562. if (selectCollector == null)
  563. return;
  564. Undo.RecordObject(AssetBundleCollectorSettingData.Setting, "YooAsset.AssetBundleCollectorWindow RemoveCollector");
  565. AssetBundleCollectorSettingData.RemoveCollector(selectGroup, selectCollector);
  566. FillCollectorViewData();
  567. }
  568. private int GetCollectorTypeIndex(string typeName)
  569. {
  570. for (int i = 0; i < _collectorTypeList.Count; i++)
  571. {
  572. if (_collectorTypeList[i] == typeName)
  573. return i;
  574. }
  575. return 0;
  576. }
  577. private int GetAddressRuleIndex(string ruleName)
  578. {
  579. for (int i = 0; i < _addressRuleList.Count; i++)
  580. {
  581. if (_addressRuleList[i] == ruleName)
  582. return i;
  583. }
  584. return 0;
  585. }
  586. private int GetPackRuleIndex(string ruleName)
  587. {
  588. for (int i = 0; i < _packRuleList.Count; i++)
  589. {
  590. if (_packRuleList[i] == ruleName)
  591. return i;
  592. }
  593. return 0;
  594. }
  595. private int GetFilterRuleIndex(string ruleName)
  596. {
  597. for (int i = 0; i < _filterRuleList.Count; i++)
  598. {
  599. if (_filterRuleList[i] == ruleName)
  600. return i;
  601. }
  602. return 0;
  603. }
  604. }
  605. }
  606. #endif