主要功能有三个:

1.右键菜单自定义方法

2.获取选中预制体内的所有Image图片引用(打印出了路径)

3.该预制体用到的图片资源,被其他预制体引用的情况(打印出了引用的预制体路径)

具体看代码,有注释

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
using System.IO;public class GetPrefabImageDetal : EditorWindow
{static List<string> spritePath = new List<string>();static new string name = "";static List<string> checkGuids = new List<string>();static List<string> pList = new List<string>();static Vector2 srPos;bool isCheck = true;public static void Open(){var rect = new Rect(0, 0, 400, 600);GetWindowWithRect(typeof(GetPrefabImageDetal), rect, true);}//在Project下添加自定义功能[MenuItem("Assets/CheckImg", false)]public static void CheckImg(){GameObject go = Selection.activeObject as GameObject;if (go  == null){Debug.Log("选取对象出错");return;}name = go.name;Debug.Log("当前选中:" + go.name);string assetPath = AssetDatabase.GetAssetPath(go);if (string.IsNullOrEmpty(assetPath)){Debug.Log("注意,这不是预制体");return;}//获取预制体内所有Image组件Image[] imgArr = go.GetComponentsInChildren<Image>();if (imgArr == null || imgArr.Length == 0){Debug.Log("预制体里没有Image组件");}else{Debug.Log("当前预制体内有" + imgArr.Length + "个Image组件");foreach (var item in imgArr){string path = AssetDatabase.GetAssetPath(item.sprite.GetInstanceID());if (!spritePath.Contains(path)){spritePath.Add(path);}//得到GUIdstring guid = AssetDatabase.AssetPathToGUID(path);if (!checkGuids.Contains(guid)){checkGuids.Add(guid);}}Open();}}//检查guid引用情况static void CheckAssetUsedPrefab(List<string> check){//只检查prefabstring[] guids = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets" });Debug.Log("检查的资源文件个数:" + guids.Length);for (int i = 0; i < guids.Length; i++){string filePath = AssetDatabase.GUIDToAssetPath(guids[i]);//进度条显示EditorUtility.DisplayCancelableProgressBar("资源检查中...", filePath, i / guids.Length * 1.0f);//info包含的是filePath对应文件的全部信息(作为text文本读取出来)string info = File.ReadAllText(filePath);Debug.Log("info:" + info);foreach (var item in check){//检查预制体是否引用了该资源if (info.Contains(item) && !pList.Contains(filePath)){//将引用过该资源的预制体路径加入列表(去重后的)pList.Add(filePath);}}}EditorUtility.ClearProgressBar();if (pList.Count == 0){Debug.Log("未找到相关引用");}}private void OnGUI(){GUILayout.BeginVertical();GUILayout.Label(name + "用到的精灵图片有:");GUILayout.Space(10);foreach (var item in spritePath){GUILayout.Label(item);GUILayout.Space(2);}GUILayout.Space(15);if (isCheck){isCheck = false;CheckAssetUsedPrefab(checkGuids);}GUILayout.Label("我是分割线*****************************");GUILayout.Space(15);GUILayout.Label("上述资源引用如下");//滚动列表GUILayout.BeginScrollView(srPos, false, true);foreach (var item in pList){GUILayout.Label(item);GUILayout.Space(2);}GUILayout.Label("检查完毕~");GUILayout.EndVertical();}}

运行结果如图:

unity编辑器拓展(三) 预制体(Image)资源引用查找相关推荐

  1. 【Unity】静态优化工具支持UGUI合批分析、AB包冗余分析、预制体使用资源情况分析

    目录 工具Github链接地址 工具功能 一.分析预制体静态资源,如贴图.精灵图.图集等使用情况. 二.分析AB包冗余情况 三.分析UGUI合批情况 工具Github链接地址 https://gith ...

  2. Unity使用c#开发遇上的问题(六)(3dmax围绕指定中心旋转,unity中动态调用预制体并根据模型旋转指定角度)

    文章目录 前言 一.3dmax创建子弹.炮塔及武器库 1.相关模型 2.炮塔模型引入unity,无法绕旋转球旋转,重新调整 1.3dmax中默认炮管的中心点 2.选择层次界面 3.选择编辑工作轴 4. ...

  3. Unity 将图片做成预制体

    Unity 将图片做成预制体 刚导入Assets的图片是无法直接拖入场景中的,若我们想要将图片变成预制体,需要做一点转化. 方法如下: 选中想要转成预制体的图片,更改如下图: 然后就可以将图片拖入场景 ...

  4. Unity 拓展编辑器 - 导出UI预制体lua文件

    使用oldin插件 + Unity自带拓展编辑器编写 实现效果: 界面配置基类:UIDialogConfig using Sirenix.OdinInspector; using UnityEngin ...

  5. unity编辑器拓展整理(主要是siki的视频教程)

    编辑器拓展 https://blog.csdn.net/zxl321365712/article/details/80080586 蛮牛上一个详细的博客 http://www.manew.com/th ...

  6. 【Unity编辑器扩展】包体优化神器,图片压缩,批量生成图集/图集变体,动画压缩

    功能介绍: 1. 压缩工具支持对图片原文件压缩(支持png/jpg),也支持使用Unity内置图片压缩批量对图片设置压缩参数. 2. 支持以文件夹或及其子文件夹为单位批量生成图集(SpriteAtla ...

  7. 【Unity入门】21.预制体

    [Unity入门]预制体     大家好,我是Lampard~~     欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢  (一)预制体制作 (1)什么是预制体     这一章节的博客 ...

  8. Unity之自动生成预制体脚本

    在Unity开发中有许许多多的UI界面,包含着不同的组件,比如Button.Image等,我们需要按正确的路径找到它们并持有它们,这个步骤在界面十分庞大的时候,会十分繁琐易错.本文介绍的自动生成代码工 ...

  9. Unity 批量修改场景预制体,删除空Animation组件

    关键点主要是对场景中Prefab得移除组件得处理,以及依赖Animation组件得删除 1. 通过 PrefabUtility.GetCorrespondingObjectFromSource 取得预 ...

  10. Unity 判断是否为预制体的根节点

    传进场景中的物体 gameObject 判断其是否为预制体的根节点 //判断是否为预制体的根节点public bool IsPrefabRoot(GameObject obj) {if (Prefab ...

最新文章

  1. Nilearn教程系列(3)-ICA静息功能磁共振成像的分组分析:CanICA
  2. 人人都能看懂的循环神经网络RNN
  3. 大林算法计算机控制实验报告,大林算法
  4. pandas基础(part2)--DataFrame
  5. 原来浏览器原生支持JS Base64编码解码
  6. 做三维模型_这几款倾斜实景三维裸眼3D采集软件你了解吗?
  7. 金融评分卡项目—4.GBDT模型在流失预警模型中的应用
  8. 关于Adapter模式
  9. linux识别罗兰声卡,罗兰UA22 USB音频接口声卡调试介绍篇
  10. CSS样式--前端布局(五)
  11. Processing摸索前行(8)-弹珠游戏
  12. (六)分布式系统认证方案
  13. 最实用的Word快捷键大全
  14. 学习三极管的原理和作用
  15. 迄今最精准人脸数字模型,任意 2D 照片转换逼真3维人脸(转)
  16. Python模拟搜狗翻译发送请求
  17. scip指令集_C++上位机与安捷伦agilent示波器的通讯
  18. 由Asset中的double free引发的Android系统及APP崩溃问题分析
  19. 基于DSP+FPGA的机载雷达伺服控制系统的硬件设计与开发
  20. nest笔记十:typeorm使用经验小结

热门文章

  1. AutoDesk CAD 2014安装VBA Enabler图文教程(附AutoCAD_2014_VBA_Win_64bit下载)
  2. 凤凰刷机找不到手机设备的解决方法
  3. 三体第一部(01到12节)-附带感想
  4. Java如何进行Base64的编码(Encode)与解码(Decode)
  5. vb html编程,VB编程:vb打开网页代码
  6. window重装系统
  7. 佳能gm4080无线服务器安装,佳能GM4080驱动
  8. 网页中返回顶部代码及注释说明
  9. 谭浩强 c语言源码下载,谭浩强C语言教材源代码第二章
  10. c语言谭浩强第八章函数PPT,清华谭浩强C语言 第8章 函数.ppt