图片查找工具

提示:提示个锤子


前言

最近公司在做性能优化,所以我也接了一些工具的需求,是做一个查找图片在预制中是否有使用的一个工具,做完时候也想着记录一下开发工具的大致步骤,万一后边忘了,也方便以后自己进行再次查阅。


一、显示窗口

1.面板创建

创建编辑器窗口是在EditorWindow类下的,所以需要继承继承EditorWindow类,这个类下有很多的函数,但是今天主要在这里记录下GetWindowWithRect这个函数。
代码如下:

using UnityEngine;
using UnityEditor;
public class EditorWindowTest : EditorWindow
{
	[MenuItem("Cards/资源查找工具", false)]
	private static void Panel()
    {
    	GetWindowWithRect<SpriteToolsMainWindow>(new Rect(0, 0, 500, 500), false, "图片工具栏");
    }
}

具体解释:
1.MenuItem用于向主菜单和检视面板上添加菜单项,MenuItem 属性能够将任何静态函数转变为菜单命令。仅静态函数可使用 MenuItem 属性。
2.GetWindowWithRect属性会返回当前屏幕一个t类型的EditorWindow,第一个参数控制窗口的坐标与宽高,第二个参数创建不通类型窗口具体参考官方文档,第三个是窗口的标题。

2.绘制面板功能项

在面板上使用的布局版本分别是:EditorGUILayout和GUILayout两种布局。
其中使用了EditorGUILayout中的ObjectField方法,可以容纳任何类型的框框。
还使用了GUILayout中的布局方式(BeginVertical),Button,Label这几个属性。
代码如下(示例):

using UnityEditor;
using UnityEngine;
public class Test
{
	private Object spriteObject;
	private void OnGUI()
    {
    	GUILayout.BeginVertical();
    	
        spriteObject = EditorGUILayout.ObjectField("将纹理文件夹拖入:", spriteObject, typeof(Object), true,
                GUILayout.Width(300), GUILayout.Height(20));
                
        GUILayout.Label("描述");
        
        if (GUILayout.Button("开始查找", GUILayout.Width(100), GUILayout.Height(20)))
            Debug.Log("触发");
            
        GUILayout.EndVertical();
    }
}

以上便是面板的显示部分的全部内容。

二、EditorUtility

Editor 实用程序函数。

1.进度条显示

显示或更新含有 Cancel 按钮的进度条
代码如下:

using UnityEngine;
using UnityEditor;
public class Test
{
	float secs = 0;
    float progress = 0;
    
	public void ProgressBarExample(Object spriteObject)
    {    	
    	 if (EditorUtility.DisplayCancelableProgressBar(
             "正在查找",
             "当前查找到哪个,动态显示",
             (float)(progress / secs)))
         {
             Debug.Log("终止进度");
         }
    }
}

三、数据访问和资源操作

1.获取存储资源的文件夹路径

代码如下:

using UnityEngine;
using UnityEditor;
public class Test
{
	public void Path(Object spriteObject)
    {    	
    	string path = AssetDatabase.GetAssetPath(spriteObject)
    }
}

返回的所有路径均是相对于项目文件夹的路径,例如:“Assets/MyTextures/hello.png”。

2.筛选资源

代码如下:

using UnityEngine;
using UnityEditor;
public class Test
{
	public void GetUGID(Object spriteObject)
    {    	
    	// 获取到图片所有的ugid
        string[] spriteGuidLst =
            AssetDatabase.FindAssets("t:texture", new[] { AssetDatabase.GetAssetPath(spriteObject) });
    }
}

返回值:string[] 匹配资源的数组。请注意将返回 GUID。
注意:搜索不区分大小写。

3.资源id和路径之间转换

代码如下:

using UnityEngine;
using UnityEditor;
public class Test
{
	public void Path(Object spriteObject)
    {    	
    	// 获取到图片所有的ugid
        string[] spriteGuidLst =
            AssetDatabase.FindAssets("t:texture", new[] { AssetDatabase.GetAssetPath(spriteObject) });
		
		foreach (var guid in spriteGuidLst)
        {
            var path = AssetDatabase.GUIDToAssetPath(guid);
            Debug.Log(path);
        }
    }
	
	public void Doit()
    {
    	// 将资源文件路径转换为GUID
        string t = AssetDatabase.AssetPathToGUID("Assets/texture.jpg");
        Debug.Log(t);
    }
}

四、File文件类

1.ReadAllText

该函数的作用:打开一个文本文件,读取文件的所有行,然后关闭该文件。
代码如下:

using UnityEngine;
using UnityEditor;
public class Test
{	
	public void OpenFile()
    {
    	// 获取到文件的所有行信息。
    	string content = File.ReadAllText("Assets/main.prefab");
    }
}

总结

以上便是工具的核心实现使用的函数,具体的函数使用有些说的不太清楚,可以自己去官方文档进行参考—网盘SpriteTools;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Duplicate Photo Finder Plus 是一款快速重复图片查找器,基于图片内容快速查找驱动器上的重复图片,您可删除不需要的图片恢复宝贵的磁盘空间,降低管理成本,避免不必要的混淆,100% 的准确结果,你会爱上它的! 它内置高速图像比较算法,工作速度非常快。搜索结果 100% 准确,因为它是依赖图片内容搜索比较图片,而不是使用图片名称、最后修改日期或文件大小。 此外,它非常容易使用,只需选择资源、类型,然后点击“立即查找”按钮即可快速查找。甚至您还可以使用建议的搜索条件直接搜索。 一旦查找完成,您将立即看到结果(选择组的重复图片列表和预览)。它使用智能选择功能自动检查不需要的图片,按照大小降序对结果进行排序,并通过不同的颜色标记相邻的重复图片组,以便您方便地操作重复的图片。您还可对结果列表中找到的重复图片 / 高亮显示图片进行一些常见操作,例如保存、加载、移动到回收站、删除、打开 / 运行、打开文件位置、查找、全部取消选中、反向检查和显示属性等。 当然,您可以使用一些有用的选(例如智能选择、是否扫描隐藏文件、和排除文件夹等)来影响最终结果。 特点: + 比较图片内容,100% 准确结果 + 高速比较算法,非常快 + 智能选择:自动检查不需要的图片 + 支持几乎所有流行的图片格式 + 非常容易使用,只需点击一下即可获得结果 + 完美预览(自动调整最佳的大小) + 灵活的来源:驱动器、文件夹、文件和类型 + 可重用结果:保存 / 加载重复图片列表 + 有用的选:智能选择、子文件夹、隐藏文件、排除路径等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值