SpriteTrackData BuildData(Sprite key, Object reference, SpriteShowMode mode, Dictionary <Sprite, SimpleSpriteInfo> sprCache) { SpriteTrackData data = new SpriteTrackData(); data.ShowMode = mode; data.IconName = AssetTreeManager.mIns.GetIconName(AssetBundleResType.Sprite); data.Id = AssetTreeManager.mIns.GetUniqueId(); data.FilePath = AssetDatabase.GetAssetPath(key); data.DisplayName = key ? key.name : "Null Sprite"; if (mode == SpriteShowMode.Scene) { data.SceneData.SprData = GetSpriteData(sprCache, key); data.SceneData.CsReferences = reference as MonoBehaviour; if (data.SceneData.CsReferences) { data.SceneData.Path = GetPath(data.SceneData.CsReferences.gameObject); } data.SceneData.InstanceId = reference.GetInstanceID(); data.SceneData.MemSize = AssetBundleEditorHelper.ConvertSize(Profiler.GetRuntimeMemorySizeLong(reference)); } else if (mode == SpriteShowMode.Prefabs) { data.GameObjectData.SprData = GetSpriteData(sprCache, key); data.GameObjectData.GoData = GetGoData(reference); } else if (mode == SpriteShowMode.Atlas) { if (reference is GameObject) { data.DisplayName = reference ? reference.name : "Null"; data.IconName = AssetTreeManager.mIns.GetIconName(AssetBundleResType.GameObject); data.AtlasData.RefData.Path = GetPath(((GameObject)reference)); } else if (reference is MonoBehaviour) { data.IconName = AssetTreeManager.mIns.GetIconName(AssetBundleResType.Cs); data.DisplayName = reference ? MonoScript.FromMonoBehaviour(reference as MonoBehaviour).name : "Null"; data.AtlasData.RefData.Path = AssetDatabase.GetAssetPath(MonoScript.FromMonoBehaviour((MonoBehaviour)reference)); } else { data.DisplayName = reference ? reference.name : "Null"; data.IconName = AssetTreeManager.mIns.GetIconName(AssetBundleResType.Folder); } data.AtlasData.RefData.Target = reference; data.AtlasData.RefData.InstanceId = reference.GetInstanceID(); data.AtlasData.RefData.MemSize = AssetBundleEditorHelper.ConvertSize(Profiler.GetRuntimeMemorySizeLong(reference)); data.AtlasData.SprData = GetSpriteData(sprCache, key); } return(data); }
SimpleSpriteInfo GetSpriteData(Dictionary <Sprite, SimpleSpriteInfo> sprCache, Sprite spr) { SimpleSpriteInfo data = new SimpleSpriteInfo(); if (sprCache.TryGetValue(spr, out data)) { return(data); } else { data.Sprite = spr; data.MemSize = AssetBundleEditorHelper.ConvertSize(Profiler.GetRuntimeMemorySizeLong(spr)); data.TexMemSize = AssetBundleEditorHelper.ConvertSize(Profiler.GetRuntimeMemorySizeLong(spr.texture)); data.InstanceId = spr.GetInstanceID(); data.TexSize = spr.rect.size; data.AssetPath = AssetDatabase.GetAssetPath(spr); data.TexName = spr.texture.name; data.TexPath = AssetDatabase.GetAssetPath(spr.texture); data.Importer = (TextureImporter)TextureImporter.GetAtPath(data.TexPath); if (data.Importer) { data.Mipmap = data.Importer.mipmapEnabled; data.BundleName = data.Importer.assetBundleName; if (string.IsNullOrEmpty(data.Importer.spritePackingTag)) { data.PackingTag = SimpleSpriteInfo.EmptyTag; } else { data.PackingTag = data.Importer.spritePackingTag; } } else if (data.TexPath == "Resources/unity_builtin_extra") { data.PackingTag = BuildInTag; } else if (data.TexPath.EndsWith("/Resources") || data.TexPath.Contains("/Resources/")) { data.PackingTag = ResourcesTag; } else { Debug.LogError("Missing " + data.TexPath); data.PackingTag = "Missing"; } sprCache.Add(spr, data); } return(data); }
SimpleGoData GetGoData(Object target) { GameObject gameObject = null; if (target is GameObject) { gameObject = target as GameObject; } else if (target is MonoBehaviour) { gameObject = (target as MonoBehaviour).gameObject; } SimpleGoData data = new SimpleGoData(); data.Go = gameObject; data.InstanceId = target.GetInstanceID(); data.AssetPath = AssetDatabase.GetAssetPath(gameObject); data.Path = GetPath(gameObject); data.PrefabType = PrefabUtility.GetPrefabType(gameObject); data.MemSize = AssetBundleEditorHelper.ConvertSize(Profiler.GetRuntimeMemorySizeLong(target)); return(data); }
IEnumerator CollectSceneInfo(AssetTreeModel <SpriteTrackData> dataModel, Dictionary <Sprite, HashSet <Object> > allUsed, Dictionary <Sprite, SimpleSpriteInfo> sprCache) { var displayRoot = CreateDisplayRoot("Scene"); displayRoot.ShowMode = SpriteShowMode.Scene; dataModel.Add(ref displayRoot); dataModel.AddChild(dataModel.Root.Id, displayRoot.Id); var allScripts = GameObject.FindObjectsOfType <MonoBehaviour>(); Dictionary <Sprite, HashSet <Object> > allRecords = new Dictionary <Sprite, HashSet <Object> >(); int i = 0; foreach (MonoBehaviour script in allScripts) { CollectSprite(script, allRecords); yield return(DisplayProgressBar("Parse Scene", "Parsing script " + script.name, (float)i / allScripts.Length)); i++; } foreach (var pair in allRecords) { allUsed[pair.Key] = pair.Value;//new HashSet<Object>(pair.Value); } i = 0; Dictionary <Object, List <Sprite> > sprRefDictionary = Convert(allRecords); foreach (var pair in sprRefDictionary) { SpriteTrackData sprData = new SpriteTrackData(); sprData.ShowMode = SpriteShowMode.Scene; sprData.Id = AssetTreeManager.mIns.GetUniqueId(); sprData.DisplayName = pair.Key.name; sprData.IconName = AssetTreeManager.mIns.GetIconName(AssetBundleResType.Cs); sprData.SceneData.CsReferences = pair.Key as MonoBehaviour; sprData.SceneData.InstanceId = pair.Key.GetInstanceID(); sprData.SceneData.MemSize = AssetBundleEditorHelper.ConvertSize(Profiler.GetRuntimeMemorySizeLong(pair.Key)); if (sprData.SceneData.CsReferences) { sprData.SceneData.Path = GetPath(sprData.SceneData.CsReferences.gameObject); } dataModel.Add(ref sprData); HashSet <string> hashset = HashSetPool <string> .Get(); foreach (var refsprite in pair.Value) { SpriteTrackData refData = BuildData(refsprite, pair.Key, SpriteShowMode.Scene, sprCache); refData.UsedRefCount = 1; dataModel.Add(ref refData); dataModel.AddChild(ref sprData, ref refData); hashset.Add(refData.SceneData.SprData.PackingTag); } sprData.UsedRefCount = hashset.Count; //refresh dataModel.Add(ref sprData); HashSetPool <string> .Release(hashset); dataModel.AddChild(ref displayRoot, ref sprData); yield return(DisplayProgressBar("Parse Scene", "Parsing Sprite", (float)i / sprRefDictionary.Count)); i++; } }
public bool CellGui(TreeViewItem item, ref AssetRowGuiArgs args) { var assetitem = item as AssetTreeItem <DependencyTreeData>; if (assetitem != null) { var data = assetitem.GetData(); var runtimeInfo = data.EditorInfo.RuntimeInfo; bool isroot = item.depth == 0; var topmenutype = (TopMenu)args.Column; if (topmenutype == TopMenu.Name) { return(false); } else if (topmenutype == TopMenu.ResType) { GUI.Label(args.CellRect, GetResTypeContent(runtimeInfo.AssetResType)); } else if (topmenutype == TopMenu.Size)//size { long size = AssetBundleEditorHelper.GetAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.FileSize)//file size { long size = AssetBundleEditorHelper.GetFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfSize)//size { long size = AssetBundleEditorHelper.GetSelfAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfFileSize)//file size { long size = AssetBundleEditorHelper.GetSelfFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.BeDependOn) { if (isroot) { var list = _model.GetDependParents(runtimeInfo.UnityPath); GUI.skin.label.richText = true; var info = AssetBundleEditorHelper.GetColorText("be depond on count :{0}", Color.grey, list.Count.ToString()); if (!string.IsNullOrEmpty(data.EditorInfo.RuntimeInfo.AssetBundleName)) { info += AssetBundleEditorHelper.GetColorText(" AssetBundle Name :{0},It should be Load {0} first", Color.yellow, data.EditorInfo.RuntimeInfo.AssetBundleName); } else { info += AssetBundleEditorHelper.GetColorText(" it's an noassetbundlename resource,it will pack into this assetbundle alonely", Color.white); } GUI.Label(args.CellRect, new GUIContent(info)); GUI.skin.label.richText = false; } } return(true); } else { return(false); } }
//List<AssetTreeItem<AssetTreeData>g> GetSelectItems() //{ // var selects = _treeView.GetSelection(); // List<AssetTreeItem<AssetTreeData>> list = ListPool<AssetTreeItem<AssetTreeData>>.Get(); // foreach (var id in selects) // { // for (int i = 0; i < _treeView.GetRows().Count; i++) // { // var item = _treeView.GetRows()[i]; // if (item.id == id) // { // list.Add(item as AssetTreeItem<AssetTreeData>); // break; // } // } // } // return list; //} public bool CellGui(TreeViewItem item, ref AssetRowGuiArgs args) { var assetitem = item as AssetTreeItem <AssetTreeData>; if (assetitem != null) { var data = assetitem.GetData(); var runtimeInfo = data.EditorInfo.RuntimeInfo; bool isroot = item.depth == 0; var topmenutype = (TopMenu)args.Column; if (topmenutype == TopMenu.AssetBundle) { //GUI.Label(args.CellRect, new GUIContent(item.displayName, item.icon)); return(false); } else if (topmenutype == TopMenu.InAssetBundle) { if (!isroot) { bool isIn = !string.IsNullOrEmpty(runtimeInfo.AssetBundleName) && item.depth <= 1; bool value = GUI.Toggle(args.CellRect, isIn, ""); if (isIn != value) { if (value) { if (item.parent != null && item.parent.parent != null) { AssetImporter importer = AssetImporter.GetAtPath(runtimeInfo.UnityPath); if (importer != null) { importer.assetBundleName = item.parent.parent.displayName; importer.SaveAndReimport(); } EditorContexts.mIns.ForceModeChange(EditorContexts.mIns.Mode); } else { Debug.LogErrorFormat("{0} parent is Null", runtimeInfo.UnityPath); } } else { AssetImporter importer = AssetImporter.GetAtPath(runtimeInfo.UnityPath); if (importer != null) { importer.assetBundleName = ""; importer.SaveAndReimport(); } EditorContexts.mIns.ForceModeChange(EditorContexts.mIns.Mode); } } } } else if (topmenutype == TopMenu.ResType) // { if (!isroot) { var restype = data.EditorInfo.RuntimeInfo.AssetResType; EditorGUI.EnumPopup(args.CellRect, restype); } else { //EditorGUIUtility.FindTexture(AssetTreeManager.mIns.GetIconName("Folder")) GUI.Label(args.CellRect, new GUIContent("ab", "Asset Bundle")); } } else if (topmenutype == TopMenu.Size)//size { long size = AssetBundleEditorHelper.GetAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.FileSize)//file size { long size = AssetBundleEditorHelper.GetFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfSize)//size { long size = AssetBundleEditorHelper.GetSelfAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfFileSize)//file size { long size = AssetBundleEditorHelper.GetSelfFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.Dependency) //dependencies { if (!isroot) { if (runtimeInfo.DependenciesCnt == 0) { GUI.enabled = false; } if (GUI.Button(args.CellRect, new GUIContent(runtimeInfo.DependenciesCnt.ToString()))) { if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency || !_selectfile.Equals(runtimeInfo.UnityPath) || EditorContexts.mIns.GuiContext.SelectDepth != 0) { _selectfile = runtimeInfo.UnityPath; AssetTreeData selectData; if (_model.GetItem(runtimeInfo.UnityPath, out selectData)) { EditorContexts.mIns.SelectForDependencyData = selectData; } EditorContexts.mIns.GuiContext.SelectDepth = 0; if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency) { EditorContexts.mIns.Mode = AssetWindow.WindowMode.AssetDependency; } else { EditorContexts.mIns.ForceModeChange(AssetWindow.WindowMode.AssetDependency); } } else { EditorContexts.mIns.Mode = AssetWindow.WindowMode.Asset; } //_treeView.FrameItem(item.id); var selectedIDs = new List <int>(); selectedIDs.Add(item.id); _treeView.SetSelection(selectedIDs, TreeViewSelectionOptions.RevealAndFrame); } if (runtimeInfo.DependenciesCnt == 0) { GUI.enabled = true; } } } else if (topmenutype == TopMenu.BeDepend) { if (!isroot) { var list = _model.GetDependParents(runtimeInfo.UnityPath); if (list.Count == 0) { GUI.enabled = false; } if (GUI.Button(args.CellRect, list.Count.ToString())) { if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency || !_selectfile.Equals(runtimeInfo.UnityPath) || EditorContexts.mIns.GuiContext.SelectDepth != 1) { _selectfile = runtimeInfo.UnityPath; AssetTreeData selectData; if (_model.GetItem(runtimeInfo.UnityPath, out selectData)) { EditorContexts.mIns.SelectForDependencyData = selectData; } EditorContexts.mIns.GuiContext.SelectDepth = 1; if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency) { EditorContexts.mIns.Mode = AssetWindow.WindowMode.AssetDependency; } else { EditorContexts.mIns.ForceModeChange(AssetWindow.WindowMode.AssetDependency); } } else { EditorContexts.mIns.Mode = AssetWindow.WindowMode.Asset; } //_treeView.FrameItem(item.id); var selectedIDs = new List <int>(); selectedIDs.Add(item.id); _treeView.SetSelection(selectedIDs, TreeViewSelectionOptions.RevealAndFrame); } GUI.enabled = true; ListPool <AssetTreeData> .Release(list); } } else if (topmenutype == TopMenu.Info) //info { GUI.skin.label.richText = true; if (!isroot) { string info = AssetBundleEditorHelper.GetColorText(" Path :{0}", Color.yellow, runtimeInfo.UnityPath); GUI.Label(args.CellRect, info); } else { string info = string.Format("Path:{0}", runtimeInfo.UnityPath); info += AssetBundleEditorHelper.GetColorText(" Hash :{0}", Color.grey, runtimeInfo.HashCode); info += AssetBundleEditorHelper.GetColorText(" Crc :{0}", Color.white, runtimeInfo.Crc); if (HasNoAssetBundleName(ref data)) { GUI.Label(args.CellRect, new GUIContent(info, AssetTreeManager.mIns.GetEditorTexture("warning"))); } else { GUI.Label(args.CellRect, info); } } GUI.skin.label.richText = false; } return(true); } return(false); }