提示:提示个锤子
文章目录
前言
最近公司在做性能优化,所以我也接了一些工具的需求,是做一个查找图片在预制中是否有使用的一个工具,做完时候也想着记录一下开发工具的大致步骤,万一后边忘了,也方便以后自己进行再次查阅。
一、显示窗口
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;