当前位置: 首页 > news >正文

Unity查找资源依赖关系

这个方法主要是发现资源乱用的情况,对应的逻辑可能要改一个才能用到自己的项目里面 

[MenuItem("Tools/Prefab/查找选中资源依赖关系", false, 0)]
    public static void FindDependencies()
    {
        foreach (var guid in Selection.assetGUIDs)
        {
            string lpath = AssetDatabase.GUIDToAssetPath(guid);
            string dirName = Path.GetDirectoryName(lpath);
            string folderName = dirName.Substring(dirName.LastIndexOf("\\") + 1);
            Debug.Log("----------------------------------------------------------------");
            GameObject go = Selection.activeObject as GameObject;
            if (go == null)
            {
                Debug.Log("选取对象出错");
                return;
            }
            string assetPath = AssetDatabase.GetAssetPath(go);
            Dictionary<string, List<ObjStruct>> dePathDic = new Dictionary<string, List<ObjStruct>> ();
            if (string.IsNullOrEmpty(assetPath))
            {
                Debug.Log("注意,这不是预制体");
                return;
            }
            //获取预制体内所有Image组件
            Image[] imgArr = go.GetComponentsInChildren<Image>();
            if (imgArr == null || imgArr.Length == 0)
            {
                Debug.Log("预制体里没有Image组件");
            }
            else
            {
                foreach (var item in imgArr)
                {
                    string path = AssetDatabase.GetAssetPath(item.sprite.GetInstanceID());
                    if (!dePathDic.ContainsKey(path))
                    {
                        dePathDic.Add(path, new List<ObjStruct> ());
                    }
                    ObjStruct objStruct = new ObjStruct();
                    if (item.sprite != null)
                    {
                        objStruct.spriteName = item.sprite.name;
                        objStruct.objName = item.transform.name;
                        dePathDic[path].Add(objStruct);
                    }
                }
            }
            foreach (var dependenciePath in AssetDatabase.GetDependencies(lpath, false))
            {
                if (lpath != dependenciePath && !dependenciePath.Contains("cs"))
                {
                    if (!dependenciePath.Contains(folderName) && !dependenciePath.Contains("UICommonRes") && !dependenciePath.Contains("Font"))
                    {
                        Debug.LogError(string.Format("资源使用不当 path = {0} 依赖 > {1}", lpath, dependenciePath));
                        if (dePathDic.TryGetValue(dependenciePath,out List<ObjStruct> list))
                        {
                            for (int i = 0; i < list.Count; i++)
                            {
                                Debug.LogError(string.Format("错误详情:对象名:{0} , Sprite名:{1}", list[i].objName, list[i].spriteName));
                            }
                        }
                    }
                    else
                    {
                        Debug.Log(string.Format("lpath = {0} 依赖 > {1}", lpath, dependenciePath));
                    }
                }
            }

            
        }
        Debug.Log("查找依赖结束");
    }

http://www.lryc.cn/news/146526.html

相关文章:

  • 【操作系统】聊聊局部性原理是如何提升性能的
  • 多线程应用——单例模式
  • 几种在JavaScript中创建对象的方式!
  • java项目mysql转postgresql
  • SpringBoot Mybatis 多数据源 MySQL+Oracle
  • (笔记五)利用opencv进行图像几何转换
  • 【Flutter】Flutter 使用 fluttertoast 实现显示 Toast 消息
  • nowcoder NC236题 最大差值
  • TCP/IP五层模型、封装和分用
  • LeetCode 面试题 01.08. 零矩阵
  • Qt应用开发(基础篇)——进度条 QProgressBar
  • 108页石油石化5G智慧炼化厂整体方案PPT
  • Codeforces 1625E2 括号树 + BIT
  • PHP命令行CLI的使用
  • 近期嵌软线下笔试题记录
  • 基于MYSQL的主从同步和读写分离
  • java八股文面试[多线程]——合适的线程数是多少
  • Linux系统下vim常用命令
  • 【2023】LeetCode HOT 100——链表
  • 智能井盖传感器,物联网智能井盖系统
  • C语言三子棋解析
  • 【Jenkins打包服务,Dockerfile报错:manifest for java : 8 not fourd】
  • 读SQL学习指南(第3版)笔记06_连接和集合
  • C#学习,结构,面向对象,类
  • 【PHP】文件操作
  • 科创板50ETF期权交易:详细规则、费用、保证金和开户攻略
  • 怎么把图片放大并且清晰?有详细的方法步骤
  • C++ 构造函数、析构函数调用虚函数
  • 工业状态监测如何选择合适的无线技术?
  • Mysql45讲学习笔记