gui学习笔记

770 字
4 分钟
gui学习笔记

IMGUI#


基础知识#

在声明控件时有三个关键的内容: Type (Position , Content)

Position#

需要注意的是,此处的位置原点位于屏幕的左上角 对于所有的 Type , Position 都是第一个参数,而该参数本身由Rect()提供 Rect () 定义了四个属性: 最左侧位置 、 最顶部位置 、 总宽度和总高度 。所有这些值都以整数形式提供,对应于 pixel 值。

注意:所有的 UnityGUI 控件都在屏幕空间中工作

当然,同样可以使用Screen.widthScreen.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#

  1. Label 标签不能进行交互,仅供显示作用
  2. Button 按钮在松开时响应
  3. ReportButton 该按钮在按下的每一帧都进行响应
  4. TextField 包含一个可交互,可编辑文本字符串,单行
  5. TextArea 包含一个可交互,可编辑文本字符串,多行
  6. Toggle 一个切换开关
  7. Toolbar 本质上是一行按钮,工具栏上一次只能激活一个按钮,并且该按钮会一直保持激活状态,直到点击另一个按钮
  8. SelectionGrid 一个多行工具栏,可以自定义网格中的列数和行数,一次只能激活一个按钮
  9. HorizontalSlider 水平进度条
  10. VerticalSlider 垂直进度条
  11. HorizontalScrollbar HorizontalScrollbar 的实现方式与 HorizontalSlider 完全相同,只是 HorizontalScrollbar 有一个额外的参数来控制滚动条旋钮本身的宽度
  12. VerticalScrollbar 同理
  13. ScrollView 显示一组更大的控件中的可视区域
  14. 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#

  1. 创建公共变量GUIStyle
public class GUITest : MonoBehaviour
{
public GUIStyle customButton
void OnGUI ()
{
GUI.Button (new Rect (10,10,150,20), "a custom Button", customButton)
}
}
  1. 在编辑器中改变样式

Skins#

  1. 使用 **“资源”->“创建”->“GUI 皮肤”**创建一个 Skin
  2. 应用皮肤
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");
}
}

分组与嵌套#

非常简单

gui学习笔记
https://blog.rouming-fei.top/posts/gui-learning-notes/
作者
废江流
发布于
2024-11-23
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
废江流
提灯寻影,灯到影灭。
分类
标签
站点统计
文章
15
分类
4
标签
18
总字数
37,248
运行时长
0
最后活动
0 天前

文章目录