private void OnEnable() { m_Controller = new AssetBundleAnalyzerController(); m_Controller.OnLoadingAssetBundle += OnLoadingAssetBundle; m_Controller.OnLoadingAsset += OnLoadingAsset; m_Controller.OnLoadCompleted += OnLoadCompleted; m_Controller.OnAnalyzingAsset += OnAnalyzingAsset; m_Controller.OnAnalyzeCompleted += OnAnalyzeCompleted; m_Analyzed = false; m_ToolbarIndex = 0; m_AssetCount = 0; m_CachedAssetNames = null; m_SelectedAssetIndex = -1; m_SelectedAssetName = null; m_SelectedDependencyData = new DependencyData(); m_AssetsOrder = AssetsOrder.ScatteredDependencyAssetCountDesc; m_AssetsFilter = null; m_AssetsScroll = Vector2.zero; m_DependencyAssetBundlesScroll = Vector2.zero; m_DependencyAssetsScroll = Vector2.zero; m_ScatteredDependencyAssetsScroll = Vector2.zero; m_ScatteredAssetCount = 0; m_CachedScatteredAssetNames = null; m_SelectedScatteredAssetIndex = -1; m_SelectedScatteredAssetName = null; m_SelectedHostAssets = new Asset[] { }; m_ScatteredAssetsOrder = ScatteredAssetsOrder.HostAssetCountDesc; m_ScatteredAssetsFilter = null; m_ScatteredAssetsScroll = Vector2.zero; m_HostAssetsScroll = Vector2.zero; }
public string[] GetAssetNames(AssetsOrder order, string filter) { HashSet <string> filteredAssetNames = GetFilteredAssetNames(filter); IEnumerable <KeyValuePair <string, DependencyData> > filteredResult = m_DependencyDatas.Where(pair => filteredAssetNames.Contains(pair.Key)); IEnumerable <KeyValuePair <string, DependencyData> > orderedResult = null; switch (order) { case AssetsOrder.AssetNameAsc: orderedResult = filteredResult.OrderBy(pair => pair.Key); break; case AssetsOrder.AssetNameDesc: orderedResult = filteredResult.OrderByDescending(pair => pair.Key); break; case AssetsOrder.DependencyAssetBundleCountAsc: orderedResult = filteredResult.OrderBy(pair => pair.Value.DependencyAssetBundleCount); break; case AssetsOrder.DependencyAssetBundleCountDesc: orderedResult = filteredResult.OrderByDescending(pair => pair.Value.DependencyAssetBundleCount); break; case AssetsOrder.DependencyAssetCountAsc: orderedResult = filteredResult.OrderBy(pair => pair.Value.DependencyAssetCount); break; case AssetsOrder.DependencyAssetCountDesc: orderedResult = filteredResult.OrderByDescending(pair => pair.Value.DependencyAssetCount); break; case AssetsOrder.ScatteredDependencyAssetCountAsc: orderedResult = filteredResult.OrderBy(pair => pair.Value.ScatteredDependencyAssetCount); break; case AssetsOrder.ScatteredDependencyAssetCountDesc: orderedResult = filteredResult.OrderByDescending(pair => pair.Value.ScatteredDependencyAssetCount); break; default: orderedResult = filteredResult; break; } return(orderedResult.Select(pair => pair.Key).ToArray()); }
private void DrawAssetDependencyViewer() { if (!m_Analyzed) { DrawAnalyzeButton(); return; } EditorGUILayout.BeginHorizontal(); { GUILayout.Space(5f); EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.4f)); { GUILayout.Space(5f); string title = null; if (string.IsNullOrEmpty(m_AssetsFilter)) { title = Utility.Text.Format("Assets In Resources ({0})", m_AssetCount); } else { title = Utility.Text.Format("Assets In Resources ({0}/{1})", m_CachedAssetNames.Length, m_AssetCount); } EditorGUILayout.LabelField(title, EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height - 150f)); { m_AssetsScroll = EditorGUILayout.BeginScrollView(m_AssetsScroll); { int selectedIndex = GUILayout.SelectionGrid(m_SelectedAssetIndex, m_CachedAssetNames, 1, "toggle"); if (selectedIndex != m_SelectedAssetIndex) { m_SelectedAssetIndex = selectedIndex; m_SelectedAssetName = m_CachedAssetNames[selectedIndex]; m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); { EditorGUILayout.LabelField("Asset Name", m_SelectedAssetName ?? "<None>"); EditorGUILayout.LabelField("Resource Name", m_SelectedAssetName == null ? "<None>" : m_Controller.GetAsset(m_SelectedAssetName).Resource.FullName); EditorGUILayout.BeginHorizontal(); { AssetsOrder assetsOrder = (AssetsOrder)EditorGUILayout.EnumPopup("Order by", m_AssetsOrder); if (assetsOrder != m_AssetsOrder) { m_AssetsOrder = assetsOrder; OnAssetsOrderOrFilterChanged(); } } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { string assetsFilter = EditorGUILayout.TextField("Assets Filter", m_AssetsFilter); if (assetsFilter != m_AssetsFilter) { m_AssetsFilter = assetsFilter; OnAssetsOrderOrFilterChanged(); } EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(m_AssetsFilter)); { if (GUILayout.Button("x", GUILayout.Width(20f))) { m_AssetsFilter = null; GUI.FocusControl(null); OnAssetsOrderOrFilterChanged(); } } EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.6f - 14f)); { GUILayout.Space(5f); EditorGUILayout.LabelField(Utility.Text.Format("Dependency Resources ({0})", m_SelectedDependencyData.DependencyResourceCount), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.2f)); { m_DependencyResourcesScroll = EditorGUILayout.BeginScrollView(m_DependencyResourcesScroll); { Resource[] dependencyResources = m_SelectedDependencyData.GetDependencyResources(); foreach (Resource dependencyResource in dependencyResources) { GUILayout.Label(dependencyResource.FullName); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); EditorGUILayout.LabelField(Utility.Text.Format("Dependency Assets ({0})", m_SelectedDependencyData.DependencyAssetCount), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.3f)); { m_DependencyAssetsScroll = EditorGUILayout.BeginScrollView(m_DependencyAssetsScroll); { Asset[] dependencyAssets = m_SelectedDependencyData.GetDependencyAssets(); foreach (Asset dependencyAsset in dependencyAssets) { EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("GO", GUILayout.Width(30f))) { m_SelectedAssetName = dependencyAsset.Name; m_SelectedAssetIndex = new List <string>(m_CachedAssetNames).IndexOf(m_SelectedAssetName); m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName); } GUILayout.Label(dependencyAsset.Name); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); EditorGUILayout.LabelField(Utility.Text.Format("Scattered Dependency Assets ({0})", m_SelectedDependencyData.ScatteredDependencyAssetCount), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.5f - 116f)); { m_ScatteredDependencyAssetsScroll = EditorGUILayout.BeginScrollView(m_ScatteredDependencyAssetsScroll); { string[] scatteredDependencyAssetNames = m_SelectedDependencyData.GetScatteredDependencyAssetNames(); foreach (string scatteredDependencyAssetName in scatteredDependencyAssetNames) { EditorGUILayout.BeginHorizontal(); { int count = m_Controller.GetHostAssets(scatteredDependencyAssetName).Length; EditorGUI.BeginDisabledGroup(count < 2); { if (GUILayout.Button("GO", GUILayout.Width(30f))) { m_SelectedScatteredAssetName = scatteredDependencyAssetName; m_SelectedScatteredAssetIndex = new List <string>(m_CachedScatteredAssetNames).IndexOf(m_SelectedScatteredAssetName); m_SelectedHostAssets = m_Controller.GetHostAssets(m_SelectedScatteredAssetName); m_ToolbarIndex = 2; GUI.FocusControl(null); } } EditorGUI.EndDisabledGroup(); GUILayout.Label(count > 1 ? Utility.Text.Format("{0} ({1})", scatteredDependencyAssetName, count) : scatteredDependencyAssetName); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); }
//绘制资源依赖视图 private void DrawAssetDependencyViewer() { if (!m_Analyzed) { DrawAnalyzeButton(); //没分析则绘制分析按钮 return; } EditorGUILayout.BeginHorizontal(); { GUILayout.Space(5f); //Bundle中的资源 EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.4f)); { GUILayout.Space(5f); string title = null; if (string.IsNullOrEmpty(m_AssetsFilter)) //不存在过滤文字 { title = Utility.Text.Format("Assets In AssetBundles ({0})", m_AssetCount); } else { title = Utility.Text.Format("Assets In AssetBundles ({0}/{1})", m_CachedAssetNames.Length, m_AssetCount); } EditorGUILayout.LabelField(title, EditorStyles.boldLabel); //标题 EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height - 150f)); { m_AssetsScroll = EditorGUILayout.BeginScrollView(m_AssetsScroll); //滚动窗口 { //选中缓存的资源 int selectedIndex = GUILayout.SelectionGrid(m_SelectedAssetIndex, m_CachedAssetNames, 1, "toggle"); if (selectedIndex != m_SelectedAssetIndex) { m_SelectedAssetIndex = selectedIndex; m_SelectedAssetName = m_CachedAssetNames[selectedIndex]; m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical("box"); { EditorGUILayout.LabelField("Asset Name", m_SelectedAssetName ?? "<None>"); //选中的资源 EditorGUILayout.LabelField("AssetBundle Name", m_SelectedAssetName == null ? "<None>" : m_Controller.GetAssetInfo(m_SelectedAssetName).AssetBundleInfo.FullName); EditorGUILayout.BeginHorizontal(); { //选择排序方式 AssetsOrder assetsOrder = (AssetsOrder)EditorGUILayout.EnumPopup("Order By", m_AssetsOrder); if (assetsOrder != m_AssetsOrder) { m_AssetsOrder = assetsOrder; OnAssetsOrderOrFilterChanged(); //排序改变 } } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { string assetsFilter = EditorGUILayout.TextField("Assets Filter", m_AssetsFilter); //输入过滤名称 if (assetsFilter != m_AssetsFilter) { m_AssetsFilter = assetsFilter; OnAssetsOrderOrFilterChanged(); } //禁用区域 EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(m_AssetsFilter)); { if (GUILayout.Button("x", GUILayout.Width(20f))) { m_AssetsFilter = null; GUI.FocusControl(null); OnAssetsOrderOrFilterChanged(); } } EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); //依赖资源包 Bundles EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.6f - 14f)); { GUILayout.Space(5f); EditorGUILayout.LabelField(Utility.Text.Format("Dependency AssetBundles ({0})", m_SelectedDependencyData.DependencyAssetBundleInfoCount), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.2f)); { m_DependencyAssetsScroll = EditorGUILayout.BeginScrollView(m_DependencyAssetsScroll); { AssetBundleInfo[] dependencyAssetBundleInfos = m_SelectedDependencyData.AllDependencyAssetBundleInfos; foreach (AssetBundleInfo dependencyAssetBundleInfo in dependencyAssetBundleInfos) { GUILayout.Label(dependencyAssetBundleInfo.FullName); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); //依赖资源 EditorGUILayout.LabelField(Utility.Text.Format("Dependency Assets ({0})", m_SelectedDependencyData.DependencyAssetInfoCount), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.3f)); { m_DependencyAssetBundlesScroll = EditorGUILayout.BeginScrollView(m_DependencyAssetBundlesScroll); { AssetInfo[] dependencyAssetInfos = m_SelectedDependencyData.AllDependencyAssetInfos; foreach (AssetInfo dependencyAssetInfo in dependencyAssetInfos) { EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("GO", GUILayout.Width(30f))) { m_SelectedAssetName = dependencyAssetInfo.Name; m_SelectedAssetIndex = new List <string>(m_CachedAssetNames).IndexOf(m_SelectedAssetName); m_SelectedDependencyData = m_Controller.GetDependencyData(m_SelectedAssetName); } GUILayout.Label(dependencyAssetInfo.Name); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); //零散依赖资源 EditorGUILayout.LabelField(Utility.Text.Format("Scattered Dependency Assets ({0})", m_SelectedDependencyData.ScatteredDependencyAssetCount), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.5f - 116f)); { m_ScatteredDependencyAssetsScroll = EditorGUILayout.BeginScrollView(m_ScatteredDependencyAssetsScroll); { string[] scatteredDependencyAssetNames = m_SelectedDependencyData.AllScatteredDependencyAssetNames; foreach (string scatteredDependencyAssetName in scatteredDependencyAssetNames) { EditorGUILayout.BeginHorizontal(); { int count = m_Controller.GetHostAssets(scatteredDependencyAssetName).Length; EditorGUI.BeginDisabledGroup(count < 2); { if (GUILayout.Button("GO", GUILayout.Width(30f))) { m_SelectedScatteredAssetName = scatteredDependencyAssetName; m_SelectedScatteredAssetIndex = new List <string>(m_CachedScatteredAssetNames).IndexOf(m_SelectedScatteredAssetName); m_SelectedHostAssets = m_Controller.GetHostAssets(m_SelectedScatteredAssetName); m_ToolbarIndex = 2; GUI.FocusControl(null); } } EditorGUI.EndDisabledGroup(); GUILayout.Label(count > 1 ? Utility.Text.Format("{0} ({1})", scatteredDependencyAssetName, count.ToString()) : scatteredDependencyAssetName); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); }