Unity Editor编辑扩展

面板按钮扩展

在Assets下新建Editor文件,创建一个类,引用命名空间UnityEditor
写好一个静态方法,在方法上加一个属性[MenuItem("")]
[MenuItem(“Tool/sss”)]
[MenuItem(“Tool/sss”,bool isValidateFunction,int priority)
isValidateFunction 这个方法执行前是否需要验证,验证通过才能点击执行,否则为灰色
priority:显示优先级,默认为1000,优先级相差10以上,会进行分组,有线分割开来

菜单栏扩展

[MenuItem(“Tool/sss”)]
那么在菜单栏就可以看到了
Hierarchy面板右键扩展
路径以GameObject开始, 将优先级弄成10以上就可以了
例如:[MenuItem(“GameObject/XP/XX”,false,1)]

Project面板右键扩展

路径以Assets开始
例如[MenuItem(“Assets/XP”)]

Inspector脚本面板右键扩展

方法1,在脚本的内部写
利用[ContextMenu(“XX”)],放在任意方法前
方法2,在Editor文件下的类写,
利用[MenuItem()],需要以CONTEXT/脚本的名字/自定义名字
需要放在一个静态方法前,操作这个组件的话,在静态方法中添加参数对象(MenuCommand mc),mc.context获取当前操作的组件
例如:
[MenuItem(“CONTEXT/Player/TEST”)]
static void Test(MenuCommand mc)
{
Player player =mc.context as Player;
}
这个可以用在一些封装好的组件,比如Unity的内置组件Rigidbody

获取当前鼠标选择的物体

通过类Selection
activeGameObject 获取当前选择的游戏物体,只要是GameObject的类型都可以
activeObject 不单单是游戏物体,Assets下的任意文件都可以
反之objects和gameobjects就是所有选择的物体,先选择的在前

Editor脚本下给一些操作添加撤销记录

通过Editor下通过代码操作的记录是无法通过Ctrl+Z进行撤销,利用Undo这个类
例如设置父节点或者删除物体,调用Undo类中的设置父节点(SetTransformParent),删除物体(DestroyObjectImmediate),而不是调用Transform.SetParent(),GameObject.DestroyImmediate()
例如通过Editor下修改某个对象的属性,通过Ctrl+Z撤销操作
Undo.RecordObject(Object obj,string name); 需要放在更改操作前

给这些方法增加快捷键***

在路径后面加一个空格,字母键位对应小写字母,shift对应#,ctrl对应%,alt对应&,
一些特殊键位:LEFT(←)、RIGHT(→)、UP(↑)、DOWN(↓)、F1 … F12、HOME、END、PGUP、PGDN
如果是单个键,只能是除了ctrl和shift和alt其他以外的任何键位,需要在之前加上下线(_),例如[MenuItem(“Tool/sss _5”)] [MenuItem(“Tool/sss _F12”)] [MenuItem(“Tool/sss _a”)]
组合键,必须是以ctrl或者shift或者alt开头的键位开头,前面不需要加下划线
例如
[MenuItem(“Tool/sss %a”)][MenuItem(“Tool/sss %F1”)]
注意,组合键只能最后只能一个键,前面可以放%#&
例如[MenuItem(“Tool/sss %#&a”)] 可以
[MenuItem(“Tool/sss %ab”)] 不行

给方法加上验证方式

再添加一个静态方法,方法上加上[MenuItem("",true,11)],返回值为bool
两个方法首先路径要相同,验证方法MenuItem中isValidateFunction为true
返回值为true才能点击,否则为灰色的不可点击状态

给Inspector面板上的属性右键扩展按钮

[ContextMenuItem("","")],放在可以在面板显示的字段上
第一个参数:面板显示名称
第二个参数:方法名字

向导

创建一个类XPWizard用来存放向导的属性,继承ScriptableWizard
显示向导:ScriptableWizard.DisplayWizard< XPWizard>(string title,string createButtonName,otherButtonName);
向导只能有两个按钮,可以选择创建一个按钮还是两个按钮
title:向导的标题 ,createButtonName:修改创建按钮的名字,默认为Create,otherButtonName :其他按钮的名字
点击向导中的创建按钮的监听方法:void OnWizardCreate()
打开向导中时调用和里面的值被修改是调用:void OnWizardUpdate()
点击其他按钮的方法: void OnWizardOtherButton()
错误信息:errorString,红色提示文字,动态赋值
帮助信息:helpString,正常颜色提示,动态赋值
底下按钮是否可点:isValid

Editor保存数据

EditorPrefs.SetInt(”AA",1); EditorPrefs.GetInt(“AA”);

编辑器工具:EditorUtility

自定义进度条  :  EditorUtility.DisplayProgressBar(string title,string info,float progress);
                               title:标题   info 内容     progress : 进度(0-1)
                             默认没有取消按钮,一旦开始,无法中止,
                            调用: Editor Utility.ClearProgressBar
  对话框:EditorUtility.DisplayDialog(string title,string message,string  ok,string cancel)
                  title:标题   message: 对话框内容   ok :确认按钮的文本   cancel 取消按钮的文本
                 返回值为bool值,点击OK返回true,点击cancel返回false

自定义窗口:

创建一个类XPWindow继承EditorWindow,
显示窗口:
XPWindow xpWindow = EditorWindow.GetWindow();
xpWindow.show();
在OnGui中绘制这个窗口(EditorGUILayout或者GUILayout)
显示提示信息:ShowNotification(GUIContent notification);

Guess you like

Origin blog.csdn.net/weixin_44806700/article/details/120106113