Unity编辑器拓展(IMGUI)

IMGUI

“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数。

EditorWindow

 1.继承EditorWindow

2.EditorWindow.GetWindow(typeof(MyWindow)).Show()显示窗口

3.在OnGui渲染窗口

GUILayout(编辑器,运行时可用)

GUILayout 类是 Unity GUI 的接口,并且具有自动布局功能。

UnityEngine.GUILayout - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUILayout.html

GUI(编辑器,运行时可用)

GUI 类是 Unity GUI 的接口,并且具有手动定位功能。(对比GUILayout需要多传个Rect)

UnityEngine.GUI - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUI.html

EditorGUILayout(编辑器可用)

EditorGUI 的自动布局版本。

UnityEditor.EditorGUILayout - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/EditorGUILayout.html

EditorGUI(编辑器可用)

这些方法的运行方式与常规 GUI 函数十分相似。(对比 EditorGUILayout需要多传个Rect) 

UnityEditor.EditorGUI - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/EditorGUI.html

编辑器的简易框架(可以让你的编辑器更好的可视化管理)

using System;
using UnityEditor;
using UnityEngine;
public class MyWindow : EditorWindow
{

    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;
    bool isEnable = false;
    bool isRotate = false;
    bool isScale = false;
    Color color;

    //定义枚举
    public enum ToolEnum
    {
        Basic,
        Enable,
        Rotate,
        Scale,
        Color,
        Other,
    }
    ToolEnum selectId = ToolEnum.Basic;

    [MenuItem("Window/My Window")]
    static void Init()
    {
        MyWindow window = (MyWindow)EditorWindow.GetWindow(typeof(MyWindow));
        window.Show();
    }

    void OnGUI()
    {
        //渲染Toolbar
        selectId = (ToolEnum)GUILayout.Toolbar((int)selectId, Enum.GetNames(typeof(ToolEnum)));

        if (selectId == ToolEnum.Basic)
        {
            Basic();
        }
        else if (selectId == ToolEnum.Enable)
        {
            isEnable = GUILayout.Toggle(isEnable, "IsEnable");
            if (isEnable != GUI.enabled)
            {
                GUI.enabled = isEnable;
            }
            Basic();
        }
        else if (selectId == ToolEnum.Rotate)
        {
            isRotate = GUILayout.Toggle(isRotate, "IsRotate");
            if (isRotate)
            {
                GUIUtility.RotateAroundPivot(45, new Vector2(100, 100));
            }
            Basic();
        }
        else if (selectId == ToolEnum.Scale)
        {
            isScale = GUILayout.Toggle(isScale, "IsScale");
            if (isScale)
            {
                GUIUtility.ScaleAroundPivot(Vector2.one * 0.5f, new Vector2(100, 100));
            }
            Basic();
        }
        else if (selectId == ToolEnum.Color)
        {
            color = EditorGUILayout.ColorField(color);
            GUI.color = color;
            Basic();
        }
    }

    private void Basic()
    {
        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();
    }
}

GUIContent 

定义/渲染内容 ,包含图标,文本,提示

UnityEngine.GUIContent - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUIContent.html

GUIStyle

定义/渲染方式,这让您能够更改或根据不同状态(例如,当鼠标悬停在控件上时)切换颜色、字体及其他细节。

UnityEngine.GUIStyle - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUIStyle.html

 GUISkin

 定义 GUI 的外观和行为。GUISkin 包含 GUI 设置和 GUIStyle 对象的集合,它们共同指定 GUI 皮肤。

UnityEngine.GUISkin - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUISkin.html

免费课程链接:

独立游戏《Unity打造关卡编辑器》Unity 独立游戏 关卡编辑器https://bycwedu.vipwan.cn/promotion_channels/72762192

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity编辑器拓展(Editor Extension)可以通过自定义的脚本来扩展Unity编辑器的功能和界面,以满足特定项目的需求。通过编辑器拓展,开发者可以创建自定义的编辑器窗口、工具栏按钮、菜单项、检视面板等,来增强Unity编辑器的功能和流程。 要创建一个Unity编辑器拓展,你可以使用C#编写一个继承自Editor类的脚本。这个脚本可以通过Unity的Inspector面板来设置相关的属性和行为。以下是一个简单的示例: ```csharp using UnityEngine; using UnityEditor; public class MyEditorExtension : EditorWindow { [MenuItem("Custom Tools/My Editor Window")] public static void OpenWindow() { // 创建并打开一个自定义的编辑器窗口 MyEditorExtension window = (MyEditorExtension)EditorWindow.GetWindow(typeof(MyEditorExtension)); window.Show(); } private void OnGUI() { // 在编辑器窗口中绘制UI元素 GUILayout.Label("Hello, I am a custom editor window!"); if (GUILayout.Button("Click Me")) { Debug.Log("Button clicked!"); } } } ``` 上述代码创建了一个自定义的编辑器窗口,并在窗口中绘制了一个标签和一个按钮。通过在Unity编辑器中点击"Custom Tools"菜单下的"My Editor Window",可以打开这个自定义的编辑器窗口。 除了编辑器窗口,你还可以通过继承Editor类来创建自定义的检视面板、菜单项等。Unity官方文档中有更详细的教程和示例,可以帮助你更深入地了解和使用Unity编辑器拓展
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧寒大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值