zoukankan      html  css  js  c++  java
  • 【Unity】自定义编辑器窗口——拓展编辑器功能

    最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾。

    新建一个脚本:

    using UnityEngine;
    using System.Collections;
    using UnityEditor;
    
    /// <summary>
    /// 自定义的编辑器窗口
    /// </summary>
    public class MyWindow : EditorWindow {
    
        string myString = "Hello World !"; // 文本内容
        bool groupEnabled;     // 选项组是否可用
        bool myBool = true;    // 复选框状态
        float myFloat = 2.33f; // 滑动条的值
    
        [MenuItem("Extend Windows/MyWindow")]
        public static void ShowWindow()
        {
            // 显示某个编辑器窗口。传参即是要显示的窗口类型(类名)
            EditorWindow.GetWindow(typeof(MyWindow));
        }
    
        void OnGUI()
        {
            // 文本
            GUILayout.Label("Base Setting");
            // 可以编辑,编辑后用同一个变量保存结果
            myString = EditorGUILayout.TextField("这是文本", myString);
    
            // 开启一组选项
            groupEnabled = EditorGUILayout.BeginToggleGroup("Options setting", groupEnabled);
            // 复选框
            myBool = EditorGUILayout.Toggle("这是复选框", myBool);
            // 滑动条
            EditorGUILayout.Slider("这是滑动条", myFloat, 0, 5);
            // 结束这组选项
            EditorGUILayout.EndToggleGroup();
        }
    }

    写好脚本后保存,回到Unity等待完编译,即可看到以下效果:

    Unity编辑器顶部的菜单栏多了一项Extend Windows。
    这里写图片描述

    点击弹出的窗体如下:
    这里写图片描述

    注意点:

    • 创建编辑器菜单项需要使用MenuItem特性。
    • 针对编辑器功能的代码,需要引入UnityEditor名称空间。
    • 自定义编辑器窗口类需要继承EditorWindow类。
    • 绘制窗口的代码需要写在OnGUI()函数里。
    • 绘制函数通常在GUILayout、EditorGUILayout这两个类中。
    • 绘制函数最后通常含有一个可选的参数GUILayoutOption[],这里暂未深入研究。
    • 重要:绘制函数会有返回值(即本次修改结果),这里在Start()函数里声明了变量用于记录返回结果,因为OnGUI()函数每帧都会被(可能多次)调用,所以应该每次都把上一次的返回结果作为这一次的默认值填入。否则当前的修改会在下一次OnGUI()中恢复为预设值,即修改无效!!!
    • 使用EditorGUILayout.BeginToggleGroup()开启一个选项组,
      对应EditorGUILayout.EndToggleGroup()结束一个选项组。
    • 最后,需要在菜单项静态函数中使用EditorWindow.GetWindow()才能实现点击该菜单项弹出一个编辑器窗口,参数是要弹出的编辑器窗口(即类名、类型)。
    • 这是编辑器功能(因为继承的是EditorWindow 类),所以写完脚本
      保存好后,回到Unity等待编译完即可看到效果,不需要将该脚本挂载在某个游戏物体上,也不需要点击游戏运行才能看到效果。
  • 相关阅读:
    [bzoj2654]tree_二分_kruskal
    [luogu1373]小a和uim之大逃离_动态规划
    [luogu1156]垃圾陷阱_动态规划_背包dp
    [luogu2209][USACO13]燃油经济性Fuel Economy_贪心
    UNIX环境高级编程——进程基本概述
    UNIX环境高级编程——进程控制
    UNIX环境高级编程——进程环境
    UNIX环境高级编程——时间和日期
    UNIX环境高级编程——Linux进程地址空间和虚拟内存
    UNIX环境高级编程——标准I/O库函数和Unbuffered I/O函数
  • 原文地址:https://www.cnblogs.com/guxin/p/unity-how-to-custom-editor.html
Copyright © 2011-2022 走看看