博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unity编辑器扩展
阅读量:6676 次
发布时间:2019-06-25

本文共 5475 字,大约阅读时间需要 18 分钟。

01:添加自己的工具

以Editor命名的文件夹允许其中的脚本访问Unity Editor的API。如果脚本中使用了在UnityEditor命名空间中的类或方法,它必须被放在名为Editor的文件夹中。Editor文件夹中的脚本不会在build时被包含。在项目中可以有多个Editor文件夹。注意:如果在普通的文件夹下,Editor文件夹可以处于目录的任何层级。如果在特殊文件夹下,那Editor文件夹必须是特殊文件夹的直接子目录。1.必须是放在 Assets / Editor 文件夹下的类,且使用了 using UnityEditor 2.调用的函数必须是静态函数(static)

MenuItem菜单项

MenuItem属性允许你添加菜单项到主菜单和检视面板上下文菜单。
(该属性把任意静态函数变为一个菜单命令。仅静态函数能使用这个MenuItem属性。)
MenuItem是编辑器类,所以技能导入 using UnityEditor; 命名空间
且一般我们的类也不是集成自MonoBehaviour的,而是集成ScriptableObject

using UnityEngine;using UnityEditor; //public class Tools  {    [MenuItem("Tools/Test")]    public  static void Test()    {       Debug.Log("233");    }}

在这里插入图片描述

02:MenuItem菜单的先后排序

MenuItem(string itemName, bool isValidateFunction, int priority) itemName:菜单名称路径 isValidateFunction:不写为false,true则点击菜单前就会调用 priority:菜单项显示排序第一个参数为菜单路径名称,可添加菜单快捷键:(空格后加如下符号设置) 第三个参数为优先级,表示上下排列的顺序,小的在上,不写则默认为1000。
[MenuItem("Tools/Test1", false,1)]    public static void Test1()    {        Debug.Log("Test1");    }    [MenuItem("Tools/Test2", false, 2)]    public  static void Test2()    {        Debug.Log("Test2");    }    [MenuItem("Tools/Test3", false, 15)]    public  static void Test3()    {        Debug.Log("Test3");    }

03:给组件的右键菜单栏添加按钮

//CONTEXT  加组件名  按钮名    [MenuItem("CONTEXT/PlayerHealth/ChangePlayeVelue")]     public static void ChangePlayeVelue(MenuCommand cmd)    {        //上下文是一个菜单命令的目标对象。       CompleteProject.PlayerHealth playerHealth =cmd.context as CompleteProject.PlayerHealth;              playerHealth.currentHealth = 100;       playerHealth.startingHealth = 1000;    }

在这里插入图片描述

04:学习使用Selection获取选择的游戏物体

[MenuItem("GameObject/Delete",false,10)]    public  static  void Delete()    {        Object[] objects=Selection.gameObjects;        foreach (var item in objects)        {          GameObject.DestroyImmediate(item);        }    }

05:编写可以撤销的删除操作

[MenuItem("GameObject/Delete",false,10)]    public  static  void Delete()    {        Object[] objects=Selection.gameObjects;        foreach (var item in objects)        {            //利用undo可以撤销         Undo.DestroyObjectImmediate(item);         }    }

06:给菜单项添加快捷键

//% =ctrl #=shif &= alt [MenuItem("GameObject/Delete _s",false,10)]    public  static  void Delete()    {        Object[] objects=Selection.gameObjects;        foreach (var item in objects)        {            //利用undo可以撤销         Undo.DestroyObjectImmediate(item);         }    }

07:给组件添加右键菜单的方法ContextMenu和ContextMenuItem

//给字段设置右键添加功能    [ContextMenuItem("SetBool","ChangeValue")]    public bool isNeedPlay;    public void ChangeValue()    {        isNeedPlay = !isNeedPlay;    }
public int hp = 100;    //给方法设置    [ContextMenu("SetHpBtn")]    public void SetHp()    {        hp += 100;    }

在这里插入图片描述

08:创建对话框

//继承ScriptableWizard public class ChangeValue : ScriptableWizard{    [MenuItem("Tools/ChangeValue")]    public static void ChangeValues()    {        ScriptableWizard.DisplayWizard
("改变字段的值"); } public string name=null; public int hp; public float speed;}

在这里插入图片描述

09:兼容按钮点击统一修改字段

public class ValueChange : ScriptableWizard{    public int addHp = 10;    public float addSpeed=20;    [MenuItem("Tools/Change")]    public static void ChangeValue(MenuCommand cmd)    {        ScriptableWizard.DisplayWizard
("改变hp 和speed的值"); } //按钮点击 public void OnWizardCreate() { GameObject[] items = Selection.gameObjects; foreach (var item in items) { Value value = item.GetComponent
(); Undo.RecordObject(value,"2"); //撤销操作 value.hp += this.addHp; value.speed += this.addSpeed; } }}

10:显示提示框的帮助信息和错误信息

//更新    public void OnWizardUpdate()    {        helpString = null;        errorString = null;        if (Selection.gameObjects.Length > 0)        {            helpString = "当前选择了:"+ Selection.gameObjects.Length+"个物体";        }        else        {            errorString = "没有选择物体";        }            }    public void OnSelectionChange()    {        Debug.Log("选择的物体改变了");    }

在这里插入图片描述

11:使用ShowNotification显示提示信息 继承: EditorWindow

ShowNotification(new GUIContent("值被改变了"));

在这里插入图片描述

12:使用EditorPrefs保存数据

EditorPrefs.SetInt("addHp",addHp);        EditorPrefs.SetFloat("addSpeed",addSpeed);        void OnEnable()    {        addHp=EditorPrefs.GetInt("addHp");        addSpeed = EditorPrefs.GetFloat("addSpeed");    }

13:显示进度条

public void OnWizardCreate()    {        GameObject[] items = Selection.gameObjects;        EditorUtility.DisplayCancelableProgressBar("进度", "Shows a progress bar"+items.Length,0);        int count = 0;        foreach (var item in items)        {            Value value = item.GetComponent
(); Undo.RecordObject(value, "2"); //撤销操作 value.hp += this.addHp; value.speed += this.addSpeed; count++; EditorUtility.DisplayCancelableProgressBar("进度", "Shows a progress bar" + items.Length, (float)count/items.Length); } EditorUtility.ClearProgressBar(); }

14:创建自定义窗口

/// /// 创建自己的窗口/// public class MyWindow : EditorWindow {    [MenuItem("Window/ShowWindow")]    public static void ShowWindow()    {        MyWindow myWindow=EditorWindow.GetWindow
(); //获得窗口 myWindow.Show(); //显示窗口 } private string name=null; void OnGUI() { GUILayout.Label("我的窗口"); name = GUILayout.TextField(name); if (GUILayout.Button("创建物体")) { GameObject go=new GameObject(name); Undo.RegisterCreatedObjectUndo(go,"go"); //注册 } }}

在这里插入图片描述

转载地址:http://xcrxo.baihongyu.com/

你可能感兴趣的文章
SSH1还是SSH2与Annotation还是Xml配置的问题
查看>>
简单构建工具SBT
查看>>
分享一个快速开发jQuery插件工具:jqueryboilerplate(转)
查看>>
Training的第二十天
查看>>
mysql设置主键自动增长
查看>>
linux系统的启动过程
查看>>
MySQL性能分析
查看>>
IIS错误日志 事件ID: 1093
查看>>
解决Unable to resolve target 'android-7'报错
查看>>
Connections could not be acquired from the unde...
查看>>
UIAlertView 总结
查看>>
邮件服务器:SMTP协议原始命令码和工作原理
查看>>
在Sublime Text中配置 JavaScript 控制台(JavaScript Console in Sublime Text)
查看>>
python使用os模块获取当前目录
查看>>
DNS服务(一)——DNS原理及其解析过程详解
查看>>
卸载linux软件总结
查看>>
redhat 6.5 安装和配置zabbix客户端
查看>>
硬链接和软链接(2)
查看>>
几种REST服务JAVA客户端类库
查看>>
什么是Hijax?Hijax的原理及优缺点介绍
查看>>