Unity 编辑器工具 - 资源引用查找器

慈云数据 2024-05-11 技术支持 52 0

目录

1.功能概述

2.完整代码

3. 实现原理

4. 使用预览

5.新增优化版本


在Unity项目开发过程中,管理和维护资源之间的引用关系是至关重要的。当然我们项目也是需要这个功能 毕竟项目大了之后查找资源引用还是交给 资源引用查找器 比较好。

1.功能概述

资源引用查找器允许开发者选择一个目标资源,并在整个项目中查找引用了该资源的其他资源。其主要功能包括:

  • 在Unity编辑器菜单栏下添加一个名为"Resource Reference Finder"的菜单项。
  • 提供一个可调整大小的窗口,用于选择目标资源和显示引用结果
  • 通过点击"Search"按钮来触发搜索过程,查找所有引用了目标资源的Prefab文件,并将结果展示在窗口中。

    2.完整代码

    using UnityEditor;
    using UnityEngine;
    using System.Collections.Generic;
    using System.IO;
    public class ResourceReferenceFinder : EditorWindow
    {
        [MenuItem("Assets/Resource Reference Finder")]
        static void SearchReference()
        {
            GetWindow("Resource Reference Finder");
        }
        private static Object targetResource;
        private List referencingAssets = new List();
        private Vector2 scrollPosition;
        private void OnGUI()
        {
            // 显示资源选择字段和搜索按钮
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Select Target Resource:", GUILayout.Width(150));
            targetResource = EditorGUILayout.ObjectField(targetResource, typeof(Object), true, GUILayout.Width(200));
            if (GUILayout.Button("Search", GUILayout.Width(100)))
            {
                ReferenceFinder();
            }
            EditorGUILayout.EndHorizontal();
            // 滚动视图开始
            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
            EditorGUILayout.BeginVertical();
            // 显示搜索结果
            for (int i = 0; i  
    

    3. 实现原理

    • 使用Unity编辑器提供的MenuItem特性,在菜单栏下添加了一个自定义的菜单项,用于触发资源引用查找器窗口的显示。
    • 创建了一个继承自EditorWindow的窗口类,实现了GUI绘制和资源引用搜索的逻辑。
    • 在GUI中,通过ObjectField和Button控件实现了目标资源的选择和搜索按钮的功能。
    • 使用AssetDatabase类来访问项目中的资源,并通过FindAssets方法查找所有Prefab文件。
    • 读取Prefab文件的内容,检查是否包含目标资源的GUID,如果是,则将该Prefab添加到引用结果列表中。

      4. 使用预览

      查找Prefab引用

      查找图片引用

      5.新增优化版本

      新增优化版本右键直接选中需要查找的资源  直接省略繁琐步骤 完整代码如下

      using UnityEditor;
      using UnityEngine;
      using System.Collections.Generic;
      using System.IO;
      public class ResourceReferenceFinder : EditorWindow
      {
          private List referencingAssets = new List();
          private Vector2 scrollPosition;
          [MenuItem("Assets/ZYT ASSETS/Find References", true)]
          private static bool ValidateSearchReference()
          {
              // 只在选中了对象且不是文件夹时才显示菜单项
              return Selection.activeObject != null && !AssetDatabase.IsValidFolder(AssetDatabase.GetAssetPath(Selection.activeObject));
          }
          [MenuItem("Assets/ZYT ASSETS/Find References")]
          private static void SearchReference()
          {
              // 创建并打开资源引用查找窗口
              if (Selection.activeObject != null && !AssetDatabase.IsValidFolder(AssetDatabase.GetAssetPath(Selection.activeObject)))
              {
                  GetWindow("Resource Reference Finder").ReferenceFinder(Selection.activeObject);
              }
          }
          private void OnGUI()
          {
              // 显示搜索结果
              EditorGUILayout.LabelField("Search Results:");
              // 滚动视图开始
              scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
              EditorGUILayout.BeginVertical();
              // 显示搜索结果
              for (int i = 0; i  
      

       使用方法  

      如果未选中资源则是如下状况 工具是没法使用的

      下图是现在修改后的界面

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon