控件 (Controls)        

控件类型

您可以创建多种不同的 GUI 控件 (Control) 。本节列出了所有的可用显示控件和交互式控件。本指南的布局一节还描述了影响控件 (Control) 布局的其他 GUI 功能。

标签

标签 (Label) 是非互动式的。其仅用于显示。不能点击或移动标签 (Label)。标签 (Label) 仅适合用于显示信息。

/* GUI.Label 示例 */// JavaScriptfunction OnGUI () {GUI.Label (Rect (25, 25, 100, 30), "Label");}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {void OnGUI () {GUI.Label (new Rect (25, 25, 100, 30), "Label");}}

由示例代码创建的标签 (Label)

按钮

按钮 (Button) 是典型的互动式按钮。无论按住鼠标多久,单击按钮 (Button) 后,它都将响应一次。只要一松开鼠标按钮就会发生响应。

基本用法

在 UnityGUI 中,单击“按钮” (Button) 后,它将返回。如需在单击“按钮” (Button) 后执行代码,您可以将 GUI.Button 函数放入 if 语句中。在单击“按钮” (Button) 后将执行存在于if 语句中的代码。

/* GUI.Button 示例 */// JavaScriptfunction OnGUI () {if (GUI.Button (Rect (25, 25, 100, 30), "Button")) {// This code is executed when the Button is clicked}}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {void OnGUI () {if (GUI.Button (new Rect (25, 25, 100, 30), "Button")) {// This code is executed when the Button is clicked}}}

由示例代码创建的“按钮” (Button)

重复按钮

重复按钮 (RepeatButton) 是常规按钮 (Button) 的变型。不同之处在于,重复按钮 (RepeatButton) 将在每帧按压鼠标按钮期间作出响应。这使您可以创建“单击并按住” (click-and-hold) 功能。

基本用法

在 UnityGUI 中,“重复按钮” (RepeatButton) 将对点击它们时的每个帧返回 true 。如需在点击“按钮” (Button) 时执行代码,您可以将 GUI.RepeatButton 函数放入  if语句中。在保持点击“重复按钮” (RepeatButton) 期间将执行 if 语句中的代码。

/* GUI.RepeatButton 示例 */// JavaScriptfunction OnGUI () {if (GUI.RepeatButton (Rect (25, 25, 100, 30), "RepeatButton")) {// 在每帧保持点击“重复按钮”(RepeatButton) 时执行此代码}}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {void OnGUI () {if (GUI.RepeatButton (new Rect (25, 25, 100, 30), "RepeatButton")) {// 在每帧保持点击“重复按钮”(RepeatButton) 时执行此代码}}}

由示例代码创建的“重复按钮” (Repeat Button)

文本框

文本框 (TextField 控件是一种互动式、可编辑的单行字段,含有文本字符串。

基本用法

“文本框” (TextField) 始终显示字符串。您必须在“文本框” (TextField) 中提供 待显示的字符串。在编辑字符串时,“文本框” (TextField) 函数将返回已编辑的字符串。

/* GUI.TextField 示例 */// JavaScriptvar textFieldString = "text field";function OnGUI () {textFieldString = GUI.TextField (Rect (25, 25, 100, 30), textFieldString);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private string textFieldString = "text field";void OnGUI () {textFieldString = GUI.TextField (new Rect (25, 25, 100, 30), textFieldString);}}

由示例代码创建的“文本框”(TextField)

文本区

文本区 (TextArea) 控件是一种互动式、可编辑的多行区域,含有文本字符串。

基本用法

“文本区” (TextArea) 始终显示字符串。您必须在“文本区” (TextArea) 中提供 待显示的字符串。在编辑字符串时,“文本区” (TextArea) 函数将返回已编辑的字符串。

/* GUI.TextArea 示例 */// JavaScriptvar textAreaString = "text area";function OnGUI () {textAreaString = GUI.TextArea (Rect (25, 25, 100, 30), textAreaString);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private string textAreaString = "text area";void OnGUI () {textAreaString = GUI.TextArea (new Rect (25, 25, 100, 30), textAreaString);}}

由示例代码创建的“文本区”(TextArea)

切换键

“切换键” (Toggle) 切换键 (Toggle) 控件创建具有持续的开/关状态的复选框。用户可通过单击复选框来改变其状态。

基本用法

“切换键” (Toggle) 的开/关状态由真/假布尔值表示。您必须提供 布尔值作为参数,使“切换键” (Toggle) 代表实际状态。点击“切换键”(Toggle) 时,切换键函数将返回一个新的布尔值。要获得此互动性,您必须指定布尔型变量接受“切换键” (Toggle) 函数的返回值。

/* GUI.Toggle example */// JavaScriptvar toggleBool = true;function OnGUI () {toggleBool = GUI.Toggle (Rect (25, 25, 100, 30), toggleBool, "Toggle");}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private bool toggleBool = true;void OnGUI () {toggleBool = GUI.Toggle (new Rect (25, 25, 100, 30), toggleBool, "Toggle");}}

由示例代码创建的“切换键”(Toggle)

工具栏

工具栏 (Toolbar) 控件实际上就是一排按钮 (Button)。一次只可激活“工具栏”(Toolbar) 上的一个“按钮”(Button),且在单击另一个“按钮”(Button) 之前,该按钮将保持激活状态。这种行为是效仿经典“工具栏”(Toolbar) 的行为。您可以在“工具栏”(Toolbar) 上定义任意数目的“按钮”(Button)。

基本用法

通过一个整数可跟踪“工具栏”(Toolbar) 中激活的“按钮”(Button)。您必须提供 该整数作为此函数的参数。要使“工具栏”(Toolbar) 变为互动式的,则必须将该整数指定为函数的返回值。您提供 的内容数组中的元素数目将决定“工具栏” (Toolbar) 中显示的“按钮” (Button) 的数目。

/* GUI.Toolbar 示例  */// JavaScriptvar toolbarInt = 0;var toolbarStrings : String[] = ["Toolbar1", "Toolbar2", "Toolbar3"];function OnGUI () {toolbarInt = GUI.Toolbar (Rect (25, 25, 250, 30), toolbarInt, toolbarStrings);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private int toolbarInt = 0;private string[] toolbarStrings = {"Toolbar1", "Toolbar2", "Toolbar3"};void OnGUI () {toolbarInt = GUI.Toolbar (new Rect (25, 25, 250, 30), toolbarInt, toolbarStrings);}}

由示例代码创建的“工具栏”(Toolbar)

栅格选择

栅格选择 (SelectionGrid) 控件是多排工具栏 (Toolbar)。您可以决定栅格中的列数和行数。一次仅可激活一个“按钮”(Button)。

基本用法

通过一个整数可跟踪“栅格选择”(SelectionGrid) 中激活的“按钮”(Button)。您必须提供 该整数作为此函数的参数。要使“栅格选择”(SelectionGrid) 变为互动式的,则必须指定该整数为函数的返回值。您提供 的内容数组中的元素数目将决定“栅格选择”(SelectionGrid) 中显示的“按钮” (Button) 的数目。您可以通过函数参数确定列数。

/* GUI.SelectionGrid 示例*/// JavaScriptvar selectionGridInt : int = 0;var selectionStrings : String[] = ["Grid 1", "Grid 2", "Grid 3", "Grid 4"];function OnGUI () {selectionGridInt = GUI.SelectionGrid (Rect (25, 25, 100, 30), selectionGridInt, selectionStrings, 2);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {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);}}

由示例代码创建的“栅格选择”(SelectionGrid)

水平滑动条

水平滑动条 (HorizontalSlider) 控件是典型的水平滑动钮,可通过拖动在预定最小值和最大值之间改变值的大小。

基本用法

“滑动条”(Slider) 钮的位置以浮点数形式存储。要显示该钮的位置,您需要提供 该浮点数作为函数的参数。另有两个值用于确定最小值和最大值。如果希望滑动条钮是可调的,则将滑动条值浮点数指定为“滑动条"(Slider) 函数的返回值。

/* 水平滑动条”(Horizontal Slider) 示例 */// JavaScriptvar hSliderValue : float = 0.0;function OnGUI () {hSliderValue = GUI.HorizontalSlider (Rect (25, 25, 100, 30), hSliderValue, 0.0, 10.0);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private float hSliderValue = 0.0f;void OnGUI () {hSliderValue = GUI.HorizontalSlider (new Rect (25, 25, 100, 30), hSliderValue, 0.0f, 10.0f);}}

由示例代码创建的“水平滑动条”(Horizontal Slider)

垂直滑块

垂直滑块 (VerticalSlider) 控件是典型的垂直滑动钮,可通过拖动在预定最小值和最大值之间改变值的大小。

基本用法

“滑块”(Slider) 钮的位置以浮点数形式存储。要显示该钮的位置,您需要提供 该浮点数作为函数的参数。另有两个值用于确定最小值和最大值。如果希望滑块钮是可调的,则将滑块值浮点数指定为“滑块"(Slider) 函数的返回值。

/* 垂直滑块”(Vertical Slider) 示例  */// JavaScriptvar vSliderValue : float = 0.0;function OnGUI () {vSliderValue = GUI.VerticalSlider (Rect (25, 25, 100, 30), vSliderValue, 10.0, 0.0);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private float vSliderValue = 0.0f;void OnGUI () {vSliderValue = GUI.VerticalSlider (new Rect (25, 25, 100, 30), vSliderValue, 10.0f, 0.0f);}}

由示例代码创建的“垂直滑动条”(Vertical Slider)

水平滚动条

水平滚动条 (HorizontalScrollbar) 控件与滑动条 (Slider) 控件类似,但视觉上更像是网页浏览器或文字处理器的滚动元素。此控件用于导航滚动视图 (ScrollView)  控件。

基本用法

“水平滚动条”(HorizontalScrollbar) 的执行与“水平滑动条”(Horizontal Slider) 相同,但有一个例外之处:另有一个参数控制“滚动条”(Scrollbar) 钮自身的宽度。

/* “水平滑动条”(Horizontal Slider) 示例 */// JavaScriptvar hScrollbarValue : float;function OnGUI () {hScrollbarValue = GUI.HorizontalScrollbar (Rect (25, 25, 100, 30), hScrollbarValue, 1.0, 0.0, 10.0);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private float hScrollbarValue;void OnGUI () {hScrollbarValue = GUI.HorizontalScrollbar (new Rect (25, 25, 100, 30), hScrollbarValue, 1.0f, 0.0f, 10.0f);}}

由示例代码创建的“水平滚动条”(Horizontal Scrollbar)

垂直滚动条

垂直滚动条 (VerticalScrollbar) 控件与 滑动条 (Slider) 控件类似,但视觉上更像网页浏览器或文字处理器的滚动元素。此控件用于导航 滚动视图 (ScrollView) 控件。

基本用法

“垂直滚动条”(Vertical Scrollbar) 的执行与“垂直滑动条”(Vertical Slider) 相同,但有一个例外之处:另有一个参数控制“滚动条”(Scrollbar) 钮自身的高度。

/* 垂直滑动条”(Vertical Scrollbar) 示例  */// JavaScriptvar vScrollbarValue : float;function OnGUI () {vScrollbarValue = GUI. VerticalScrollbar (Rect (25, 25, 100, 30), vScrollbarValue, 1.0, 10.0, 0.0);}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private float vScrollbarValue;void OnGUI () {vScrollbarValue = GUI. VerticalScrollbar (new Rect (25, 25, 100, 30), vScrollbarValue, 1.0f, 10.0f, 0.0f);}}

由示例代码创建的“垂直滚动条”(Vertical Scrollbar)

滚动视图

滚动视图 (ScrollView) 是显示较大控件组的可视区域的控件。

基本用法

“滚动视图”(ScrollView) 需要两个 Rects作为参数。第一个 Rect 定义屏幕上的可视“滚动视图”(ScrollView) 区域的位置和大小。第二个 Rect 定义该可视区域内部的空间大小。如果该可视区域内部的空间大于该可视区域,“滚动条”(Scrollbar) 根据情况适当地显示出来。您还必须分配并提供 一个存储所显示的可视区域位置的二维向量 (2D Vector)。

/* 滚动视图”(ScrollView) 示例*/// JavaScriptvar scrollViewVector : Vector2 = Vector2.zero;var innerText : String = "I am inside the ScrollView";function OnGUI () {// 开始“滚动视图”(ScrollView)scrollViewVector = GUI.BeginScrollView (Rect (25, 25, 100, 100), scrollViewVector, Rect (0, 0, 400, 400));// 向“滚动视图”(ScrollView) 输入内容innerText = GUI.TextArea (Rect (0, 0, 400, 400), innerText);// 结束“滚动视图”(ScrollView)GUI.EndScrollView();}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private Vector2 scrollViewVector = Vector2.zero;private string innerText = "I am inside the ScrollView";void OnGUI () {// 开始“滚动视图”(ScrollView)scrollViewVector = GUI.BeginScrollView (new Rect (25, 25, 100, 100), scrollViewVector, new Rect (0, 0, 400, 400));// 向“滚动视图”(ScrollView) 输入内容innerText = GUI.TextArea (new Rect (0, 0, 400, 400), innerText);// 结束“滚动视图”(ScrollView)GUI.EndScrollView();}}

由示例代码创建的“滚动视图”(ScrollView)

窗口

窗口 (Window)  是控件的可拖动容器。点击时,窗口会获得焦点或失去焦点。因此,它们的执行与其他控件略有不同。每个“窗口”(Window) 都有一个id 号,当“窗口”(Window) 获得焦点时,其内容在调用的独立函数内声明。

基本用法

“窗口”(Window) 是唯一一个需要附加函数来实现正确运行的控件。您必须提供 一个 id 号和对该“窗口”(Window) 执行的函数名。在“窗口”(Window) 函数中,您可以创建您的实际行为或包含的控件。

/* 窗口”(Window) 示例 */// JavaScriptvar windowRect : Rect = Rect (20, 20, 120, 50);function OnGUI () {windowRect = GUI.Window (0, windowRect, WindowFunction, "My Window");}function WindowFunction (windowID : int) {// 绘制此处窗口内的所有控件}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private Rect windowRect = new Rect (20, 20, 120, 50);void OnGUI () {windowRect = GUI.Window (0, windowRect, WindowFunction, "My Window");}void WindowFunction (int windowID) {// 绘制此处窗口内的所有控件}}

由示例代码创建的“窗口”(Window)

GUI.changed

要检测用户是否对 GUI 进行过操作(如点击“按钮”(Button)、拖动滑动条等等),请从脚本读取 GUI.changed 值。用户进行过操作的情况下,该值设定为 true,因此很容易证实用户的输入。

对于“工具栏”(Toolbar) 可能会出现这种情况,即您想根据“工具栏”(Toolbar) 中点击的“按钮”(Button) 时都分配该值,而是仅在点击其中一个“按钮”(Button) 时进行分配。  

/* GUI.changed 示例  */// JavaScriptprivate var selectedToolbar : int = 0;private var toolbarStrings = ["One", "Two"];function OnGUI () {// 确定到此帧时,哪个按钮处于激活状态以及其是否被点击过selectedToolbar = GUI.Toolbar (Rect (50, 10, Screen.width - 100, 30), selectedToolbar, toolbarStrings);// 如果用户在此帧点击一个新的“工具栏”(Toolbar) 按钮,则我们将处理其输入if (GUI.changed){print ("The toolbar was clicked");if (selectedToolbar == 0){print ("First button was clicked");}else{print ("Second button was clicked");}}}// C#using UnityEngine;using System.Collections;public class GUITest : MonoBehaviour {private int selectedToolbar = 0;private string[] toolbarStrings = {"One", "Two"};void OnGUI () {// 确定到此帧时,哪个按钮处于激活状态以及其是否被点击过selectedToolbar = GUI.Toolbar (new Rect (50, 10, Screen.width - 100, 30), selectedToolbar, toolbarStrings);// 如果用户在此帧点击一个新的“工具栏”(Toolbar) 按钮,则我们将处理其输入。if (GUI.changed){Debug.Log("The toolbar was clicked");if (0 == selectedToolbar){Debug.Log("First button was clicked");}else{Debug.Log("Second button was clicked");}}}}

如果用户操作了放置在 GUI.changed 之前的 GUI 控件 (GUI Control),则“GUI.changed” 将返回真。

,