gui学习笔记
770 字
4 分钟
gui学习笔记
IMGUI
基础知识
在声明控件时有三个关键的内容: Type (Position , Content)
Position
需要注意的是,此处的位置原点位于屏幕的左上角
对于所有的 Type , Position 都是第一个参数,而该参数本身由Rect()提供
Rect () 定义了四个属性: 最左侧位置 、 最顶部位置 、 总宽度和总高度 。所有这些值都以整数形式提供,对应于 pixel 值。
注意:所有的 UnityGUI 控件都在屏幕空间中工作
当然,同样可以使用Screen.width和Screen.height来获取可用屏幕空间的总尺寸。
示例:
public class GUITest : MonoBehaviour{ void OnGUI() { GUI.Box (new Rect (0,0,100,50), "Top-left"); GUI.Box (new Rect (Screen.width - 100,0,100,50), "Top-right"); GUI.Box (new Rect (0,Screen.height - 50,100,50), "Bottom-left"); GUI.Box (new Rect (Screen.width - 100,Screen.height - 50,100,50), "Bottom-right"); }}IMGUI Controls
Type
- Label 标签不能进行交互,仅供显示作用
- Button 按钮在松开时响应
- ReportButton 该按钮在按下的每一帧都进行响应
- TextField 包含一个可交互,可编辑文本字符串,单行
- TextArea 包含一个可交互,可编辑文本字符串,多行
- Toggle 一个切换开关
- Toolbar 本质上是一行按钮,工具栏上一次只能激活一个按钮,并且该按钮会一直保持激活状态,直到点击另一个按钮
- SelectionGrid 一个多行工具栏,可以自定义网格中的列数和行数,一次只能激活一个按钮
- HorizontalSlider 水平进度条
- VerticalSlider 垂直进度条
- HorizontalScrollbar HorizontalScrollbar 的实现方式与 HorizontalSlider 完全相同,只是 HorizontalScrollbar 有一个额外的参数来控制滚动条旋钮本身的宽度
- VerticalScrollbar 同理
- ScrollView 显示一组更大的控件中的可视区域
- Windows 可拖动的控件容器
GUI.changed
检测用户是否在图形用户界面 (GUI) 中执行了任何操作(例如,点击按钮、拖动滑块等),请从脚本中读取 GUI.changed 的 值。当用户执行了操作时,该值会被设置为 true,从而可以轻松验证用户输入 例如:
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);
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"); } } }
}自定义控件
Styles
- 创建公共变量
GUIStyle
public class GUITest : MonoBehaviour{ public GUIStyle customButton
void OnGUI () { GUI.Button (new Rect (10,10,150,20), "a custom Button", customButton) }}- 在编辑器中改变样式
Skins
- 使用 **“资源”->“创建”->“GUI 皮肤”**创建一个 Skin
- 应用皮肤
public class GUITest : MonoBehaviour{
public GUISkin mySkin;
void OnGUI () { GUI.skin = mySkin;
GUI.Button (new Rect (10,10,150,20), "Skinned Button"); }
}当然,可以在一次调用中切换多次 Skin
public class GUITest : MonoBehaviour{
public GUISkin mySkin; private bool toggle = true;
void OnGUI () { GUI.skin = mySkin;
toggle = GUI.Toggle (new Rect (10,10,150,20), toggle, "Skinned Button", "button");
GUI.skin = null;
GUI.Button (new Rect (10,35,150,20), "Built-in Button"); }
}布局模式
自动布局
自动布局不需要Rect,同时GUI也将换成GUILayout。
public class GUILayout : MonoBehaviour{ void OnGUI () { GUI.Button (new Rect (10,10,150,20) , "A Button");
GUILayout.Button ("A Button"); }}分组与嵌套
非常简单
相关文章 智能推荐
1
基于 Commit-Reveal 机制的加密暗盘提交协议
游戏开发 2026-07-22
2
05-Unity复刻的整体架构
游戏开发 2026-08-28
3
04-一次Ability的完整执行链
游戏开发 2026-08-08
4
03-GAS核心对象与职责边界
游戏开发 2026-08-04
5
02-GAS的核心模型
游戏开发 2026-07-25
随机文章 随机推荐