Unity扩展编辑器1:Editor Windows

Extending the Editor

Unity允许你使用自己定制的inspectors和Editor Windows扩展编辑器,并且你可以使用定制的Property Drawers定义属性集在inspector中如何展示,这一块讲述如何使用这些特性。

Editor Windows

你可以在你的app中创建任意数量的定制窗口。它们的表现就像Inspector,Scene或者其它内置的窗口。这是给你的游戏添加一个子系统用户接口的绝佳方式。[比如地图编辑器]

做一个自定义的Editor Window包含以下几个简单步骤:

1.创建脚本,继承EditorWindow类

2.使用代码去触发窗口显示自己

3.为你的工具实现GUI代码

Derive From EditorWindow

为了制作你的Editor Window,你的脚本必须存放在一个叫做"Editor"的文件夹中。在这个脚本中创建一个类,它继承自EditorWindow.然后在内部的OnGUI方法里面编写你的GUI控制。

using UnityEngine;
using UnityEditor;
using System.Collections;

public class Example:EditorWindow
{
  void onGUI()
  {
    // The actual window code goes here
  }
}

Showing the window

为了在屏幕上显示窗口,制作一个menu item来显示它,这个靠创建一个方法完成,而激活这个方法则是靠MenuItem属性。

Unity的默认行为是循环利用窗口(即:再次选择menu item会显示已经存在的窗口。这是靠使用EditorWindow.GetWindow方法实现),例如:

using UnityEngine;
using UnityEditor;
using System.Collections;

class MyWindow : EditorWindow {
    [MenuItem ("Window/My Window")]

    public static void  ShowWindow () {
        EditorWindow.GetWindow(typeof(MyWindow));
    }

    void OnGUI () {
        // The actual window code goes here
    }
}

这会创造一个标准的,可停靠的编辑窗口,它会在指令之间保存它的位置,可以使用自定义的布局,等等。想要获得更多的操控,你可以使用GetWindowWithRect.

Implementing Your Window‘s GUI

窗口中实际的内容靠实现OnGUI方法绘制。你在游戏内部GUI中使用的UnityGUI类(GUI和GUILayout)在这里也可以使用。此外我们提供了一些额外的GUI操作,它们在editor-only类里面:EditorGUI和EditorGUILayout。这些类添加在了普通类已经可用的控件集合里,所以你可以随意的混合搭配使用它们。

下面的C#代码展示了你如何添加GUI元素到自定义的EditorWindow中:

using UnityEditor;
using UnityEngine;

public class MyWindow : EditorWindow
{
    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;

    // Add menu item named "My Window" to the Window menu
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    {
        //Show existing window instance. If one doesn‘t exist, make one.
        EditorWindow.GetWindow(typeof(MyWindow));
    }

    void OnGUI()
    {
        GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
        myString = EditorGUILayout.TextField ("Text Field", myString);

        groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
            myBool = EditorGUILayout.Toggle ("Toggle", myBool);
            myFloat = EditorGUILayout.Slider ("Slider", myFloat, -3, 3);
        EditorGUILayout.EndToggleGroup ();
    }
}

样例代码的执行结果如下图:

还想获得更多信息,可以看看在EditorWindow页面的样例和文档

时间: 2024-10-04 15:37:14

Unity扩展编辑器1:Editor Windows的相关文章

Unity 扩展编辑器

扩展Inspector界面 继承自Editor,添加CustomEditorAttribute,传入定制的类型 定制显示的类型要求: 类型中所有的public 字段都会自动暴露给Inspector编辑器 类型中非public 字段,可通过使用SerializeFieldAttribute来暴露给Inspector 使用HideInspectorAttribute可隐藏字段 Unity消息接口: private void OnEnable(); private void OnDisable();

Unity扩展编辑器--类型3:Custom Editors

Custom Editors 加速游戏制作过程的关键是为哪些频繁使用的组件创建自定义的编辑器,为了举例,我们将会使用下面这个极其简单的脚本进行讲解,它的作用是始终保持一个对象注视某一点. public class LookAtPoint : MonoBehaviour { public Vector3 lookAtPoint = Vector3.zero; void Update () { transform.LookAt (lookAtPoint); } } 这个脚本会让一个对象保持面向世界空

Unity扩展编辑器二

Unity支持自行创建窗口,也支持自定义窗口布局,在Project视图中创建一个Editor文件夹,在文件夹中创建一条脚本 自定义窗口需要让脚本继承EditorWindow在设置MenuItem,此时在Unity导航菜单栏中GameObject-window就可创建一个自定义窗口? EditorWindow.GetWindowRect()和EditorWindow.GetWindow()都可以创建一个窗口,前者可以规定窗口的区域,后者通过鼠标动态的延伸窗口.参数1表示窗口的对象,参数2表示窗口的

Unity扩展编辑器三

Scene视图是编辑游戏模型的地方,其实它还可以进行编辑,如下图所示,我给Scene视图做了简单的编辑 Scene视图的扩展是基于对象的,意思是你必须在Hierarchy视图中选择一个对象才行,Hierarchy视图中选择不同的对象可以有不同的Scene视图.图中我么创建了一个立方体对象,接着给它绑定了一个Test3的脚本 Test3 在Project视图中创建一个Editor文件夹,把MyEditor放进去 最后再说一下,在OnSceneGUI()中只能通过Handles绘制新视图,如果你想引

Unity扩展编辑器四

Inspector视图中的get/set使用 get  set使用起来很方便,但编辑时,在Inspector视图中问题就来了,因为get/set的属性即使是public了,但是在Inspector视图中依然不显示 我偏偏就像在编辑器应set的操作怎么办?我想做的是在set里面加一个自己写的方法 MyEditor4放在Editor目录下 ? Test4挂在任意游戏对象上 ? 如图所示,在编辑器模式下用鼠标修改width的值,log输出说明了get set已经响应了 ? 原文地址:https://w

Unity扩展编辑器学习笔记--从路径下找到拥有某个组件类型的预设

5 public static List<T> GetAssetsWithScript<T>(string path) where T:MonoBehaviour 6 { 7 T tmp; 8 string assetPath; 9 GameObject asset; 10 List<T> assetList = new List<T> (); 11 string[] guids = AssetDatabase.FindAssets ("t:Pre

【Unity】8.5 扩展编辑器

分类:Unity.C#.VS2015 创建日期:2016-04-27 一.简介 可以通过编辑器窗口 (Editor Windows) 创建自己在 Unity 中的自定义设计工具.来自EditorWindow (而非 MonoBehaviour )的脚本可以影响 GUI/GUILayout 和 EditorGUI/EditorGUILayout 控件.或者,你可以使用自定义检视器 (Custom Inspectors) 显示游戏对象检视器 (GameObject Inspector) 中的 GUI

Unity基础-编辑器

编辑器 Special Folders Hidden Folder(start with .) Standard Assets:第一批加载的文件 Editor:只在编辑下才能使用, Plugins Resources:原生资源 Editor Default Resources Gizmos:Gizmos资源 StreamingAssets:自定义资源 编辑器功能扩展-EditorWindow 自定义一个编辑器窗口界面 Unity的编辑器的UI操作都很难用,继承EditorWindow 在OnGU

无废话ExtJs 入门教程十四[文本编辑器:Editor]

无废话ExtJs 入门教程十四[文本编辑器:Editor] extjs技术交流,欢迎加群(201926085) ExtJs自带的编辑器没有图片上传的功能,大部分时候能够满足我们的需要. 但有时候这个功能还是需要的.我在这里对keeditor进行了整合. 首先要下载keeditor和上传时需要引用的LitJson.dll.由于ke的版本不同,我这里提供的下载文件只适用于当前整合代码,供参考. 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML