IMGUI常用API总结

编程入门 行业动态 更新时间:2024-10-26 18:18:46

IMGUI<a href=https://www.elefans.com/category/jswz/34/1769776.html style=常用API总结"/>

IMGUI常用API总结

文章目录

  • 一、IMGUI简介
  • 二、控件(组件)相关API
    • Type相关
    • Content相关
  • 三、布局相关API
    • 1.固定布局与自动布局
    • 2.GUI的Group
    • 3.GUILayout的Area和Group
    • 4. 空白元素
    • 5.控件扩展
  • 四、样式相关API
  • 五、事件相关API
  • 参考

一、IMGUI简介

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

void OnGUI() {if (GUILayout.Button("Press Me"))Debug.Log("Hello!");
}

将显示如下所示的按钮:

二、控件(组件)相关API

Unity 的 IMGUI 控件使用一个名为 OnGUI() 的特殊函数。只要启用包含脚本,就会在每帧调用 OnGUI() 函数,就像 Update() 函数一样。

GUI.Box (Rect (10,10,100,90), “Loader Menu”); 将显示一个标题文本为 “Loader Menu” 的 Box 控件。该语句遵循典型的 GUI 控件声明模式。

由于每帧都会调用 OnGUI() 代码,因此无需显式创建和销毁 GUI 控件。声明控件的行与创建控件的行是同一行。如果需要在特定时间显示控件,可以使用任何类型的脚本逻辑来执行此操作。

声明 GUI 控件时,需要三段关键信息:

Type (Position, Content)

可以看到,此结构是一个带有两个参数的函数。

Type

Type 是指 Control Type(控件类型)__;通过调用 Unity 的 GUI 类或 GUILayout 类中的函数来声明该类型(在本指南的布局模式部分对此进行了详细讨论)。例如,__GUI.Label() 将创建非交互式标签。本指南稍后的控件部分将介绍所有不同的控件类型。

Position

Position 是所有 GUI 控件函数中的第一个参数。此参数本身随附一个 Rect() 函数。Rect() 定义四个属性:__最左侧位置、最顶部位置、总宽度、总高度。所有这些值都以__整数__提供,对应于像素值。所有 UnityGUI 控件均在__屏幕空间 (Screen Space) 中工作,此空间表示已发布的播放器的分辨率(以像素为单位)。

坐标系基于左上角。Rect(10, 20, 300, 100) 定义一个从坐标 10,20 开始到坐标 310,120 结束的矩形。值得再次强调的是,Rect() 中的第二对值是总宽度和高度,而不是控件结束的坐标。这就是为什么上面提到的例子结束于 310,120 而不是 300,100。

可使用 Screen.width 和 Screen.height 属性来获取播放器中可用的屏幕空间的总尺寸。

Content

GUI 控件的第二个参数是要与控件一起显示的实际内容。通常会希望在控件上显示一些文本或图像。要显示文本,请将字符串作为 Content 参数传递。要显示图像,请声明 Texture2D 公共变量,并将变量名称作为 Content 参数传递。

也可提供 GUIContent 对象作为 Content 参数,并定义要在 GUIContent 中显示的字符串和图像。此外,还可在 GUIContent 中定义__工具提示 (Tooltip)__,当鼠标悬停在 GUI 上时将工具提示显示在 GUI 中的其他位置。

Type相关

  • Label:以Label为例,常用的函数有:

    //在Editor Window、Game窗口绘制的
    GUI.Label()
    GUILayout.Label()
    //在Editor Window绘制的
    EditorGUI.LabelField()
    EditorGUILayout.LabelField()
    //在Scene窗口绘制的
    Handles.Label()
    
  • Button

  • RepeatButton

  • TextField

  • TextArea

  • Toggle

  • Toolbar

  • SelectionGrid

  • HorizontalSlider

  • VerticalSlider

  • HorizontalScrollbar

  • VerticalScrollbar

  • ScrollView

  • Window

  • ObjectField

  • MaskField

Content相关

三、布局相关API

1.固定布局与自动布局

使用 IMGUI 系统时,可使用两种不同的模式来排列和组织 UI:固定布局模式自动布局模式

使用自动布局时有两个主要的不同之处:

  • 使用 GUILayout 而不是 GUI
  • 自动布局控件不需要 Rect() 函数

不必使用一种布局模式来替代另一种布局模式,可在同一 OnGUI() 函数中同时使用这两种模式。

在固定布局中,可将不同的控件放入__组__中。组内的所有控件将根据组的左上角而不是屏幕的左上角进行定位。

2.GUI的Group

void OnGUI () {// 在屏幕中央创建一个组GUI.BeginGroup (new Rect (Screen.width / 2 - 50, Screen.height / 2 - 50, 100, 100));// 现在所有矩形都调整到该组。(0,0) 是该组的左上角。//我们将创建一个框形,以便能看到该组在屏幕上的位置。GUI.Box (new Rect (0,0,100,100),"Group is here");GUI.Button (new Rect (10,40,80,30), "Click me");// 结束我们上面开始的组。记住这一点非常重要!GUI.EndGroup ();}

3.GUILayout的Area和Group

在自动布局中,可将不同的控件放入__区域水平组____垂直组__中。在自动布局模式下,不需要在控制级别定义绘制控件的屏幕区域。控件将自动放置在包含该控件的区域的最左上角。此区域可能是指屏幕。此外也可以创建手动定位的区域。

在一个区域内,具有可见元素(如按钮和框形)的控件会将宽度拉伸到该区域的整个长度。

public class GUITest : MonoBehaviour {private float sliderValue = 1.0f;private float maxSliderValue = 10.0f;void OnGUI(){// 将所有控件包裹在指定的 GUI 区域中GUILayout.BeginArea (new Rect (0,0,200,60));// 开始单个水平组GUILayout.BeginHorizontal();// 正常放置按钮if (GUILayout.RepeatButton ("Increase max\nSlider Value")){maxSliderValue += 3.0f * Time.deltaTime;}// 在按钮旁边垂直排列另外两个控件GUILayout.BeginVertical();GUILayout.Box("Slider Value: " + Mathf.Round(sliderValue));sliderValue = GUILayout.HorizontalSlider (sliderValue, 0.0f, maxSliderValue);// 结束这些组和区域GUILayout.EndVertical();GUILayout.EndHorizontal();GUILayout.EndArea();}}

4. 空白元素

public static void Space (float pixels);

在当前布局组中插入空白元素。

空白元素的方向取决于发出命令时当前所在的布局组。如果在垂直组中,空白元素将是垂直的。

5.控件扩展

//传递给控件以允许或禁止水平扩展的选项。如果为 true,则封闭的 UI 元素可以扩展以填充可用的水平宽度。
public static GUILayoutOption ExpandWidth (bool expand);
//传递给控件以允许或禁止垂直扩展的选项。
public static GUILayoutOption ExpandHeight (bool expand);

四、样式相关API

控件外观由 GUIStyle 决定。默认情况下,如果创建控件时未定义 GUIStyle,则会应用 Unity 的默认 GUIStyle。此样式是 Unity 的内部样式,可在已发布的游戏中将此样式用于快速原型设计,或者如果选择不对控件进行样式设置,则会采用此样式。

当有大量不同的 GUIStyle 可供使用时,可在单个 GUISkin 中定义这些样式。GUISkin 只不过是 GUIStyle 的集合。

方法一:将控件名称作为GUI控件函数的最后一个参数

所有 GUI 控件函数都有可选的最后一个参数:用于显示控件的 GUIStyle。如果忽略此参数,则会使用 Unity 的默认 GUIStyle。函数内部会将控件类型的名称作为字符串应用,因此 GUI.Button() 使用“button”样式,GUI.Toggle() 使用“toggle”样式,等等。若要覆盖控件的默认 GUIStyle,可将其指定为最后一个参数。

using UnityEngine;
using System.Collections;public class GUITest : MonoBehaviour {void OnGUI () {// 创建使用 "box" GUIStyle 的标签。GUI.Label (new Rect (0,0,200,100), "Hi - I'm a label looking like a box", "box");// 创建使用 "toggle" GUIStyle 的按钮GUI.Button (new Rect (10,140,180,20), "This is a button", "toggle");}
}

方法二:创建公共变量 GUIStyle

using UnityEngine;
using System.Collections;public class GUITest : MonoBehaviour {public GUIStyle customButton;void OnGUI () {// 创建按钮。将上面定义的 GUIStyle 作为要使用的样式传入GUI.Button (new Rect (10,10,150,20), "I am a Custom Button", customButton);}}

方法三:使用皮肤

using UnityEngine;
using System.Collections;public class GUITest : MonoBehaviour {public GUISkin mySkin;void OnGUI () {// 将该皮肤指定为当前使用的皮肤。GUI.skin = mySkin;// 创建按钮。此时将从分配给 mySkin 的皮肤获得默认的 "button" 样式。GUI.Button (new Rect (10,10,150,20), "Skinned Button");}        
}

五、事件相关API

  • GUI.changed

参考

Unity中文手册:GUIScriptingGuide

更多推荐

IMGUI常用API总结

本文发布于:2024-03-13 13:16:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1734071.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:常用   IMGUI   API

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!