UnityEditor

1、添加菜单

[MenuItem("Tools/MyTool")]

[MenuItem("Tools/MyTool", false, 10)]

优先级控制菜单的显示顺序,且优先级在同一范围内(好像是11)将显示在同一组,优先级在10左右的菜单项会显示在 Hierarchy 的右键菜单中,Assets菜单中菜单项会显示在 Project 的右键菜单中。

2、对指定组件添加右键菜单

[MenuItem("CONTEXT/UserManager/MyMenuName")]

其中,CONTEXT 是固定格式,UserManager 是要作用的组件名, MyMenuName 是生成的右键菜单项名。

在实现的方法中可以传入一个 MenuCommand 对象,该对象有两个属性,分别是 context 和 userData。通过将 context 强转成组件对象,就可以设置组件的属性。

强转分为直接强转和使用 as 强转,前者如果不能强转会报错,后者不会报错而只是返回一个空指针。

3、操作 Hierarchy 中选中的对象

Selection类,它有很多静态成员,可以用来获取 Hierarchy 面板中选中的对象。

Unity可以记录系统的一些操作,然后使用 Ctrl+Z 回滚,自己写的编辑器方法默认是不能回滚的,比如删除对象,这时要使用 Undo 类操作,如 Undo.DestroyObjectImmediate(obj);

4、快捷键

单键设置,必须要用下划线开头,比如设置 d 快捷键:

[MenuItem("Tool/MyTool _d")]

组合快捷键设置: %=ctrl    #=shift     &=alt,比如使用 Ctrl + D 快捷键:

[MenuItem("Tool/MyTool %d")]

5、如果要为自己写的脚本组件添加右键菜单,也可以直接在脚本里实现,只要在函数前面添加  [ContextMenu("MyMenuItemName")] 即可。

为指定字段添加右键菜单项,可以在字段前添加 [ContextMenuItem("MyMenuItemName", "FunctionName")],这样就会调用 FunctionName中的方法。

时间: 2024-11-03 06:07:53

UnityEditor的相关文章

UnityEditor扩展编辑器实现从场景中渲染得到Cubemap

(学习笔记,希望能帮助到有需要的人.) 在自定义的EditorWindow中定义2个变量,分别代表需要渲染的Cubemap 和 视点对象(通常是Camera对象) private Cubemap cubemap; private GameObject obj; 在OnGUI 函数中 <span style="white-space:pre"> </span>this.cubemap = (Cubemap) EditorGUILayout.ObjectField

Unity报错 : BCE0004: Ambiguous reference &#39;preview&#39;: CameraMotionBlurEditor.preview, UnityEditor.Editor.preview.

建立项目版本为Unity4.6,改为5.3.4版本,运行项目报如下错误: "BCE0004: Ambiguous reference 'preview': CameraMotionBlurEditor.preview, UnityEditor.Editor.preview." 修改  preview 为 preview_ var preview_ : SerializedProperty; preview_ = serObj.FindProperty ("preview&qu

【Unity3D】生成工程报错解决—UnityEditor.HostView:OnGUI() Error building Player: Couldn&#39;t build player because of unsupported data on target platform.

错误 错误1:An asset is marked as dont save, but is included in the build: unityEditor.HostView:OnGUI() 错误2:Building - Failed to write file: sharedassets0.assetsUnityEditor.HostView:OnGUI() 错误3:Error building Player: Couldn't build player because of unsup

UnityEditor 的title显示工作路径

什么也不说,效果就是: 代码就是 #if UNITY_EDITOR_WIN using UnityEngine; using UnityEditor; using System.Runtime.InteropServices; using System.Diagnostics; using UnityEditor.Callbacks; using System; using System.Text; [InitializeOnLoad] class UpdateUnityEditorTitle

(转)初步认识拓展UnityEditor编辑器定制

初步认识拓展UnityEditor编辑器定制 热度 9529 2015-9-4 18:50 |个人分类:Unity3d| 编辑器, 拓展 我相信无数初学者看别人游戏都经常看到他们的Inspector中出现界面和默认不同,但又不知道怎么弄出来的.下面我粗略介绍一下如何自定义这些. MenuItem属性把任意静态函数变成为一个菜单命令.仅静态函数能使用这个MenuItem属性. 用法:一般在Editor文件夹里创建代码,代码归类 [MenuItem("MyMenu/Do Something"

(转)Unity笔记之编辑器(UnityEditor)

在使用unity3d的过程中,时常会需要从场景中寻找或者调用一个对象,而Unity就提供了一个贴心的功能——拖拽.用鼠标拖一下中比写堆代码直观的多吧!但是Unity提供的远远不止这一丢丢,下面我们来简单了解下UnityEditor部分的内容. 编辑器最最基本的用法呢就是编辑Inspector. 而Inspector中最最基本的就是把字段显示出来.给几个例子: [code]csharpcode: using UnityEngine; using System.Collections; // 这里没

(转)Unity3d UnityEditor编辑器定制和开发插件

在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码.[MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过S

UnityEditor研究学习之自定义Editor

UnityEditor研究学习之自定义Editor 今天我们来研究下Unity3d中自定义Editor,这个会让物体的脚本在Inspector视窗中,产生不同的视觉效果. 什么意思,举个例子,比如游戏中我有个角色Player,他有攻击力,护甲,装备等属性. 所以我定义一个脚本:MyPlayer.cs: using UnityEngine; using System.Collections; public class MyPlayer : MonoBehaviour { public int ar

【转载】Unity3d UnityEditor编辑器定制和开发插件

在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码.[MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过S

UnityEditor.AsyncHTTPClient:Done(State, Int32)异常处理

Unity编辑器经常提示一个Warning: Uncaught exception in async net callback: Object reference not set to an instance of an objectUnityEditor.AsyncHTTPClient:Done(State, Int32) Unity的令人费解的BUG,解决方法为取消Show Asset Store search hits选项: