GitHub地址
当在 窗口中选中资源时,实现 同步选中Assets下的资源对象的功能:
修改AssetTreeView脚本为:
usingUnityEngine;usingUnityEditor;usingUnityEditor.IMGUI.Controls;usingSystem.Collections.Generic;// 带数据的 TreeViewItempublicclassAssetViewItem:TreeViewItem{publicReferenceFinderData.AssetDescriptiondata;}// 资源引用树publicclassAssetTreeView:TreeView{constfloatkIconWidth=18f;constfloatkRowHeights=20f;publicAssetViewItemassetRoot;privateGUIStylestateGUIStyle=newGUIStyle{richText=true,alignment=TextAnchor.MiddleCenter};enumMyColumns{Name,Path,State,}publicAssetTreeView(TreeViewStatestate,MultiColumnHeadermulticolumnHeader):base(state,multicolumnHeader){rowHeight=kRowHeights;columnIndexForTreeFoldouts=0;showAlternatingRowBackgrounds=true;showBorder=false;customFoldoutYOffset=(kRowHeights-EditorGUIUtility.singleLineHeight)*0.5f;extraSpaceBeforeIconAndLabel=kIconWidth;}// ================== 新增:选中同步到 Project ==================protectedoverridevoidSelectionChanged(IList<int>selectedIds){if(selectedIds==null||selectedIds.Count==0)return;List<Object>objects=newList<Object>();foreach(varidinselectedIds){varitem=FindItem(id,rootItem)asAssetViewItem;if(item==null||item.data==null)continue;stringpath=item.data.path;if(string.IsNullOrEmpty(path))continue;varobj=AssetDatabase.LoadAssetAtPath<Object>(path);if(obj!=null)objects.Add(obj);}if(objects.Count>0){Selection.objects=objects.ToArray();EditorGUIUtility.PingObject(objects[0]);}}// =============================================================protectedoverridevoidContextClickedItem(intid){SetExpanded(id,!IsExpanded(id));}protectedoverridevoidDoubleClickedItem(intid){varitem=FindItem(id,rootItem)asAssetViewItem;if(item!=null&&item.data!=null){varassetObject=AssetDatabase.LoadAssetAtPath<Object>(item.data.path);if(assetObject!=null){EditorUtility.FocusProjectWindow();Selection.activeObject=assetObject;EditorGUIUtility.PingObject(assetObject);}}}publicstaticMultiColumnHeaderStateCreateDefaultMultiColumnHeaderState(floattreeViewWidth){varcolumns=new[]{newMultiColumnHeaderState.Column{headerContent=newGUIContent("Name"),headerTextAlignment=TextAlignment.Center,width=200,minWidth=60,autoResize=false,allowToggleVisibility=false,canSort=false},newMultiColumnHeaderState.Column{headerContent=newGUIContent("Path"),headerTextAlignment=TextAlignment.Center,width=360,minWidth=60,autoResize=false,allowToggleVisibility=false,canSort=false},newMultiColumnHeaderState.Column{headerContent=newGUIContent("State"),headerTextAlignment=TextAlignment.Center,width=60,minWidth=60,autoResize=false,allowToggleVisibility=true,canSort=false},};returnnewMultiColumnHeaderState(columns);}protectedoverrideTreeViewItemBuildRoot(){returnassetRoot;}protectedoverridevoidRowGUI(RowGUIArgsargs){varitem=(AssetViewItem)args.item;for(inti=0;i<args.GetNumVisibleColumns();++i){CellGUI(args.GetCellRect(i),item,(MyColumns)args.GetColumn(i),refargs);}}voidCellGUI(RectcellRect,AssetViewItemitem,MyColumnscolumn,refRowGUIArgsargs){CenterRectUsingSingleLineHeight(refcellRect);switch(column){caseMyColumns.Name:variconRect=cellRect;iconRect.x+=GetContentIndent(item);iconRect.width=kIconWidth;if(iconRect.x<cellRect.xMax){varicon=GetIcon(item.data.path);if(icon!=null)GUI.DrawTexture(iconRect,icon,ScaleMode.ScaleToFit);}args.rowRect=cellRect;base.RowGUI(args);break;caseMyColumns.Path:GUI.Label(cellRect,item.data.path);break;caseMyColumns.State:GUI.Label(cellRect,ReferenceFinderData.GetInfoByState(item.data.state),stateGUIStyle);break;}}privateTexture2DGetIcon(stringpath){Objectobj=AssetDatabase.LoadAssetAtPath<Object>(path);if(obj!=null){Texture2Dicon=AssetPreview.GetMiniThumbnail(obj);if(icon==null)icon=AssetPreview.GetMiniTypeThumbnail(obj.GetType());returnicon;}returnnull;}}