- 用户指南
- Components
- 寻路
- 动画组件
- 资源组件
- 音频组件(AudioComponent)
- 音频侦听器(AudioListener)
- 音频源(AudioSource)
- 音频过滤器(AudioFilter)(仅限专业版)
- 混响区域(ReverbZone)
- 麦克风(Microphone)
- 物理组件(PhysicsComponent)
- 箱体碰撞体(BoxCollider)
- 胶囊碰撞体(CapsuleCollider)
- 角色控制器(CharacterController)
- 角色关节(CharacterJoint)
- 可配置关节(ConfigurableJoint)
- 恒定力(ConstantForce)
- 固定关节(FixedJoint)
- 铰链关节(HingeJoint)
- 网格碰撞体(MeshCollider)
- 物理材质(PhysicsMaterial)
- 刚体(Rigidbody)
- (SphereCollider)
- 弹簧关节(SpringJoint)
- 交互布(InteractiveCloth)
- 蒙皮布(SkinnedCloth)
- 车轮碰撞体(WheelCollider)
- 游戏对象(GameObject)
- 图像效果(ImageEffectScripts)
- 高光溢出和镜头光晕(BloomandLensFlare)
- 模糊(Blur)
- 相机运动模糊(MotionBlur)
- 颜色修正曲线(ColorCorrectionCurve)
- 颜色修正(ColorCorrection)
- 颜色修正查找纹理(ColorCorrectionLookupTexture)
- 对比度增强(ContrastEnhance)
- 对比度拉伸(ContrastStretch)
- 起皱(Crease)
- 视野深度(DepthofField)3.4
- 视野深度(DepthofField)
- 边缘检测(EdgeDetection)
- 鱼眼(Fisheye)
- 全局雾(GlobalFog)
- 发光(Glow)
- 灰度(Grayscale)
- 运动模糊(MotionBlur)
- 噪波和颗粒(NoiseAndGrain)
- 噪波(Noise)
- 屏幕叠加(ScreenOverlay)
- 棕褐色调(SepiaTone)
- 边缘检测效应
- 阳光照射(SunShaft)
- 屏幕空间环境光遮蔽(SSAO)(ScreenSpaceAmbientOcclusion(SSAO))
- 倾斜位移(TiltShift)
- 色调映射(Tonemapping)
- 旋转(Twirl)
- 渐晕(Vignetting)(和色差(ChromaticAberration))
- 状态同步详细信息
- 旋涡
- 设置管理器(SettingsManager)
- 网格组件(MeshComponents)
- 网络组
- 效果
- 渲染组件
- 变换组件(TransformComponent)
- UnityGUI组
- 向导
- 地形引擎指南(TerrainEngineGuide)
- 树木创建器指南
- 动画视图指南
- GUI脚本指南
- 网络参考指南
- 移动设备上的网络连接
- 高级网络概念
- Unity中的网络元素
- RPC详细信息
- NetworkLevelLoading
- 主服务器
- 最小化网络带宽
- 社交API
- 内置着色器指南
- Unity的后台渲染
- 着色器参考
- ShaderLab语法:Shader
- ShaderLab语法:Properties
- ShaderLab语法:子着色器(SubShader)
- ShaderLab语法:Pass
- ShaderLabsyntax:Color,Material,Lighting
- ShaderLab语法:剔除和深度测试(Culling&DepthTesting)
- ShaderLab语法:纹理组合器(TextureCombiners)
- ShaderLab语法:雾(Fog)
- ShaderLab语法:Alpha测试(Alphatesting)
- ShaderLab语法:混合(Blending)
- ShaderLab语法:通道标记(PassTags)
- ShaderLab语法:名称(Name)
- ShaderLab语法:绑定通道(BindChannels)
- ShaderLab语法:使用通道(UsePass)
- ShaderLab语法:GrabPass
- ShaderLab语法:子着色器标记(SubShaderTags)
- ShaderLab语法:回退(Fallback)
- ShaderLab语法:自定义编辑器(CustomEditor)
- ShaderLab语法:其他命令
- ShaderLab语法:Pass
- 高级ShaderLab主题
- ShaderLab内置值
- 其他
- 网络视图
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Mecanim 动画系统
- 动画状态机
- 混合树 (Blend Tree)
- 在 Mecanim 中使用动画曲线 (Animation Curves)(仅限专业版 (Pro))
- 循环动画片段
- Animation State Machine Preview (solo and mute)
- 动画参数
- 旧动画系统
- 使用类人动画
- 动画层
- 资源导入与创建
- 音轨模块
- 减少文件大小
- 光照贴图 UV
- 资源准备和导入
- 如何安装或升级标准资源 (Standard Assets)?
- FBX 导出指南
- 从 Maya 中导入对象
- 从 Cinema 4D 中导入对象
- 从 3D Studio Max 中导入对象
- 从 Cheetah3D 中导入对象
- 从 Modo 中导入对象
- 从 Lightwave 中导入对象
- 从 Blender 中导入对象
- 为优化性能建模角色
- 如何使用法线贴图 (NormalMaps)?
- 如何修正已导入模型的旋转?
- 程序材质
- 如何使用水?
- 分析器(仅限专业版)
- 绘制调用批处理
- 遮挡剔除(仅限专业版)
- Unity 中的高动态范围 (High Dynamic Range) 渲染
- 在 Unity 4 中使用 DirectX 11
- 文本场景文件格式(仅限专业版)
- 使用网络播放器模版
- 平台依赖编译
- 日志文件
- 首选项
- 粒子系统曲线编辑器
- 渐变编辑器
- 怎样制作网格粒子发射器?(旧粒子系统)
- 深入了解光照贴图
- 光照贴图快速入门
- 着色器
- 动画脚本(旧版)
- 自定义
- 布局模式
- 扩展编辑器
- 网络实例化
- 材质和着色器
- 如何使用细节纹理?
- 着色器:顶点和片段程序
- Unity 中的阴影
控件(Controls)
控件类型
您可以创建多种不同的 GUI 控件 (Control) 。本节列出了所有的可用显示控件和交互式控件。本指南的布局一节还描述了影响控件 (Control) 布局的其他 GUI 功能。
标签
标签 (Label) 是非互动式的。其仅用于显示。不能点击或移动标签 (Label)。标签 (Label) 仅适合用于显示信息。
/* GUI.Label 示例 */ // JavaScript function 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 示例 */ // JavaScript function 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 示例 */ // JavaScript function 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 示例 */ // JavaScript var 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 示例 */ // JavaScript var 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 */ // JavaScript var 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 示例 */ // JavaScript var 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 示例*/ // JavaScript var 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) 示例 */ // JavaScript var 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) 示例 */ // JavaScript var 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) 示例 */ // JavaScript var 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) 示例 */ // JavaScript var 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) 示例*/ // JavaScript var 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) 示例 */ // JavaScript var 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 示例 */ // JavaScript private 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” 将返回真。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论