diff options
author | chai <chaifix@163.com> | 2018-07-10 13:14:07 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-07-10 13:14:07 +0800 |
commit | 6098343eb702e39c663e6fffebecafa761ff321f (patch) | |
tree | 6043f47314a8d0ed7b09fc33277687bf925302d7 | |
parent | acaadc6869c1d6b9d1fa2315a70639bca63efe31 (diff) |
+英文注释
-rw-r--r-- | AssetBrowser.cs | 240 |
1 files changed, 113 insertions, 127 deletions
diff --git a/AssetBrowser.cs b/AssetBrowser.cs index 3049f5b..cf62ffa 100644 --- a/AssetBrowser.cs +++ b/AssetBrowser.cs @@ -1,15 +1,9 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// author: chaifeixiang -// date: 2018.5.20 -// desc: Unity中找文件依赖关系的编辑器工具,需要Unity5.4及以上版本 -// -// -// -// -// -///////////////////////////////////////////////////////////////////////////////// - +/////////////////////////////////////////////////// +// author: chai +// email: chaifix@163.com +// +// Send me email if you have any ideas or problems. +/////////////////////////////////////////////////// using UnityEditor; using UnityEngine; using System; @@ -20,8 +14,6 @@ using Object = UnityEngine.Object; class AssetData { - // 枚举值为遍历的优先级,用于AssetData.Dependcies和AssetDataManager.Assets - // 必须是紧凑的索引 public enum AssetType { Scene = 0, @@ -38,16 +30,17 @@ class AssetData Unknown = 255, } - + + // for sorting in same asset type situation public enum SubType { // Texture - png = 0, - jpg, - bmp, + png = 0, + jpg, + bmp, // Mesh - fbx, - FBX, + fbx, + FBX, // Unknown = 255, } @@ -90,7 +83,7 @@ class AssetData DiskSizeStr = EditorUtility.FormatBytes(DiskSize); } - #region 资源属性 + #region asset properties public string GUID; public string Name; public int RefCount = 0; @@ -155,16 +148,16 @@ class AssetDataManager Assets[i] = new Dictionary<string, AssetData>(); } - #region Asset字典 - // 所有资源 + #region Asset Dictionary + // all assets public Dictionary<string, AssetData> AllAssets = new Dictionary<string, AssetData>(); - // 分类统计 + // assets by type public Dictionary<string, AssetData>[] Assets = new Dictionary<string, AssetData>[(int)AssetData.AssetType.TypeCount]; - // 反向依赖 + // reverse reference public Dictionary<string, List<string>> AssetsReverse = new Dictionary<string, List<string>>(); #endregion - #region 过滤 + #region file extensions public static List<string> ValidExtension = new List<string> { ".unity", // scene @@ -363,7 +356,7 @@ class Drawer GUI.skin.label.normal.textColor = drawColor; } - #region 配置项 + #region configuration public Color ColorHeavy = new Color(0.2f, 0.2f, 0.2f); public Color ColorLight = new Color(0.3f, 0.3f, 0.3f); public GUIStyle SelectorButtonStyle; @@ -372,12 +365,12 @@ class Drawer public GUIStyle MidAlignment; #endregion - #region 状态 + #region draw state private Color drawColor = new Color(); #endregion } -// 文件树 +// file tree class FileTree { public class Node @@ -387,9 +380,9 @@ class FileTree GUID = guid; Foldout = false; } - public bool Foldout; // 是否展开 + public bool Foldout; // fold out or not public string GUID; // GUID - public List<Node> Children = new List<Node>(); // 子节点 + public List<Node> Children = new List<Node>(); // sub node } public List<Node> root = new List<Node>(); @@ -400,29 +393,29 @@ class AssetBrowser : EditorWindow private static AssetBrowser editor; private static Drawer drawer; - #region 目录 + #region file tree private FileTree assetsTree = new FileTree(); - private FileTree assetsTreeBuffer = new FileTree(); + private FileTree assetsTreeBuffer = new FileTree(); #endregion - #region GUI 组件配置数值 + #region GUI configurations private Rect window = new Rect(); private int contentWidth = 1600; private int contentHeight = 1000; - private readonly int kLineHeight = 20; // 行高 + private readonly int kLineHeight = 20; // line height private Vector2 scrollPos = new Vector2(0, 0); - private int directoryOffsetY = 5; // 资源目录Y偏移度 - private int filtersOffsetY = 27; // 过滤器Y偏移度 - private int headerOffsetY = 50; // 标题Y偏移度 - private int assetsTreeOffsetY = 70; // 列表偏移度 + private int directoryOffsetY = 5; // assets tree y offset + private int filtersOffsetY = 27; // filters y offset + private int headerOffsetY = 50; // header y offset + private int assetsTreeOffsetY = 70; // list y offset private int kTabWidth = 13; #endregion - #region 数据 + #region data private FileTree.Node selectedNode = null; #endregion - #region 过滤器 + #region filters private string filterdirectory = ""; private string filterFile = ""; private bool filterScene = false; @@ -436,17 +429,16 @@ class AssetBrowser : EditorWindow private bool filterCSV = false; #endregion - #region 排序 + #region sort private enum OrderBase { - Name, - Ref, - RevRef, - Type, - DiskSize, + Name, + Ref, + RevRef, + Type, + DiskSize, Path } - // 排序依据 private OrderBase orderBase = OrderBase.Path; private int orderName = 1; private int orderRef = 1; @@ -466,32 +458,32 @@ class AssetBrowser : EditorWindow private enum Colum { - Name, // 资源名 - Ref, // 引用数 - RevRef, // 被引用数 - Type, // 资源类型 - DiskSize, // 硬盘大小 - Path, // 资源路径 + Name, // Asset Name + Ref, // Reference Count + RevRef, // Referenced Count + Type, // Asset Type + DiskSize, // Asset's Disk Size + Path, // Location } private Dictionary<Colum, string> ColumHeader = new Dictionary<Colum, string> { - {Colum.Name, "资源引用关系"}, - {Colum.Ref, "引用数"}, - {Colum.RevRef, "被引用数"}, - {Colum.Type, "资源类型"}, - {Colum.DiskSize, "硬盘大小"}, - {Colum.Path, "资源路径"}, + {Colum.Name, "Asset Name"}, + {Colum.Ref, "Reference Count"}, + {Colum.RevRef, "Referenced Count"}, + {Colum.Type, "Asset Type"}, + {Colum.DiskSize, "Disk Size"}, + {Colum.Path, "Location"}, }; private Dictionary<Colum, int> ColumWidth = new Dictionary<Colum, int> { - {Colum.Name, 450}, - {Colum.Ref, 70}, - {Colum.RevRef, 70}, - {Colum.Type, 70}, - {Colum.DiskSize, 70}, - {Colum.Path, 870}, + {Colum.Name, 500}, + {Colum.Ref, 100}, + {Colum.RevRef, 100}, + {Colum.Type, 100}, + {Colum.DiskSize, 100}, + {Colum.Path, 700}, }; private Dictionary<Colum, int> ColumOffsetX = null; @@ -513,22 +505,19 @@ class AssetBrowser : EditorWindow { window = editor.position; } - + public void OnGUI() { - // 调试 if (editor == null) editor = GetWindow<AssetBrowser>(); if (drawer == null) - drawer = Drawer.Get(); + drawer = Drawer.Get(); AdjustColumOffsetX(); AdjustWindow(); BeginScrollView(); - // 绘制工具栏 OnToolset(); - // 绘制资源列表 OnAsset(); EndScrollView(); } @@ -555,11 +544,11 @@ class AssetBrowser : EditorWindow Rect dragRect = new Rect(0, offsetY, 1000, 20); string olddirectory = filterdirectory; - drawer.DrawLabel(new Rect(0, offsetY, 95, kLineHeight), "资源目录 Assets\\"); - drawer.DrawTextfield(new Rect(95, offsetY, 250, kLineHeight), filterdirectory, ref filterdirectory); + drawer.DrawLabel(new Rect(0, offsetY, 105, kLineHeight), "Directory Assets\\"); + drawer.DrawTextfield(new Rect(105, offsetY, 250, kLineHeight), filterdirectory, ref filterdirectory); if (filterdirectory == null) filterdirectory = ""; - // 拖拽 + // drag Event e = Event.current; if (dragRect.Contains(e.mousePosition)) { @@ -588,12 +577,12 @@ class AssetBrowser : EditorWindow if (filterdirectory != olddirectory) ProcessTreeBuffer(); bool load; - drawer.DrawButton(new Rect(350, offsetY, 50, kLineHeight), "载入", out load); + drawer.DrawButton(new Rect(360, offsetY, 50, kLineHeight), "Load", out load); if (load) { ProcessAssets(); ProcessTree(); - EditorUtility.DisplayDialog("载入完毕", "载入完毕", "确定"); + EditorUtility.DisplayDialog("Load done", "Load done", "OK"); } } @@ -608,33 +597,33 @@ class AssetBrowser : EditorWindow bool oldfilterTexture = filterTexture; bool oldfilterShader = filterShader; bool oldfilterScript = filterScript; - bool oldfilterCSV = filterCSV; - // 文件匹配 - drawer.DrawLabel(new Rect(0, filtersOffsetY + scrollPos.y, 100, kLineHeight), "匹配文件"); - drawer.DrawTextfield(new Rect(50, filtersOffsetY + scrollPos.y, 150, kLineHeight), filterFile, ref filterFile); - // 类型过滤 + bool oldfilterCSV = filterCSV; + // match file + drawer.DrawLabel(new Rect(0, filtersOffsetY + scrollPos.y, 100, kLineHeight), "Match Files"); + drawer.DrawTextfield(new Rect(67, filtersOffsetY + scrollPos.y, 150, kLineHeight), filterFile, ref filterFile); + // type filter float offsetX = 250; float offsetY = filtersOffsetY + scrollPos.y; int width = 70; - drawer.DrawCheckBox(new Rect(offsetX, offsetY, width, kLineHeight), "场景", filterScene, ref filterScene); + drawer.DrawCheckBox(new Rect(offsetX, offsetY, width, kLineHeight), "Scene", filterScene, ref filterScene); drawer.DrawCheckBox(new Rect(offsetX + width, offsetY, width, kLineHeight), "Prefab", filterPrefab, ref filterPrefab); - drawer.DrawCheckBox(new Rect(offsetX + width * 2, offsetY, width, kLineHeight), "材质", filterMaterial, ref filterMaterial); + drawer.DrawCheckBox(new Rect(offsetX + width * 2, offsetY, width, kLineHeight), "Material", filterMaterial, ref filterMaterial); drawer.DrawCheckBox(new Rect(offsetX + width * 3, offsetY, width, kLineHeight), "Asset", filterAsset, ref filterAsset); drawer.DrawCheckBox(new Rect(offsetX + width * 4, offsetY, width, kLineHeight), "Mesh", filterMesh, ref filterMesh); - drawer.DrawCheckBox(new Rect(offsetX + width * 5, offsetY, width, kLineHeight), "贴图", filterTexture, ref filterTexture); + drawer.DrawCheckBox(new Rect(offsetX + width * 5, offsetY, width, kLineHeight), "Texture", filterTexture, ref filterTexture); drawer.DrawCheckBox(new Rect(offsetX + width * 6, offsetY, width, kLineHeight), "Shader", filterShader, ref filterShader); - drawer.DrawCheckBox(new Rect(offsetX + width * 7, offsetY, width, kLineHeight), "脚本", filterScript, ref filterScript); + drawer.DrawCheckBox(new Rect(offsetX + width * 7, offsetY, width, kLineHeight), "Script", filterScript, ref filterScript); drawer.DrawCheckBox(new Rect(offsetX + width * 8, offsetY, width, kLineHeight), "CSV", filterCSV, ref filterCSV); - // 刷新TreeBuffer - if( oldfilterfile != filterFile || - oldfilterScene != filterScene|| - oldfilterPrefab != filterPrefab|| - oldfilterMaterial != filterMaterial|| - oldfilterAsset != filterAsset|| - oldfilterMesh != filterMesh|| - oldfilterTexture != filterTexture|| - oldfilterShader != filterShader|| - oldfilterScript != filterScript|| + // refresh tree buffer + if (oldfilterfile != filterFile || + oldfilterScene != filterScene || + oldfilterPrefab != filterPrefab || + oldfilterMaterial != filterMaterial || + oldfilterAsset != filterAsset || + oldfilterMesh != filterMesh || + oldfilterTexture != filterTexture || + oldfilterShader != filterShader || + oldfilterScript != filterScript || oldfilterCSV != filterCSV ) ProcessTreeBuffer(); @@ -678,7 +667,7 @@ class AssetBrowser : EditorWindow drawer.DrawButtonMid(new Rect(ColumOffsetX[Colum.Type], headerOffsetY + scrollY, ColumWidth[Colum.Type], kLineHeight), ColumHeader[Colum.Type], out clickType); drawer.DrawButtonMid(new Rect(ColumOffsetX[Colum.DiskSize], headerOffsetY + scrollY, ColumWidth[Colum.DiskSize], kLineHeight), ColumHeader[Colum.DiskSize], out clickDiskSize); drawer.DrawButtonMid(new Rect(ColumOffsetX[Colum.Path], headerOffsetY + scrollY, ColumWidth[Colum.Path], kLineHeight), ColumHeader[Colum.Path], out clickPath); - if(clickName) + if (clickName) { orderBase = OrderBase.Name; orderName = -orderName; @@ -731,7 +720,7 @@ class AssetBrowser : EditorWindow AssetDataManager assetDataManager = AssetDataManager.Get(); if (!assetDataManager.AllAssets.TryGetValue(node.GUID, out asset)) return false; - // 文件类型过滤 + // type if (asset.FileType == AssetData.AssetType.Scene && !filterScene) return false; else if (asset.FileType == AssetData.AssetType.Prefab && !filterPrefab) return false; else if (asset.FileType == AssetData.AssetType.Material && !filterMaterial) return false; @@ -741,17 +730,16 @@ class AssetBrowser : EditorWindow else if (asset.FileType == AssetData.AssetType.Script && !filterScript) return false; else if (asset.FileType == AssetData.AssetType.Shader && !filterShader) return false; else if (asset.FileType == AssetData.AssetType.Texture && !filterTexture) return false; - // 文件路径 + // directory if (asset.AssetPath.IndexOf(filterdirectory) == -1) return false; - // 文件名 + // asset name if (asset.Name.IndexOf(filterFile) == -1) return false; return true; } - // 按照深度绘制 private void DrawNode(FileTree.Node node, int hierachy, ref int count) { ++count; @@ -765,7 +753,6 @@ class AssetBrowser : EditorWindow } } - // 绘制单个 private void DrawAssetInfo(FileTree.Node node, int hierachy, int index) { Drawer drawer = Drawer.Get(); @@ -774,10 +761,10 @@ class AssetBrowser : EditorWindow if (!assetDataManager.AllAssets.TryGetValue(node.GUID, out asset)) return; int offsetY = index * kLineHeight; - // 绘制背景 + // draw background drawer.DrawBackground(new Rect(0, offsetY, contentWidth, kLineHeight), (index & 1) == 1 ? drawer.ColorHeavy : drawer.ColorLight); - // 绘制定位按钮 - if(selectedNode == node) + // draw ping button + if (selectedNode == node) { bool ping = false; drawer.DrawPing(new Rect(hierachy * kTabWidth, offsetY, 10, kLineHeight), ref ping); @@ -790,10 +777,10 @@ class AssetBrowser : EditorWindow } } } - // 绘制折叠按钮 + // draw foldout button if (node.Children.Count > 0) drawer.DrawFoldout(new Rect(hierachy * kTabWidth + 7, offsetY, kLineHeight, kLineHeight), ref node.Foldout); - // 绘制选择按钮 + // draw selector bool clicked; drawer.DrawSelector(new Rect(hierachy * kTabWidth + 19 + 7, offsetY, contentWidth, kLineHeight), selectedNode == node, out clicked); if (clicked) @@ -808,21 +795,21 @@ class AssetBrowser : EditorWindow } if (selectedNode == node) drawer.SetTextColor(Color.white); - // 绘制图标 + // draw asset icon drawer.DrawAssetIcon(new Rect(hierachy * kTabWidth + 19 + 7, offsetY, ColumWidth[Colum.Name], kLineHeight), asset); - // 绘制引用数 + // draw reference count drawer.DrawLabel(new Rect(ColumOffsetX[Colum.Ref], offsetY, 100, kLineHeight), asset.RefCount.ToString()); - // 绘制反向引用数 + // draw referenced count List<string> revRef; int revRefCount = 0; if (assetDataManager.AssetsReverse.TryGetValue(node.GUID, out revRef)) revRefCount = revRef.Count; drawer.DrawLabel(new Rect(ColumOffsetX[Colum.RevRef], offsetY, 100, kLineHeight), revRefCount.ToString()); - // 绘制资源类型 + // draw asset type drawer.DrawLabel(new Rect(ColumOffsetX[Colum.Type], offsetY, 100, kLineHeight), asset.Extension); - // 绘制硬盘大小 + // draw disk size drawer.DrawLabel(new Rect(ColumOffsetX[Colum.DiskSize], offsetY, 100, kLineHeight), asset.DiskSizeStr); - // 绘制资源路径 + // draw location drawer.DrawLabel(new Rect(ColumOffsetX[Colum.Path], offsetY, 1000, kLineHeight), asset.AssetPath); if (selectedNode == node) drawer.ResetTextColor(); @@ -852,14 +839,14 @@ class AssetBrowser : EditorWindow ProcessTreeBuffer(); } - // 文件树缓冲 + // file tree buffer private void ProcessTreeBuffer() { assetsTreeBuffer.root.Clear(); - foreach(FileTree.Node node in assetsTree.root) + foreach (FileTree.Node node in assetsTree.root) { - if(!Filter(node)) - continue; + if (!Filter(node)) + continue; assetsTreeBuffer.root.Add(node); } orderBase = OrderBase.Path; @@ -874,15 +861,15 @@ class AssetBrowser : EditorWindow else return 0; } - // Tree Buffer重新排序 + // sort tree buffer private void ReorderTreeBuffer() { assetsTreeBuffer.root.Sort((FileTree.Node a, FileTree.Node b) => { - AssetData aa, ab; + AssetData aa, ab; AssetDataManager.Get().AllAssets.TryGetValue(a.GUID, out aa); AssetDataManager.Get().AllAssets.TryGetValue(b.GUID, out ab); - if(aa == null || ab == null) + if (aa == null || ab == null) return 0; if (orderBase == OrderBase.Name) return clamp(orderName * aa.Name.CompareTo(ab.Name)); else if (orderBase == OrderBase.Ref) return clamp(orderRef * (aa.RefCount - ab.RefCount)); @@ -900,11 +887,11 @@ class AssetBrowser : EditorWindow } else if (orderBase == OrderBase.Type) { - if(aa.FileType == ab.FileType) + if (aa.FileType == ab.FileType) { - return clamp(orderType * ((int)aa.SubFileType - (int)ab.SubFileType)); + return clamp(orderType * ((int)aa.SubFileType - (int)ab.SubFileType)); } - return clamp(orderType * ((int)aa.FileType - (int)ab.FileType)); + return clamp(orderType * ((int)aa.FileType - (int)ab.FileType)); } else if (orderBase == OrderBase.DiskSize) return clamp(orderDiskSize * (int)(aa.DiskSize - ab.DiskSize)); else if (orderBase == OrderBase.Path) return clamp(orderPath * aa.AssetPath.CompareTo(ab.AssetPath)); @@ -933,7 +920,6 @@ class AssetBrowser : EditorWindow } -// 反向查找 public class AssetReverse : EditorWindow { private static Drawer drawer; @@ -955,13 +941,13 @@ public class AssetReverse : EditorWindow private enum Colums { - cName, // "资源列表和引用关系" - cLocation, // "资源位置" + cName, // "asset name" + cLocation, // "location" } private static readonly Dictionary<Colums, string> kColumHeader = new Dictionary<Colums, string>{ - {Colums.cName, "资源名"}, - {Colums.cLocation, "位置"}, + {Colums.cName, "Asset Name"}, + {Colums.cLocation, "Location"}, }; private static readonly Dictionary<Colums, int> kColumWidth = new Dictionary<Colums, int>{ |