1.作为程序员的调试工具,创建游戏内调试工具
2.为脚本组件创建自定义检视面板
3.创建新的编辑器窗口和工具以拓展Unity本身(内置游戏工具)

GUI控件绘制的共同点:都是GUI公共类提供的静态函数 直接调用即可
参数大同小异:

  • 位置参数:使用Rect参数,包含xy位置和wh尺寸
  • 显示文本:string参数
  • 图片信息:Texture参数
  • 综合信息:GUIContent参数
  • 自定义样式:GUIStyle参数
    每一种控件都有多种重载,都是各个参数的排列组合
    必备的参数内容 是 位置信息和显示信息

GUI工作原理

在继承MonoBehaviour的脚本中的特殊函数OnGUI()里调用GUI提供的方法
类似生命周期函数 但是专门用于绘制GUI界面绘制

  • 执行特点:
    • 每帧执行,专门用于绘制GUI界面
    • 一般只包含GUI相关界面绘制和操作逻辑
    • 在OnDisable之前、LateUpdate之后执行
    • 任何继承MonoBehaviour的脚本都可以使用

代码写在下面这个函数当中

1
2
3
4
private void OnGUI()
{

}

重要参数及文本和按钮

文本控件

可以在外部 声明一个 Rect 然后实时改他的位置和宽和高;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
GUI.Label(new Rect(0,0,100,20), "123456");

//(在外部) public Texture tex;
GUI.Label(new Rect(0, 30, 100, 50), tex); //图片显示按照原始的缩放比例

//可以图片文字一起生成
GUI.Label(rect1, content);//可以获取当前鼠标或键盘选中的GUI控件 对应的 tooltip信息
Debug.log(GUI.tooltip);

//自定义样式
public GUIStyle style;//可以看官网的GUIStyle
GUI.Label(new Rect(0,0,100,20), "123456", style);

//常用的:
//Font Size 字体大小 Font 字体 Font Style 字体样式(加粗斜体等) Alignment 对齐方式
//Rich Text HTML样式标记 Text Color 字体颜色


按钮控件

1
2
3
4
GUI.Button(btnRect, btnContent, btnStyle);
//这个按钮是需要在按钮范围内点击并且抬起才会返回true
GUi.RepeatButton(btnRect, btnContent);
//这个是长按按钮 按下就会返回true

button是有返回值的 返回值是bool类型

多选框和单选框

多选框

第二个bool值表示 是否选中 如果传true则会一直选中

1
GUI.Toggle(new rect, true, "效果开关");

使用Toggle应该在外部声明 bool

1
isSel = GUI.Toggle(new Rect(xxxx), isSel, "效果开关");
自定义样式
1
isSel = GUI.Toggle(new Rect(xxxx), isSel, "效果开关", GUIStyle);

修改图片固定宽高 在style中修改dixedWidth 和 fixedHeight
内容偏移 调整padding属性控制内容起始位置

单选框

使用int类型变量(如nowSelIndex)标识当前选中项
通过条件判断nowSelIndex==n转换为布尔值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private int nowSelIndex = 1;//外部声明

if(GUI.Toggle(new Rect(xxxx), nowSelIndex == 1, "选项一"));
{
nowSelIndex = 1;
}
if(GUI.Toggle(new Rect(xxxx), nowSelIndex == 2, "选项二"));
{
nowSelIndex = 2;
}
if(GUI.Toggle(new Rect(xxxx), nowSelIndex == 3, "选项三"));
{
nowSelIndex = 3;
}

面板的显示隐藏

所有地方都能够快速使用
静态方法和静态变量 就可以直接通过类名就用
挂载的物体必须刚开始是激活的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

private static BeginPanel instance;

public static void ShowMe()
{
if(instance != null)
{
this.gameObject.SetActive(true);
}
}

public static void HideMe()
{
if(instance != null)
{
this.gameObject.SetActive(false);
}
}

private void Awake()
{
instance = this;
ShowMe();
}

输入框

普通输入

1
2
3
4
private string inputStr; 
private int maxLength;//最大输入长度
inputStr = GUI.TextField(new Rect(xxxx), inputStr, maxLength);

密码输入

1
2
private string inputPW;
inputPW = GUI.PasswordField(new Rect(xxxx), inputPW, char/*替换的字符*/);

拖动条

水平拖动条

1
2
private float nowValue;
nowValue = GUI.HorizontalSlider(new Rect(xxxx), nowValue, leftValue, rightValue);

竖直拖动条

1
2
private float nowValue;
nowValue = GUI.VerticalSlider(new Rect(xxxx), nowValue, leftValue, rightValue);

图片绘制

1
2
3
4
public Texture tex;
ScaleMode scaleMode;//缩放模式
bool alpha = true;//是否允许透明通道
GUI.drawTexture(new Rect(xxxx), tex, scaleMode, alpha);

有预设体封装 可不用了解太多

九宫格概念

屏幕九宫格 控件也有九宫格
九宫格对齐 可达到自适应分辨率的效果