本帖最后由 夜行的猫仔 于 2014-2-8 16:22 编辑
Unity3D自定义编辑器窗口(1)
由于最近在做新的游戏,不想仅仅依靠Unity自带的功能了~~确实它提供的功能太少了~~~因此开始扩展自定义的一些面板,这块以前没接触过,一边做一边做笔记,希望对大家有帮助。 首先在手册上查了一下,所有的Untiy窗体都可以通过脚本去创建,但是这些脚本必须放在Editor目录下,我模仿NGUI插件创建了工作目录:
1.给菜单栏增加自定义菜单项 对于不同的扩展功能,Unity也提供了不同的几个类供开发者扩展,首先做个最简单的,先在Unity的菜单栏上增加一个新的菜单选项,代码如下: PuzGametTools .cs - using UnityEngine;
- using UnityEditor;
- public class PuzGametTools : EditorWindow
- {
- [MenuItem ("Puz Gamet Tools/window")]
- }
复制代码 这个脚本放在Editor目录下,不用捆绑GameObject 上Unity就会自动执行,运行程序,菜单栏上就看到了一个新的菜单项:
2.为菜单项增加执行函数功能 查Unity手册可以看到调用MenuItem 后添加一个执行函数,脚本就会自动在点了MenuItem 增加的菜单项后执行这个函数:如我们修改代码如下: - using UnityEngine;
- using UnityEditor;
- public class PuzGametTools : EditorWindow
- {
- [MenuItem ("Puz Gamet Tools/window")]
- static void DoSomething () {
- Debug.Log ("Doing Something...");
- }
- }
复制代码 在代码中增加了个static 函数DoSomething ();我们在菜单上选择了Puz Gamet Tools-->window这个按钮就会执行DoSomething ()函数。如果我们对MenuItem 下面写了多个函数,脚本只会执行距离MenuItem 最近的那个函数。
3.为菜单项增加快捷键MenuItem 还可以为创建的菜单增加快捷键,只需要在MenuItem 添加菜单的时候,在菜单名字的后面增加 %+快捷键值就可以了:- using UnityEngine;
- using UnityEditor;
- public class PuzGametTools : EditorWindow
- {
- [MenuItem ("Puz Gamet Tools/Do Something")]
- static void DoSomething () {
- Debug.Log ("Doing Something...");
- }
- [MenuItem ("Puz Gamet Tools/Hot Key %g")]
- static void HotKey () {
- Debug.Log ("Doing something with a Shortcut Key...");
- }
- }
复制代码 4.为菜单项增加执行命令
下面一个例子是通过菜单命令获取到选中的物体的名字- [MenuItem ("Puz Gamet Tools/SelectedName")]
- static void LogSelectedTransformName ()
- {
- Debug.Log ("Selected Transform is on " + Selection.activeTransform.gameObject.name + ".");
- }
复制代码 5.为菜单项增加逻辑性
下面的例子是表示的是如果没有在场景中选中任何一个GameObject的时候,上面写得函数Selected Name这个菜单命令就显示灰色(不可用状态),当选中某一个GameObject的时候这个菜单就可用了。- [MenuItem ("Puz Gamet Tools/SelectedName", true)]
- static bool ValidateLogSelectedTransformName () {
- // Return false if no transform is selected.
- return Selection.activeTransform != null;
- }
复制代码
6.菜单支持中文~
可以给菜单中增加中文的命令,这对国内的用户实在是太实用啦~~- [MenuItem ("Puz Gamet Tools/随便做点什么")]
- static void DoSomething () {
- Debug.Log ("Doing Something...");
- }
复制代码 |