Unity IMGUI

1.基础

创建每种控件的方法都是雷同的。第一个参数rect,表示位置;后面的参数表示控件的内容,可以包含字符串和图片,tooltips,可以单独用其中一个, 也可以使用GUIContent,使用多个。还有一个guistyle。

2.控件类型

Label

Button,抬起时返回true;RepeatButton,按住时一直返回true。通过if来判断

    void OnGUI () {
        if (GUI.RepeatButton (new Rect (25, 25, 100, 30), "RepeatButton")) {
            // This code is executed every frame that the RepeatButton remains clicked
        }
    }

TextField,可编辑。返回值为我们在文本框中编辑的内容。所以要把该返回值再用来创建TextField

TextArea,可编辑。与TextField区别是可以换行,可多行显示

	private string textFieldString = "text field";
	
	void OnGUI () {
		textFieldString = GUI.TextField (new Rect (25, 25, 100, 30), textFieldString);
	}
Toggle,一个checkbox,也就是单选框。同样的,需要把返回值再用来创建Toogle
    private bool toggleBool = true;
    
    void OnGUI () {
        toggleBool = GUI.Toggle (new Rect (25, 25, 100, 30), toggleBool, "Toggle");
    }
ToolBar,创建多个button,同时只能选中一个。需要利用返回值。

SelectionGrid,相当于多行的ToolBar

    private int selectionGridInt = 0;
    private string[] selectionStrings = {"Grid 1", "Grid 2", "Grid 3", "Grid 4"};
    
    void OnGUI () {
        selectionGridInt = GUI.SelectionGrid (new Rect (25, 25, 300, 60), selectionGridInt, selectionStrings, 2);//2表示水平方向上排2个button
    
    }

HorizontalSlider和VerticalSlider水平滑动条和垂直滑动条。滑动时返回值在最大值和最小值之间改变。需要利用返回值

HorizontalScrollBar和VerticalScrollBar与滑动条区别不大。多了个参数,控制滑块大小。

ScrollView
使用GUI.BeginScrollView()和GUI.EndScrollView();其中BeginScrollView需要两个矩形作为参数。第一个矩形是ScrollView的可视范围。第二个矩形是ScrollView的拖动范围。


3.GUILayout
自动布局。GUI(固定布局)可以和GUILayout(自动布局)同时使用
在固定布局时,可以使用GUI.BeginGroup 和GUI.EndGroup来定义一个新的空间来放置多个控件,相当于在屏幕空间中定义了一个小的屏幕,超出这个小屏幕的空间将被裁减。
在自动布局时,可以用GUILayout.BeginArea和GUILayout.EndArea来实现类似的功能。在Area内的控件,像Box和Button这种带有背景的控件会自动拉伸到整个Area宽度。如果不在Area内,控件会有一个默认宽度,不会拉伸到和屏幕同宽。

可以使用GUILayoutOption来覆盖GUILayout的一些设置。GUILayoutOption我们不直接使用,而是使用GUILayout.Width等方法获取
    void OnGUI () {
        GUILayout.BeginArea (new Rect (100, 50, Screen.width-200, Screen.height-100));
        GUILayout.Button ("I am a regular Automatic Layout Button");
        GUILayout.Button ("My width has been overridden", GUILayout.Width (95));
        GUILayout.EndArea ();
    }

如上例,本来第二个button的宽度应该跟Area同宽,但是加上
GUILayout.Width (95)
之后,就只有95像素宽了。

还有如果Button不在Area里,会有一个默认宽度,也可以用GUILayout.Width来自定义宽度。

但是再宽也不会超过屏幕宽度或Area宽度(被裁减掉了)


自动布局时,默认情况下,各控件由上到下依次显示。
可以使用GUILayout.BeginHoriztontal(),GUILayout.EndHorizontal()GUILayout.BeginVertical(), and GUILayout.EndVertical().来控制各控件水平显示或垂直显示。可嵌套。

### 使用 ImGui 或其替代方案在 Unity 中实现自定义界面 #### 什么是 IMGUIIMGUI 是 Immediate Mode GUI 的缩写,它是一种即时模式图形用户界面的设计理念。与传统的保留模式不同,IMGUI 不会保存控件的状态,而是每次绘制时重新计算并渲染整个界面[^1]。 #### Unity 中的 IMGUI 实现 Unity 自带了一套基于 IMGUI 的 API,允许开发者通过脚本创建复杂的编辑器窗口和游戏运行时界面。以下是基本用法: ```csharp using UnityEngine; using UnityEditor; public class ExampleWindow : EditorWindow { private string inputText = "Default Text"; [MenuItem("Example/Open Window")] public static void ShowWindow() { GetWindow<ExampleWindow>("IMGUI Example"); } void OnGUI() { GUILayout.Label("Enter some text below:", EditorStyles.boldLabel); inputText = EditorGUILayout.TextField("Input Field", inputText); if (GUILayout.Button("Submit")) { Debug.Log($"You entered: {inputText}"); } } } ``` 上述代码展示了如何使用 `EditorWindow` 创建一个简单的编辑器窗口,并利用 IMGUI 提供的功能来构建交互式界面[^3]。 #### 替代方案:UI Toolkit 随着技术的发展,Unity 推出了更现代化的 UI 工具集——UI Toolkit。相比传统 IMGUI,UI Toolkit 基于 C# 脚本编写,提供了更高的性能和灵活性[^2]。然而需要注意的是,在最新版本 Unity 6 中虽然推荐使用 UI Toolkit,但它并未完全覆盖 IMGUI 所有的功能特性。 如果项目需求较为复杂或者需要兼容旧版工程,则仍可以选择继续沿用经典的 IMGUI 方法;而对于新开发的应用来说,采用更加高效且易于维护的 UI Toolkit 将是一个更好的决定。 #### 总结 - 对于简单快速搭建原型以及定制化程度较高的编辑器扩展插件开发场景下可以考虑直接运用内置的IMGUI; - 如果追求跨平台一致性表现效果并且希望获得官方长期支持的话则建议转向学习掌握新的UI工具包(UI Toolkit)[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值