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

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

热度 9529 2015-9-4 18:50 |个人分类:Unity3d编辑器拓展

我相信无数初学者看别人游戏都经常看到他们的Inspector中出现界面和默认不同,但又不知道怎么弄出来的.下面我粗略介绍一下如何自定义这些.

MenuItem属性把任意静态函数变成为一个菜单命令。仅静态函数能使用这个MenuItem属性。

用法:一般在Editor文件夹里创建代码,代码归类

[MenuItem("MyMenu/Do Something")]

void DoSomething()

{

Debug.Log("Perform operation");

}

运行即看到效果

[ContextMenu("XXX")]可以向你的上下文菜单中添加一个菜单项。 如下图

[ExecuteInEditMode]属性的作用是在EditMode下也可以执行脚本。unity中默认情况下,脚本只有在运行的时候才被执行,加上此属性后,不运行程序,也能执行脚本。可以不运行程序下观察程序效果。

AddComponentMenu 添加组件菜单

原本的脚本(组建)都会在“Component/Script”菜单下,在类之前声明一下这个,它便可以出现在"Componet"菜单下的任何位置

 

扩展Inspector面板

通过编译器命令[CustomEditor(typeof(XXX))]即可。

 

访问被编辑的对象
在Inspector视图中,我们经常需要访问正在被编辑的对象。Editor类的成员变量target正是提供了这一关联。
尽管如此,需要注意target是一个Object类型的对象,具体使用时可能需要类型转换(可以使用C#的泛型来避免重复的类型转换)。

实例:

1

2

3

4

5

6

7

8

usingUnityEngine;

usingSystem.Collections;

publicclassTest:MonoBehaviour

{

publicRect mRectValue;

publicTexture texture;

}

 

 

usingUnityEditor;

usingUnityEngine;

//自定义Tset脚本

[CustomEditor(typeof(Test))]

//在编辑模式下执行脚本,这里用处不大可以删除。

[ExecuteInEditMode]

//请继承Editor

public class MyEditor:Editor

{

//在这里方法中就可以绘制面板。

public override void OnInspectorGUI()

{

//得到Test对象

Test test=(Test)target;

//绘制一个窗口

test.mRectValue=EditorGUILayout.RectField("窗口坐标",

test.mRectValue);

//绘制一个贴图槽

test.texture=  EditorGUILayout.ObjectField("增加一个贴图",test.texture,typeof(Texture),true)asTexture;

}

}

  按钮a是如何出现请看下面内容

扩展组件背景菜单

例如添加一个button按钮。

在MyEditor中的OnInspectorGUI中添加下面代码,在Test中添加函数a();

if (GUILayout.Button("a")) {

            test.a();

        }

 

Wizards

创造主观编辑器窗口

[MenuItem("GameObject/Create Other/Explosion")]

public static void CreateExplosion()

{

ScriptableWizard.DisplayWizard(“Create explosion”, "Create", "Apply");

}

效果图大概这样

时间: 2024-12-28 21:14:45

(转)初步认识拓展UnityEditor编辑器定制的相关文章

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

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

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

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

Unity3D引擎扩展中的编辑器定制方法

http://gamerboom.com/archives/36432 作者:Richard Fine Unity3D的方便之处在于,它很容易地扩展编辑器套件.每款游戏都对加工有着不同的需求,可以快速地以完全集成的方法来构建这些内容并极大地提升开发速度. 目前有大量复杂的软件包提供以基本Unity功能套件为基础的复杂工具,从视觉脚本编辑器到编辑器内导航网格生成.但是,有关如何自行构建此类事物的程序说明却很少.我将在下文列举某些在自己的工作中总结的编辑器定制相关信息. Unity-Window(f

拓展自定义编辑器窗口(EditorGUILayout类)

Unity支持自行创建窗口,也支持自定义窗口布局.在Project视图中创建一个Editor文件夹,在文件夹中再创建一条脚本. 自定义窗口需要让脚本继承EditorWindow再设置MenuItem,此时在Unity导航菜单栏中GameObjec->window就可创建一个自定义窗口. 0.窗口: using UnityEngine; using UnityEditor;//引入编辑器命名空间 publicclassMyEditor:EditorWindow { [MenuItem("Ga

Unity场景道具模型拓展自定义编辑器

(一)适用情况 当游戏主角进入特定的场景或者关卡,每个关卡需要加载不同位置的模型,道具等.这些信息需要先在unity编辑器里面配置好,一般由策划干这事,然后把这些位置道具信息保存在文件,当游戏主角进入后根据保存的文件信息加载模型道具.如 跑酷场景的金币 赛车赛道的道具 (二)实例文件格式 Json 需要导入SimpleJson 具体使用方法可以看我另外一篇<Unity游戏数据用Json保存>,有详细介绍 http://www.cnblogs.com/July7th/p/4808095.html

unity3d拓展编辑器MenuItem的使用

MenuItem是自定义菜单栏显示 比如:[MenuItem("new/My Window")] 这样就会显示菜单new/My Window 把这个放在一个静态方法上就可以了.记住.方法一定要是静态的. Unity圣典上的解释: 也就是说类必须继承:EditorWindow.EditorWindow在命名空间using UnityEditor;中 跟着Unity圣典上的列子和网上的列子敲了一次,这样才能深入理解 1 using UnityEngine; 2 using System.C

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

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

如何让编辑器运行你的代码

如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码. [MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过Selection类),并据此来确定显示视图.与此类似,[ContextMenu("XXX")

(转)Unity笔记之编辑器(CurveField、DoubleField、EnumMaskField、EnumPopup) ... ...

1. CurveField创建的是一个类型为AnimationCurve的曲线变量,看代码: [code]csharpcode: using UnityEngine; using System.Collections; using UnityEditor; // 编辑器命名空间的引用 public class Editor2 : EditorWindow // 编辑器类 { private AnimationCurve _animationCurve = new AnimationCurve()