zoukankan      html  css  js  c++  java
  • 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 ();
        }
    }

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

    Custom Editor Window created using supplied example.

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

  • 相关阅读:
    决策树算法系列之一 ID3
    线性递归数列算法题
    Python爬虫快速上手教程
    gensim快速上手教程
    GCN和GCN在文本分类中应用
    命名实体如何进行概念消歧?
    浅谈神经网络中的激活函数
    nginx安装配置和基本使用
    netty学习总结(三)
    netty学习总结(二)
  • 原文地址:https://www.cnblogs.com/Rafy/p/4480217.html
Copyright © 2011-2022 走看看