ResourceAnalyzer.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 loyalsoft. All rights reserved.
  4. // Homepage: http://www.game7000.com/
  5. // Feedback: http://www.game7000.com/
  6. //------------------------------------------------------------
  7. using GameFramework;
  8. using System.Collections.Generic;
  9. using UnityEditor;
  10. using UnityEngine;
  11. namespace UnityGameFramework.Editor.ResourceTools
  12. {
  13. /// <summary>
  14. /// 资源分析器。
  15. /// </summary>
  16. internal sealed class ResourceAnalyzer : EditorWindow
  17. {
  18. private ResourceAnalyzerController m_Controller = null;
  19. private bool m_Analyzed = false;
  20. private int m_ToolbarIndex = 0;
  21. private int m_AssetCount = 0;
  22. private string[] m_CachedAssetNames = null;
  23. private int m_SelectedAssetIndex = -1;
  24. private string m_SelectedAssetName = null;
  25. private DependencyData m_SelectedDependencyData = null;
  26. private AssetsOrder m_AssetsOrder = AssetsOrder.AssetNameAsc;
  27. private string m_AssetsFilter = null;
  28. private Vector2 m_AssetsScroll = Vector2.zero;
  29. private Vector2 m_DependencyResourcesScroll = Vector2.zero;
  30. private Vector2 m_DependencyAssetsScroll = Vector2.zero;
  31. private Vector2 m_ScatteredDependencyAssetsScroll = Vector2.zero;
  32. private int m_ScatteredAssetCount = 0;
  33. private string[] m_CachedScatteredAssetNames = null;
  34. private int m_SelectedScatteredAssetIndex = -1;
  35. private string m_SelectedScatteredAssetName = null;
  36. private Asset[] m_SelectedHostAssets = null;
  37. private ScatteredAssetsOrder m_ScatteredAssetsOrder = ScatteredAssetsOrder.AssetNameAsc;
  38. private string m_ScatteredAssetsFilter = null;
  39. private Vector2 m_ScatteredAssetsScroll = Vector2.zero;
  40. private Vector2 m_HostAssetsScroll = Vector2.zero;
  41. private int m_CircularDependencyCount = 0;
  42. private string[][] m_CachedCircularDependencyDatas = null;
  43. private Vector2 m_CircularDependencyScroll = Vector2.zero;
  44. [MenuItem("Game Framework/Resource Tools/Resource Analyzer", false, 42)]
  45. private static void Open()
  46. {
  47. ResourceAnalyzer window = GetWindow<ResourceAnalyzer>("Resource Analyzer", true);
  48. window.minSize = new Vector2(800f, 600f);
  49. }
  50. private void OnEnable()
  51. {
  52. m_Controller = new ResourceAnalyzerController();
  53. m_Controller.OnLoadingResource += OnLoadingResource;
  54. m_Controller.OnLoadingAsset += OnLoadingAsset;
  55. m_Controller.OnLoadCompleted += OnLoadCompleted;
  56. m_Controller.OnAnalyzingAsset += OnAnalyzingAsset;
  57. m_Controller.OnAnalyzeCompleted += OnAnalyzeCompleted;
  58. m_Analyzed = false;
  59. m_ToolbarIndex = 0;
  60. m_AssetCount = 0;
  61. m_CachedAssetNames = null;
  62. m_SelectedAssetIndex = -1;
  63. m_SelectedAssetName = null;
  64. m_SelectedDependencyData = new DependencyData();
  65. m_AssetsOrder = AssetsOrder.ScatteredDependencyAssetCountDesc;
  66. m_AssetsFilter = null;
  67. m_AssetsScroll = Vector2.zero;
  68. m_DependencyResourcesScroll = Vector2.zero;
  69. m_DependencyAssetsScroll = Vector2.zero;
  70. m_ScatteredDependencyAssetsScroll = Vector2.zero;
  71. m_ScatteredAssetCount = 0;
  72. m_CachedScatteredAssetNames = null;
  73. m_SelectedScatteredAssetIndex = -1;
  74. m_SelectedScatteredAssetName = null;
  75. m_SelectedHostAssets = new Asset[] { };
  76. m_ScatteredAssetsOrder = ScatteredAssetsOrder.HostAssetCountDesc;
  77. m_ScatteredAssetsFilter = null;
  78. m_ScatteredAssetsScroll = Vector2.zero;
  79. m_HostAssetsScroll = Vector2.zero;
  80. m_CircularDependencyCount = 0;
  81. m_CachedCircularDependencyDatas = null;
  82. m_CircularDependencyScroll = Vector2.zero;
  83. }
  84. private void OnGUI()
  85. {
  86. EditorGUILayout.BeginVertical(GUILayout.Width(position.width), GUILayout.Height(position.height));
  87. {
  88. GUILayout.Space(5f);
  89. int toolbarIndex = GUILayout.Toolbar(m_ToolbarIndex, new string[] { "Summary", "Asset Dependency Viewer", "Scattered Asset Viewer", "Circular Dependency Viewer" }, GUILayout.Height(30f));
  90. if (toolbarIndex != m_ToolbarIndex)
  91. {
  92. m_ToolbarIndex = toolbarIndex;
  93. GUI.FocusControl(null);
  94. }
  95. switch (m_ToolbarIndex)
  96. {
  97. case 0:
  98. DrawSummary();
  99. break;
  100. case 1:
  101. DrawAssetDependencyViewer();
  102. break;
  103. case 2:
  104. DrawScatteredAssetViewer();
  105. break;
  106. case 3:
  107. DrawCircularDependencyViewer();
  108. break;
  109. }
  110. }
  111. EditorGUILayout.EndVertical();
  112. }
  113. private void DrawAnalyzeButton()
  114. {
  115. if (!m_Analyzed)
  116. {
  117. EditorGUILayout.HelpBox("Please analyze first.", MessageType.Info);
  118. }
  119. if (GUILayout.Button("Analyze", GUILayout.Height(30f)))
  120. {
  121. m_Controller.Clear();
  122. m_SelectedAssetIndex = -1;
  123. m_SelectedAssetName = null;
  124. m_SelectedDependencyData = new DependencyData();
  125. m_SelectedScatteredAssetIndex = -1;
  126. m_SelectedScatteredAssetName = null;
  127. m_SelectedHostAssets = new Asset[] { };
  128. if (m_Controller.Prepare())
  129. {
  130. m_Controller.Analyze();
  131. m_Analyzed = true;
  132. m_AssetCount = m_Controller.GetAssetNames().Length;
  133. m_ScatteredAssetCount = m_Controller.GetScatteredAssetNames().Length;
  134. m_CachedCircularDependencyDatas = m_Controller.GetCircularDependencyDatas();
  135. m_CircularDependencyCount = m_CachedCircularDependencyDatas.Length;
  136. OnAssetsOrderOrFilterChanged();
  137. OnScatteredAssetsOrderOrFilterChanged();
  138. }
  139. else
  140. {
  141. EditorUtility.DisplayDialog("Resource Analyze", "Can not parse 'ResourceCollection.xml', please use 'Resource Editor' tool first.", "OK");
  142. }
  143. }
  144. }
  145. private void DrawSummary()
  146. {
  147. DrawAnalyzeButton();
  148. }
  149. private void DrawAssetDependencyViewer()
  150. {
  151. if (!m_Analyzed)
  152. {
  153. DrawAnalyzeButton();
  154. return;
  155. }
  156. EditorGUILayout.BeginHorizontal();
  157. {
  158. GUILayout.Space(5f);
  159. EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.4f));
  160. {
  161. GUILayout.Space(5f);
  162. string title = null;
  163. if (string.IsNullOrEmpty(m_AssetsFilter))
  164. {
  165. title = Utility.Text.Format("Assets In Resources ({0})", m_AssetCount.ToString());
  166. }
  167. else
  168. {
  169. title = Utility.Text.Format("Assets In Resources ({0}/{1})", m_CachedAssetNames.Length.ToString(), m_AssetCount.ToString());
  170. }
  171. EditorGUILayout.LabelField(title, EditorStyles.boldLabel);
  172. EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height - 150f));
  173. {
  174. m_AssetsScroll = EditorGUILayout.BeginScrollView(m_AssetsScroll);
  175. {
  176. int selectedIndex = GUILayout.SelectionGrid(m_SelectedAssetIndex, m_CachedAssetNames, 1, "toggle");
  177. if (selectedIndex != m_SelectedAssetIndex)
  178. {
  179. m_SelectedAssetIndex = selectedIndex;
  180. m_SelectedAssetName = m_CachedAssetNames[selectedIndex];
  181. m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName);
  182. }
  183. }
  184. EditorGUILayout.EndScrollView();
  185. }
  186. EditorGUILayout.EndVertical();
  187. EditorGUILayout.BeginVertical("box");
  188. {
  189. EditorGUILayout.LabelField("Asset Name", m_SelectedAssetName ?? "<None>");
  190. EditorGUILayout.LabelField("Resource Name", m_SelectedAssetName == null ? "<None>" : m_Controller.GetAsset(m_SelectedAssetName).Resource.FullName);
  191. EditorGUILayout.BeginHorizontal();
  192. {
  193. AssetsOrder assetsOrder = (AssetsOrder)EditorGUILayout.EnumPopup("Order by", m_AssetsOrder);
  194. if (assetsOrder != m_AssetsOrder)
  195. {
  196. m_AssetsOrder = assetsOrder;
  197. OnAssetsOrderOrFilterChanged();
  198. }
  199. }
  200. EditorGUILayout.EndHorizontal();
  201. EditorGUILayout.BeginHorizontal();
  202. {
  203. string assetsFilter = EditorGUILayout.TextField("Assets Filter", m_AssetsFilter);
  204. if (assetsFilter != m_AssetsFilter)
  205. {
  206. m_AssetsFilter = assetsFilter;
  207. OnAssetsOrderOrFilterChanged();
  208. }
  209. EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(m_AssetsFilter));
  210. {
  211. if (GUILayout.Button("x", GUILayout.Width(20f)))
  212. {
  213. m_AssetsFilter = null;
  214. GUI.FocusControl(null);
  215. OnAssetsOrderOrFilterChanged();
  216. }
  217. }
  218. EditorGUI.EndDisabledGroup();
  219. }
  220. EditorGUILayout.EndHorizontal();
  221. }
  222. EditorGUILayout.EndVertical();
  223. }
  224. EditorGUILayout.EndVertical();
  225. EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.6f - 14f));
  226. {
  227. GUILayout.Space(5f);
  228. EditorGUILayout.LabelField(Utility.Text.Format("Dependency Resources ({0})", m_SelectedDependencyData.DependencyResourceCount.ToString()), EditorStyles.boldLabel);
  229. EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.2f));
  230. {
  231. m_DependencyResourcesScroll = EditorGUILayout.BeginScrollView(m_DependencyResourcesScroll);
  232. {
  233. Resource[] dependencyResources = m_SelectedDependencyData.GetDependencyResources();
  234. foreach (Resource dependencyResource in dependencyResources)
  235. {
  236. GUILayout.Label(dependencyResource.FullName);
  237. }
  238. }
  239. EditorGUILayout.EndScrollView();
  240. }
  241. EditorGUILayout.EndVertical();
  242. EditorGUILayout.LabelField(Utility.Text.Format("Dependency Assets ({0})", m_SelectedDependencyData.DependencyAssetCount.ToString()), EditorStyles.boldLabel);
  243. EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.3f));
  244. {
  245. m_DependencyAssetsScroll = EditorGUILayout.BeginScrollView(m_DependencyAssetsScroll);
  246. {
  247. Asset[] dependencyAssets = m_SelectedDependencyData.GetDependencyAssets();
  248. foreach (Asset dependencyAsset in dependencyAssets)
  249. {
  250. EditorGUILayout.BeginHorizontal();
  251. {
  252. if (GUILayout.Button("GO", GUILayout.Width(30f)))
  253. {
  254. m_SelectedAssetName = dependencyAsset.Name;
  255. m_SelectedAssetIndex = new List<string>(m_CachedAssetNames).IndexOf(m_SelectedAssetName);
  256. m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName);
  257. }
  258. GUILayout.Label(dependencyAsset.Name);
  259. }
  260. EditorGUILayout.EndHorizontal();
  261. }
  262. }
  263. EditorGUILayout.EndScrollView();
  264. }
  265. EditorGUILayout.EndVertical();
  266. EditorGUILayout.LabelField(Utility.Text.Format("Scattered Dependency Assets ({0})", m_SelectedDependencyData.ScatteredDependencyAssetCount.ToString()), EditorStyles.boldLabel);
  267. EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.5f - 116f));
  268. {
  269. m_ScatteredDependencyAssetsScroll = EditorGUILayout.BeginScrollView(m_ScatteredDependencyAssetsScroll);
  270. {
  271. string[] scatteredDependencyAssetNames = m_SelectedDependencyData.GetScatteredDependencyAssetNames();
  272. foreach (string scatteredDependencyAssetName in scatteredDependencyAssetNames)
  273. {
  274. EditorGUILayout.BeginHorizontal();
  275. {
  276. int count = m_Controller.GetHostAssets(scatteredDependencyAssetName).Length;
  277. EditorGUI.BeginDisabledGroup(count < 2);
  278. {
  279. if (GUILayout.Button("GO", GUILayout.Width(30f)))
  280. {
  281. m_SelectedScatteredAssetName = scatteredDependencyAssetName;
  282. m_SelectedScatteredAssetIndex = new List<string>(m_CachedScatteredAssetNames).IndexOf(m_SelectedScatteredAssetName);
  283. m_SelectedHostAssets = m_Controller.GetHostAssets(m_SelectedScatteredAssetName);
  284. m_ToolbarIndex = 2;
  285. GUI.FocusControl(null);
  286. }
  287. }
  288. EditorGUI.EndDisabledGroup();
  289. GUILayout.Label(count > 1 ? Utility.Text.Format("{0} ({1})", scatteredDependencyAssetName, count.ToString()) : scatteredDependencyAssetName);
  290. }
  291. EditorGUILayout.EndHorizontal();
  292. }
  293. }
  294. EditorGUILayout.EndScrollView();
  295. }
  296. EditorGUILayout.EndVertical();
  297. }
  298. EditorGUILayout.EndVertical();
  299. }
  300. EditorGUILayout.EndHorizontal();
  301. }
  302. private void DrawScatteredAssetViewer()
  303. {
  304. if (!m_Analyzed)
  305. {
  306. DrawAnalyzeButton();
  307. return;
  308. }
  309. EditorGUILayout.BeginHorizontal();
  310. {
  311. GUILayout.Space(5f);
  312. EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.4f));
  313. {
  314. GUILayout.Space(5f);
  315. string title = null;
  316. if (string.IsNullOrEmpty(m_ScatteredAssetsFilter))
  317. {
  318. title = Utility.Text.Format("Scattered Assets ({0})", m_ScatteredAssetCount.ToString());
  319. }
  320. else
  321. {
  322. title = Utility.Text.Format("Scattered Assets ({0}/{1})", m_CachedScatteredAssetNames.Length.ToString(), m_ScatteredAssetCount.ToString());
  323. }
  324. EditorGUILayout.LabelField(title, EditorStyles.boldLabel);
  325. EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height - 132f));
  326. {
  327. m_ScatteredAssetsScroll = EditorGUILayout.BeginScrollView(m_ScatteredAssetsScroll);
  328. {
  329. int selectedIndex = GUILayout.SelectionGrid(m_SelectedScatteredAssetIndex, m_CachedScatteredAssetNames, 1, "toggle");
  330. if (selectedIndex != m_SelectedScatteredAssetIndex)
  331. {
  332. m_SelectedScatteredAssetIndex = selectedIndex;
  333. m_SelectedScatteredAssetName = m_CachedScatteredAssetNames[selectedIndex];
  334. m_SelectedHostAssets = m_Controller.GetHostAssets(m_SelectedScatteredAssetName);
  335. }
  336. }
  337. EditorGUILayout.EndScrollView();
  338. }
  339. EditorGUILayout.EndVertical();
  340. EditorGUILayout.BeginVertical("box");
  341. {
  342. EditorGUILayout.LabelField("Scattered Asset Name", m_SelectedScatteredAssetName ?? "<None>");
  343. EditorGUILayout.BeginHorizontal();
  344. {
  345. ScatteredAssetsOrder scatteredAssetsOrder = (ScatteredAssetsOrder)EditorGUILayout.EnumPopup("Order by", m_ScatteredAssetsOrder);
  346. if (scatteredAssetsOrder != m_ScatteredAssetsOrder)
  347. {
  348. m_ScatteredAssetsOrder = scatteredAssetsOrder;
  349. OnScatteredAssetsOrderOrFilterChanged();
  350. }
  351. }
  352. EditorGUILayout.EndHorizontal();
  353. EditorGUILayout.BeginHorizontal();
  354. {
  355. string scatteredAssetsFilter = EditorGUILayout.TextField("Assets Filter", m_ScatteredAssetsFilter);
  356. if (scatteredAssetsFilter != m_ScatteredAssetsFilter)
  357. {
  358. m_ScatteredAssetsFilter = scatteredAssetsFilter;
  359. OnScatteredAssetsOrderOrFilterChanged();
  360. }
  361. EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(m_ScatteredAssetsFilter));
  362. {
  363. if (GUILayout.Button("x", GUILayout.Width(20f)))
  364. {
  365. m_ScatteredAssetsFilter = null;
  366. GUI.FocusControl(null);
  367. OnScatteredAssetsOrderOrFilterChanged();
  368. }
  369. }
  370. EditorGUI.EndDisabledGroup();
  371. }
  372. EditorGUILayout.EndHorizontal();
  373. }
  374. EditorGUILayout.EndVertical();
  375. }
  376. EditorGUILayout.EndVertical();
  377. EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.6f - 14f));
  378. {
  379. GUILayout.Space(5f);
  380. EditorGUILayout.LabelField(Utility.Text.Format("Host Assets ({0})", m_SelectedHostAssets.Length.ToString()), EditorStyles.boldLabel);
  381. EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height - 68f));
  382. {
  383. m_HostAssetsScroll = EditorGUILayout.BeginScrollView(m_HostAssetsScroll);
  384. {
  385. foreach (Asset hostAsset in m_SelectedHostAssets)
  386. {
  387. EditorGUILayout.BeginHorizontal();
  388. {
  389. if (GUILayout.Button("GO", GUILayout.Width(30f)))
  390. {
  391. m_SelectedAssetName = hostAsset.Name;
  392. m_SelectedAssetIndex = new List<string>(m_CachedAssetNames).IndexOf(m_SelectedAssetName);
  393. m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName);
  394. m_ToolbarIndex = 1;
  395. GUI.FocusControl(null);
  396. }
  397. GUILayout.Label(Utility.Text.Format("{0} [{1}]", hostAsset.Name, hostAsset.Resource.FullName));
  398. }
  399. EditorGUILayout.EndHorizontal();
  400. }
  401. }
  402. EditorGUILayout.EndScrollView();
  403. }
  404. EditorGUILayout.EndVertical();
  405. }
  406. EditorGUILayout.EndVertical();
  407. }
  408. EditorGUILayout.EndHorizontal();
  409. }
  410. private void DrawCircularDependencyViewer()
  411. {
  412. if (!m_Analyzed)
  413. {
  414. DrawAnalyzeButton();
  415. return;
  416. }
  417. EditorGUILayout.BeginHorizontal();
  418. {
  419. GUILayout.Space(5f);
  420. EditorGUILayout.BeginVertical();
  421. {
  422. GUILayout.Space(5f);
  423. EditorGUILayout.LabelField(Utility.Text.Format("Circular Dependency ({0})", m_CircularDependencyCount.ToString()), EditorStyles.boldLabel);
  424. m_CircularDependencyScroll = EditorGUILayout.BeginScrollView(m_CircularDependencyScroll);
  425. {
  426. int count = 0;
  427. foreach (string[] circularDependencyData in m_CachedCircularDependencyDatas)
  428. {
  429. GUILayout.Label(Utility.Text.Format("{0}) {1}", (++count).ToString(), circularDependencyData[circularDependencyData.Length - 1]), EditorStyles.boldLabel);
  430. EditorGUILayout.BeginVertical("box");
  431. {
  432. foreach (string circularDependency in circularDependencyData)
  433. {
  434. EditorGUILayout.BeginHorizontal();
  435. {
  436. GUILayout.Label(circularDependency);
  437. if (GUILayout.Button("GO", GUILayout.Width(30f)))
  438. {
  439. m_SelectedAssetName = circularDependency;
  440. m_SelectedAssetIndex = new List<string>(m_CachedAssetNames).IndexOf(m_SelectedAssetName);
  441. m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName);
  442. m_ToolbarIndex = 1;
  443. GUI.FocusControl(null);
  444. }
  445. }
  446. EditorGUILayout.EndHorizontal();
  447. }
  448. }
  449. EditorGUILayout.EndVertical();
  450. GUILayout.Space(5f);
  451. }
  452. }
  453. EditorGUILayout.EndScrollView();
  454. }
  455. EditorGUILayout.EndVertical();
  456. }
  457. EditorGUILayout.EndHorizontal();
  458. }
  459. private void OnAssetsOrderOrFilterChanged()
  460. {
  461. m_CachedAssetNames = m_Controller.GetAssetNames(m_AssetsOrder, m_AssetsFilter);
  462. if (!string.IsNullOrEmpty(m_SelectedAssetName))
  463. {
  464. m_SelectedAssetIndex = new List<string>(m_CachedAssetNames).IndexOf(m_SelectedAssetName);
  465. }
  466. }
  467. private void OnScatteredAssetsOrderOrFilterChanged()
  468. {
  469. m_CachedScatteredAssetNames = m_Controller.GetScatteredAssetNames(m_ScatteredAssetsOrder, m_ScatteredAssetsFilter);
  470. if (!string.IsNullOrEmpty(m_SelectedScatteredAssetName))
  471. {
  472. m_SelectedScatteredAssetIndex = new List<string>(m_CachedScatteredAssetNames).IndexOf(m_SelectedScatteredAssetName);
  473. }
  474. }
  475. private void OnLoadingResource(int index, int count)
  476. {
  477. EditorUtility.DisplayProgressBar("Loading Resources", Utility.Text.Format("Loading resources, {0}/{1} loaded.", index.ToString(), count.ToString()), (float)index / count);
  478. }
  479. private void OnLoadingAsset(int index, int count)
  480. {
  481. EditorUtility.DisplayProgressBar("Loading Assets", Utility.Text.Format("Loading assets, {0}/{1} loaded.", index.ToString(), count.ToString()), (float)index / count);
  482. }
  483. private void OnLoadCompleted()
  484. {
  485. EditorUtility.ClearProgressBar();
  486. }
  487. private void OnAnalyzingAsset(int index, int count)
  488. {
  489. EditorUtility.DisplayProgressBar("Analyzing Assets", Utility.Text.Format("Analyzing assets, {0}/{1} analyzed.", index.ToString(), count.ToString()), (float)index / count);
  490. }
  491. private void OnAnalyzeCompleted()
  492. {
  493. EditorUtility.ClearProgressBar();
  494. }
  495. }
  496. }