提示:提示个锤子
文章目录
- 前言
- 一、显示窗口
- 1.面板创建
- 2.绘制面板功能项
- 二、EditorUtility
- 1.进度条显示
- 三、数据访问和资源操作
- 1.获取存储资源的文件夹路径
- 2.筛选资源
- 3.资源id和路径之间转换
- 四、File文件类
- 1.ReadAllText
- 总结
前言
最近公司在做性能优化,所以我也接了一些工具的需求,是做一个查找图片在预制中是否有使用的一个工具,做完时候也想着记录一下开发工具的大致步骤,万一后边忘了,也方便以后自己进行再次查阅。
一、显示窗口
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){ // 获取到图片所有的ugidstring[] 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){ // 获取到图片所有的ugidstring[] 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(){// 将资源文件路径转换为GUIDstring 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;