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 = string.Format("Assets In AssetBundles ({0})", m_AssetCount.ToString()); } else { title = string.Format("Assets In AssetBundles ({0}/{1})", m_CachedAssetNames.Length.ToString(), m_AssetCount.ToString()); } 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.GetAsset(m_SelectedAssetName).AssetBundle.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(string.Format("Dependency AssetBundles ({0})", m_SelectedDependencyData.DependencyAssetBundleCount.ToString()), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.2f)); { m_DependencyAssetsScroll = EditorGUILayout.BeginScrollView(m_DependencyAssetsScroll); { AssetBundle[] dependencyAssetBundles = m_SelectedDependencyData.GetDependencyAssetBundles(); foreach (AssetBundle dependencyAssetBundle in dependencyAssetBundles) { GUILayout.Label(dependencyAssetBundle.FullName); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); EditorGUILayout.LabelField(string.Format("Dependency Assets ({0})", m_SelectedDependencyData.DependencyAssetCount.ToString()), EditorStyles.boldLabel); EditorGUILayout.BeginVertical("box", GUILayout.Height(position.height * 0.3f)); { m_DependencyAssetBundlesScroll = EditorGUILayout.BeginScrollView(m_DependencyAssetBundlesScroll); { 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(string.Format("Scattered Dependency Assets ({0})", m_SelectedDependencyData.ScatteredDependencyAssetCount.ToString()), 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 ? string.Format("{0} ({1})", scatteredDependencyAssetName, count.ToString()) : scatteredDependencyAssetName); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndScrollView(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); }
private AssetBundleBuild[] GetBuildMap() { m_AssetBundleDatas.Clear(); AssetBundle[] assetBundles = m_AssetBundleCollection.GetAssetBundles(); foreach (AssetBundle assetBundle in assetBundles) { m_AssetBundleDatas.Add(assetBundle.FullName.ToLower(), new AssetBundleData(assetBundle.Name.ToLower(), (assetBundle.Variant != null ? assetBundle.Variant.ToLower() : null), assetBundle.LoadType, assetBundle.Optional, assetBundle.GroupTag)); } Asset[] assets = m_AssetBundleCollection.GetAssets(); foreach (Asset asset in assets) { string assetName = asset.Name; if (string.IsNullOrEmpty(assetName)) { m_BuildReport.LogError("Can not find asset by guid '{0}'.", asset.Guid); return(null); } string assetFileFullName = Icarus.GameFramework.Utility.Path.GetCombinePath(Application.dataPath, assetName.Substring(AssetsSubstringLength)); if (!File.Exists(assetFileFullName)) { m_BuildReport.LogError("Can not find asset '{0}'.", assetFileFullName); return(null); } byte[] assetBytes = File.ReadAllBytes(assetFileFullName); int assetHashCode = Icarus.GameFramework.Utility.Converter.GetInt32(Icarus.GameFramework.Utility.Verifier.GetCrc32(assetBytes)); List <string> dependencyAssetNames = new List <string>(); DependencyData dependencyData = m_AssetBundleAnalyzerController.GetDependencyData(assetName); Asset[] dependencyAssets = dependencyData.GetDependencyAssets(); foreach (Asset dependencyAsset in dependencyAssets) { dependencyAssetNames.Add(dependencyAsset.Name); } if (RecordScatteredDependencyAssetsSelected) { dependencyAssetNames.AddRange(dependencyData.GetScatteredDependencyAssetNames()); } dependencyAssetNames.Sort(); m_AssetBundleDatas[asset.AssetBundle.FullName.ToLower()].AddAssetData(asset.Guid, assetName, assetBytes.Length, assetHashCode, dependencyAssetNames.ToArray()); } foreach (AssetBundleData assetBundleData in m_AssetBundleDatas.Values) { if (assetBundleData.AssetCount <= 0) { m_BuildReport.LogError("AssetBundle '{0}' has no asset.", GetAssetBundleFullName(assetBundleData.Name, assetBundleData.Variant)); return(null); } } AssetBundleBuild[] buildMap = new AssetBundleBuild[m_AssetBundleDatas.Count]; int index = 0; foreach (AssetBundleData assetBundleData in m_AssetBundleDatas.Values) { buildMap[index].assetBundleName = assetBundleData.Name; buildMap[index].assetBundleVariant = assetBundleData.Variant; buildMap[index].assetNames = assetBundleData.GetAssetNames(); index++; } return(buildMap); }