更新日期:2019年11月11日。
Github源码:[点我获取源码]
索引
Utility编辑器实用工具简介
Utility编辑器实用工具包含多个提升开发效率、调试效率的编辑器工具。
使用Utility
批处理工具 Component Batch
ComponentBatch批处理工具用于批量处理Scene场景中任意组件。
打开 Component Batch
1.Root:批处理的根物体。
2.Component Filter:批处理目标组件的名称筛选器。
3.Component:批处理目标组件。
4.Include Inactive:是否涵盖未激活的组件。
5.Collect:开始收集组件。
批处理 Component
例如批处理Canvas物体下的所有Text组件,我们将Canvas设置为根物体。
在筛选栏中输入text,再点击Component下拉菜单,在筛选出来的组件中找到我们的目标组件UnityEngine.UI.Text。
注意:筛选器的作用只是为了排除多余的不符合要求的组件。
到此,我们直接点击Collect按钮就可以筛选出Canvas物体下的所有Text组件了,在这里,我们就可以批量处理Canvas物体下的四个Text组件的属性。
批处理工具 Project Batch
ProjectBatch批处理工具用于批量处理Project目录中的任意对象。
打开 Project Batch
1.Folder:批处理的根文件夹。
2.Object Filter:批处理目标对象的名称筛选器。
3.Object:批处理目标对象。
4.Collect:开始收集对象。
批处理 Object
例如批处理Image文件夹下的所有Texture对象,我们将Image设置为根文件夹。
在筛选栏中输入texture,再点击Object下拉菜单,在筛选出来的对象中找到我们的目标对象UnityEngine.Texture。
注意:筛选器的作用只是为了排除多余的不符合要求的对象。
到此,我们直接点击Collect按钮就可以筛选出Image文件夹下的所有Texture对象了,在这里,我们就可以批量处理所有Texture对象的属性。
程序集查看器 Assembly Viewer
AssemblyViewer用于查看当前程序域的所有程序集,功能包括浏览程序集中所有类型,浏览类型的所有字段、属性、方法等,是开发编辑器工具的得力助手。
打开程序集查看器
使用程序集查看器
例,使用程序集查看器实现编辑器的实用功能:快捷键清理控制台。
首先我们要想到,一键清理控制台的功能是Unity编辑器提供的,所以我们只需要反射到那个清理控制台的方法,直接调用就可以了。
所以最重要的工作就是找到那个Unity编辑器中用来清理控制台的方法。
毫无疑问,所有编辑器功能无一例外都会从UnityEditor程序集开始查找,我们在Assembly栏找到UnityEditor程序集并选中它。
此时的Type栏便显示UnityEditor程序集中的所有类型,我们在搜索框输入log,经过一系列筛选,我们最终锁定了LogEntries为目标,在Type栏选中它。
很遗憾的得知他是一个封闭的内部类,通过继承来实现是不可能的了,不过,再牛的内部类,也难不倒反射!我们在Member栏中找到Clear方法,不出所料,这就是一键清理控制台的方法了。
万事俱备,只欠代码了!唰唰唰,我们三行搞定今天的任务:
private static void ClearConsole()
{
Type logEntries = GetTypeInEditorAssemblies("UnityEditor.LogEntries");
MethodInfo clearMethod = logEntries.GetMethod("Clear", BindingFlags.Static | BindingFlags.Public);
clearMethod.Invoke(null, null);
}
接下来,把这个方法加入到编辑器菜单,并定制快捷键就完工了,当然,框架中已经完成了这个功能。
结语:在一般情况下,即使有反编译工具,能够获取到源代码,但也无法改写,所以如果只是用于反射,程序集查看器将是一个不错的工具。
自定义执行器 Custom Executer
CustomExecuter可以在编辑器模式或运行模式,执行任何自定义操作,而无需触发Unity编辑器的编译。
打开执行器
动态执行
Namespace栏为动态代码引用的命名空间。
Assembly栏为动态代码引用的程序集。
在Code栏输入需要执行的代码,直接点击下方的Execute按钮便可以执行,此过程不会触发Unity编辑器的编译,也就是说即便在运行时也可以使用(因为触发Unity编辑器的编译时,会导致大量托管对象被销毁,从而程序必须重新运行)。
我们点击Execute按钮执行,控制台输出:
我们可以在运行时输入各种复杂但正确的代码:
我们点击Execute按钮执行,控制台输出:
静态执行
静态执行比较简单,也即是呼叫指定实体上的指定组件的指定方法。
Entity为执行的实体。
Target为执行的目标组件。
Method为呼叫的方法。
Parameters为传入的实参列表。
例:我们手动呼叫Player实体的Find方法,查找其是否存在名为Hand的子物体。
我们点击Execute按钮执行,控制台输出:
控制台会打印本次呼叫的结果,返回值为null,可知Player物体并不存在名为Hand的子物体。
结语:Custom Executer是一个不错的工具,优点显而易见:它不需要经过Unity编辑器的编译就可以执行你需要的任何逻辑!但缺点也不容忽视:几乎没有代码高亮及提示!只能说这是一次不容错过的锻炼纯手打能力的机会!
框架实用特性
请参阅框架实用特性。