Unity中的GUI

GUI:游戏用户交互界面,一个代码驱动的UI系统

GUI的主要作用

1、作为程序员的调试工具

2、为脚本组件创建自定义监视面板

3、创建新的编辑器窗口和工具以拓展Unity本身(一般作为内置游戏工具)

GUI工作原理

1、OnGUI是每帧执行,相当于专门绘制GUI界面的函数

2、一般只在其中执行GUI相关界面绘制和操作逻辑

3、该函数在OnDisable之前,在LateUpdate之后

4、只要是继承了Mono的脚本,都可以在OnGUI中绘制GUI

GUI空间的共同点

1、所有的GUI控件都是GUI类的静态函数

2、所有的GUI控件参数列表大同小异:

1、位置参数:Rect参数

2、显示文本:string参数

3、图片参数:Texture参数

4、综合信息:GUIContent参数,可以既有文本信息又有图片信息

5、自定义样式:GUIStyle参数

3、每一种控件都有多种重载,都是各个参数的排列组合,但所有控件一定都有位置信息和显示信息。

4、通常采用接受返回值来保证数据更新(只有返回值被接收了下一次程序进如GUI函数,值才会更新)

文本控件

函数名:

Label,无返回值

csharp 复制代码
GUI.Label(Rect,内容,样式)

按钮控件

函数名

Button,按下抬起后响应一次,bool返回值

RepeatButton,按下持续响应,bool返回值

csharp 复制代码
GUI.Button(Rect,内容,样式);

多选框

Toggle,点击后返回一个与传入bool值相反的bool值,bool返回值

自定义多选框设置GUIStyle选中效果和取消效果的是normal和 on normal。

csharp 复制代码
GUI.Toggle(Rect,bool标识,内容,样式);

单选框

单选框是多选框的一种特殊方式,我们使用一个int标识来处理。

csharp 复制代码
private void index=1;
private void OnGUI()
{
	if(GUI.Toggle(new Rect(0,60,100,30),index==1,"选项1"))
	{
		index=1;
	}
	if(GUI.Toggle(new Rect(0,100,100,30),index==2,"选项2"))
	{
		index=2;
	}
	if(GUI.Toggle(new Rect(0,140,100,30),index==3,"选项3"))
	{
		index=3;
	}
}

输入框

函数名

  1. TextArea
  2. TextField,返回值均为string,想要持续改变输入值,原理与单选框的int标识原理一样:将这一帧的输入结果保存在一个成员变量中,下一帧再将这个成员变量作为参数传入方法中
  3. PasswordField
csharp 复制代码
GUI.TextArea(Rect,内容,Length,样式);
GUI.TextField(Rect,内容,Length,样式);
GUI.PasswordField(Rect,内容,替换字符,Length,样式);

拖动条

函数名

  1. HorizontalSlider
  2. VerticalSlider ,float返回值

结构:

csharp 复制代码
GUI.HorizontalSlider(Rect,nowValue,bottomValue,topValue,样式1,样式2,样式3);
GUI.VerticalSlider(Rect,nowValue,bottomValue,topValue,样式1,样式2,样式3);

图片绘制

函数名:

DrawTexture ,无返回值

结构:

csharp 复制代码
GUI.DrawTexture(Rect,Texture,ScaleMode,bool alpjaBlend,float imageAspect ......);

ScaleMode:

  1. ScaleAndCrop:也会通过宽高比来计算图片,不会拉伸变形但是会进行裁剪。
  2. ScaleToFit:会根据宽高比和宽高中最小的值来进行计算,不会拉伸变形,会一直保持图片完全显示的状态。
  3. StretchToFill:始终填充慢你传入的Rect范围。

alpha:是用来控制图片是否开启透明通道。

imageAspect:自定义宽高比,如果不填默认为0,会使用图片原始宽高比。

框绘制

函数名:

无返回值。

结构:

csharp 复制代码
GUI.Box(rect,内容,样式);

工具栏

函数名:

Toolbar ,int 返回值,可以用来制作类似于Unity快捷工具栏的UI

结构:

csharp 复制代码
GUI.Toolbar(Rect,int标识,内容数组,样式);
csharp 复制代码
private int toolbarIndex=0;
private string[] toolbarInfos=new []{"123","456","789"};
private void OnGUI()
{
		toolbarIndex=GUI.Toolbar(new Rect(0,0,200,30),toolbarIndex,toolbarInfos);
		switch(toolbarIndex)
		{
			case 0:
				break;
			case 1:
				break;
			case 2:
				break;
		}
}

选择网络

函数名:

SelectionGrid,与工具栏相同,但多一个限制每行的最多个数的属性xCount

分组

函数名:

BeginGroup,无返回值,主要用于对GUI控件进行分组

结构:

csharp 复制代码
GUI.BeginGroup(Rect,内容,样式);

应用:

csharp 复制代码
GUI.BeginGroup(Rect,内容,样式);
//中间添加要分组的控件
GUI.EndGaroup();

滚动列表

函数名:

BeginScorllView,返回值为Vector2

结构:

csharp 复制代码
GUI.BeginScorllView(viewRect,newPos,showRect,样式);
参数介绍:
1、viewRect:当前前方可使窗口的Rect
2、showRect:当前后方内容窗口的Rect
3、nowPos:当前内容的坐标

应用:

csharp 复制代码
GUI.BeginScorllView(viewRect,nowPos,showRect,样式);
//可视窗口的内容
GUI.EndScorllView();

窗口

函数名:

Window,Rect返回值。用于制作UI窗口,Window中的UI控件应当写在Window的委托参数的函数中

结构:

csharp 复制代码
GUI.Window(id,Rect,控件委托,内容,样式);

参数介绍:

1、id:窗口id,负责区分不同窗口。在委托函数中也可以通过

2、委托函数:用于处理窗口控件函数

模态窗口

函数名:

ModalWindow,无返回值,当出现模态窗口时,只有处理完警告弹窗的逻辑后,其他控件逻辑才允许被继续处理常用于警告弹窗。

结构:

csharp 复制代码
GUI.Window(id,Rect,控件委托,内容,样式);

拖动窗口

使用成员变量接收Rect返回值,并在委托函数中写GUI.DragWindow方法

DragWindow可以使用重载传入Rect参数,作用是决定窗口的那一部分位置可以被拖动

默认不填就是窗口的所有位置都可以被拖动

整体皮肤样式

GUIskin就是一个GUIstyle的集合

GUIskin可以在资源视图右键创建

应用:

csharp 复制代码
GUI.skin=skin;

GUILayout自动布局

GUILayout拥有GUI类所有的控件。但与GUI类不同时,GUILayout可以自动排序

水平排序:

BeginHorizontal

EndVertical

布局选项GUILayoutOption

一些控件是有GUILayoutOption[]的params数组参数的,直接添加以下方法即可

csharp 复制代码
//控件的固定宽高
GUILayout.Width();
GUILayout.Height();

//允许控件的最小宽高
GUILayout.MinWidth();
GUILayout.MinHeight();

//允许控件的最大框高
GUILayout.MaxWidth();
GUILayout.MaxHeight();

//允许或禁止水平拓展
GUILayout.ExpandWidth();
GUILayout.ExpandHeight();`	



GUI系统

一般的游戏设置界面和帮助界面都是通过对GUI组件中的各个控件的合理使用而搭建成的。

GUI组件的绘制位置是通过坐标定位的。以屏幕左上角为坐标位置(0,0),屏幕右下角为坐标位置(Screen.Width,Screen.Height),并且是以像素为坐标单位进行开发的。

GUI组件的变量

Unity提供了丰富的GUI组件变量,通过这些变量,用户可以在整体上对GUI组件做出相应的设置,从而实现特定的开发需求

  1. skin 使用的皮肤风格
  2. color GUI组件的颜色
  3. tooltip 提示框
  4. changed 检测输入数据是否发动改变,如改变则返回ture
  5. backgroundColor GUI组件的背景颜色
  6. contentColor 对GUI组件的文本进行着色
  7. enable 控制GUI组件的启用状态
  8. depth 按深度排序执行当前GUI组件的行为

1、skin变量

skin变量是对所使用的皮肤风格的位置

csharp 复制代码
public class Skin : MonoBehaviour
{
    public GUISkin[] gskin;//GUISkin资源引用
    public int skin_Index = 0;//使用皮肤的索引
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))//按Space键
        {
            skin_Index++;//索引加1
            if (skin_Index >= gskin.Length)//索引大于gskin数组长度
            {
                skin_Index = 0;//重置索引
            }
        }
    }
    private void OnGUI()
    {
        GUI.skin = gskin[skin_Index];//设置皮肤
        if (GUI.Button(new Rect(0, 0, Screen.width / 10, Screen.height / 10), "a button"))
        {
            Debug.Log("Button has been pressed");//输出单击信息
        }
        GUI.Label(new Rect(0, Screen.height * 3 / 10, Screen.width / 10, Screen.height / 10), "a lable");
    }
} 
//通过Space键切换效果
//

2、color变量

color变量用于控制GUI组件的颜色。在开发过程中可以通过设置color的值来改变GUI组件的背景及文本颜色,进而实现开发的具体需求。

csharp 复制代码
private void OnGUI()//声明OnGUI方法
    {
        GUI.color = Color.yellow;//将颜色设置为黄色
        GUI.Label(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 5, Screen.height / 10), "Hellow World");//绘制一个标签
        GUI.Box(new Rect(Screen.width / 10, Screen.height / 5, Screen.width / 5, Screen.height / 5), "A Box");//绘制一个盒子
        GUI.Button(new Rect(Screen.width / 10, Screen.height / 2, Screen.width / 5, Screen.height / 10), "A Button");//绘制一个按钮
    }

3、backgroundColor变量

backgroundColor变量用于控制GUI组件的背景颜色。在开发过程中可以通过设置backgroundColor的值来改变GUI组件的颜色,进而实现开发的具体要求

csharp 复制代码
private void OnGUI()
    {
        GUI.backgroundColor = Color.yellow;//将背景颜色设置为黄色
        GUI.Button(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 15, Screen.height / 10), "按钮A Button");//绘制一个按钮
    }

4、contentColor变量

content变量用于对GUI组件中的文本着色。在开发过程中可以通过设置contentColor的值来改变GUI组件中文本的颜色,进而实现开发的具体需求。

csharp 复制代码
 private void OnGUI()//声明OnGUI方法
    {
        GUI.contentColor = Color.yellow;//将文本颜色设置为黄色

        GUI.Button(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 5, Screen.height / 10), "A Button");//绘制一个按钮
    }

5、changed变量

changed变量可以检测任何控件中输入数据的值是否发生改变。若改变则返回true,并根据需要执行相应的操作或输出一下提示信息。

csharp 复制代码
 public string stringToEdit = "Modify me";//声明一个字符串stringToEdit
    private void OnGUI()
    {
        //绘制一个单行文本编辑框,并将输入的数据赋给变量stringToEdit
        stringToEdit = GUI.TextField(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 4, Screen.height / 10), stringToEdit, 25);
        if (GUI.changed)
        {
            Debug.Log("Text field has changed");//若检测到输入数据发生改变,则输出信息提示
        }
    }

6、enable变量

enabled变量可以判断GUI组件是否被启用,在开发过程中可以对enable变量的boolean值进行设置,从而控制GUI组件的启用情况。

csharp 复制代码
    public bool allOptions = true;//声明一个初始值为true的布尔型变量allOptions
    public bool extended1 = true;//声明一个初始值为true的布尔型变量extended1
    public bool extended2 = true;//声明一个初始值为true的布尔值变量extended2
    private void OnGUI()
    {
        //在自定义区域内绘制一个名为Edit Options的开关,其初始状态为allOptions
        allOptions = GUI.Toggle(new Rect(0, 0, Screen.width / 5, Screen.height / 10), allOptions, "Edit All Options");
        GUI.enabled = allOptions;//将allOptions的值赋给enable组件
        //在各个自定义的区域内绘制两个开关
        extended1 = GUI.Toggle(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 5, Screen.height / 10), extended1, "Extended Option1");
        extended2 = GUI.Toggle(new Rect(Screen.width / 10, Screen.height / 5, Screen.width / 5, Screen.height / 10), extended2, "Extended Option2");
        GUI.enabled = true;
        //在自定义的区域内绘制一个名为ok的按钮,并判断是否被按下
        if (GUI.Button(new Rect(0, Screen.height * 3 / 10, Screen.width / 5, Screen.height / 10), "Ok"))
            print("user clicked ok");
    }

7、tooltip变量

tooltip变量是提示框变量。在创建GUI控件,该变量可以传递一个工具作为提示信息。该变量可以通过改变内容参数去自定义GUIContent物体,而不是仅仅传递一个字符串。这里可以根据开发的实际需求来实现不同的提示效果。

csharp 复制代码
private void OnGUI()
    {
        //绘制一个名为Click me的按钮,并设置提示信息This is the tooltip
        GUI.Button(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 5, Screen.height / 10), new GUIContent("Click me", "This is the tooltip"));
        //绘制一个标签,并将提示信息赋给标签
        //Screen.width 和 Screen.height 是Unity引擎提供的屏幕分辨率宽度和高度属性。
        //Screen.width / 10 表示屏幕宽度的十分之一,作为矩形左上角的x坐标。
        //Screen.height / 5 表示屏幕高度的五分之一,作为矩形左上角的y坐标。
        //Screen.width / 5 表示屏幕宽度的五分之一,作为矩形的宽度。
        //Screen.height / 10 表示屏幕高度的十分之一,作为矩形的高度。
        //所以,这个 Rect 实例定义了一个相对于整个屏幕来说位于左上角、宽高比为2: 1的小矩形区域。
        //这个矩形区域可以被用作窗口的位置和大小,或者在GUI绘制时指定控件的位置和尺寸等。
        GUI.Label(new Rect(Screen.width / 10, Screen.height / 5, Screen.width / 5, Screen.height / 10), GUI.tooltip);
    }

8、depth变量

depth变量是按照深度对当前执行的GUI控件进行排序的行为,因此在搭建GUI时,若有不同的脚本需要同事运行,则可以设置这个值来确定排序。一般情况下,最上面的先执行。下面将搭建两个按钮。

csharp 复制代码
 public static int guiDepth = 0;//声明一个初始值为0的静态整型变量guiDepth
    private void OnGUI()
    {
        GUI.depth = guiDepth;//将GUI.depth设置为guiDepth
        if (GUI.RepeatButton(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 5, Screen.height / 5), "GoBack")) //绘制一个名为GoBack的RepeatButton
        {                          
            guiDepth = 1;//若持续单击按钮GoBack的RepeatButton
            depth.guiDepth = 0;//将depth.guiDepth的值转为0
        }

    }
----------------------------------------------------------------------------------------------
public static int guiDepth = 1;
    private void OnGUI()
    {
        GUI.depth = guiDepth;
        if (GUI.RepeatButton(new Rect(Screen.width / 5, Screen.height / 5, Screen.width / 5, Screen.height / 5), "GoBack"))
        {
            guiDepth = 1;
            depth2.guiDepth = 0;
        }
    }

GUI中的常用控件

Unity提供了丰富的GUI控件,使用这些控件要通过系统所提供的GUI工具类。我们可以调用GUI类下的静态方法在界面内绘制所需要的控件,并通过不同控件的搭配来实现所需的界面效果

  1. Label 文本或者纹理标签控件
  2. DrawTexture 纹理图片控件
  3. Toggle 开关控件
  4. Window 窗口控件
  5. Drag Window 可拖动的窗口控件
  6. SelectionGrid 网格按钮控件
  7. BeginScrollView 滚动视图控件
  8. DrawTextureWithTexCoords 纹理图片控件
  9. RepeatButton 按钮控件
  10. PasswordField 密码文本框控件
  11. SetNextControlName 设置下一个控件名字
  12. Focus Window 焦点窗口控件
  13. BeginGroup 开始组控件,必须与EndGroup配对出现
  14. HorizontalSlider 水平的滑块控件,并且可以自己设置阈值
  15. HorizontalScrollbar 水平的滚动条控件,并且可以自己设置阈值
  16. ModalWindow 模拟窗口控件
  17. Box 图形盒子控件
  18. FocusControl 焦点控件
  19. Toolbar 工具栏控件
  20. Bring WindowToFront 使窗口到前面
  21. Bring WindowToBreak 使窗口到后面
  22. ScrollTo 将内容滚动到指定位置
  23. EndScrollView 结束滚动视图
  24. Button 按钮控件
  25. TextField 单行文本编辑控件
  26. TextArea 多行文本编辑控件
  27. GetNameOfFocusedControl 获取有焦点被命名空间的名称
  28. UnfocusWindow 失焦窗口
  29. EndGroup 结束组控件,必须与Begin Group 配对出现
  30. VerticalSlider 垂直滚动条控件,可以自己设置阈值

1、Label控件

Label控件用于在屏幕上绘制文本或者纹理标签。一般情况下创建此控件对象采用的是静态方法。

csharp 复制代码
 public static void label(Rect position, string text);
 public static void Label(Rect position, Texture image);
 public static void Label(Rect position, GUIContext content);
 public static void Label(Rect postion , string text , GUIStyle style);
 public static void Label(Rect postion , Texture image , GUIStyle style);
 public static void Label(Rect postion , GUIContent content , GUIStyle style);

position 参数表示标签在屏幕上的位置

text 参数表示标签显示的文本

image 参数表示标签上显示的纹理

content 参数表示标签上显示的文本、图片和信息提示

style 参数表示使用样式

2、DrawTexture控件

DrawTexture控件用于在给定的坐标系内绘制一幅纹理图,一般情况下创建此控件对象所采用的静态方法

csharp 复制代码
public static void DrawTexture(Rect position,Texture image);
public static void DrawTexture(Rect position,Texture image ,ScaleMode scaleMode);
public static void DrawTexture(Rect position,Texture image,ScaleMode scaleMode,bool alphaBlend,float imageAspect);
csharp 复制代码
 public Texture aTexture;//声明一个纹理图
    private void OnGUI()
    {
        GUI.DrawTexture(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 5, Screen.height / 5), aTexture, ScaleMode.ScaleToFit, true, 0.0f);
    }

3、DrawTextureWithTexCoords控件

DrawTextureWithTexCoords控件用于在给定的坐标系内绘制一幅纹理图,一般情况下创建此控件对象所采用的静态方法

csharp 复制代码
public static void DrawTextureWithTexCoords(Rect position , Texture image , Rect texCoords);
public static void DrawTextureWithTexCoords(Rect position , Texture image , Rect texCoords , bool alphaBlend);

4、Box控件

Box控件用于在自定义的区域内绘制一个图形化的盒子

csharp 复制代码
public static void Box(Rect position , string text);
public static void Box(Rect position , Texture image);
public static void Box(Rect position , GUIContent content);
public static void Box(Rect position , string text , GUIStyle style);
public static void Box(Rect position , Texture image , GUIStyle style);
public static void Box(Rect position , GUIContent content , GUIStyle style);

position 参数表示盒子在屏幕上的矩形位置

text 参数表示在盒子上显示的文本

image 参数表示在盒子上显示的纹理图

content 参数表示盒子的文本、图片和提示信息

style 参数表示盒子的使用样式

csharp 复制代码
 private void OnGUI()
    {
        //在屏幕的自定义范围内绘制一个内容为This is  a tiele的Box控件
        GUI.Box(new Rect(Screen.width / 5, Screen.height / 5, Screen.width / 2, Screen.height / 2), "This is a title");
    }

5、Button控件

Button控件用于绘制一个单次按下按钮,当用户单击此按钮时会立即触发事件

csharp 复制代码
public static bool Button(Rect position ,string text);
public static bool Button(Rect position,Texture image);
public static bool Button(Rect position , GUIContent content);
public static bool Button(Rect position , string text ,GUIStyle style);
public static bool Button(Rect position , GUIContent content , GUIStyle style);

position 参数表示盒子在屏幕上的矩形位置

text 参数表示在盒子上显示的文本

image 参数表示在盒子上显示的纹理图

content 参数表示盒子的文本、图片和提示信息

style 参数表示盒子的使用样式

6、RepeatButton控件

RepeatButton控件用于创建一个按钮,该按钮只有在用户持续按下时才会被激活,并且从按住按钮到释放按钮的时间内将连续不断地发送OnClick事件。

csharp 复制代码
public static bool RepeatButton(Rect position , string text);
public static bool RepeatButton(Rect position , Texture image);
public static bool RepeatButton(Rect position , GUIContent content);
public static bool RepeatButton(Rect position , string text ,GUIStyle style);
public static bool RepeatButton(Rect position , Texture image ,GUIStyle style);
public static bool RepeatButton(Rect position , GUIContent content , GUIStyle style);
csharp 复制代码
 public Texture btnTexture;//声明一个纹理图
    private void OnGUI() //声明OnGUI方法
    {
        if (!btnTexture)
        {
            Debug.LogError("若不存在,则输出提示信息");
            return;
        }
        if (GUI.RepeatButton(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 10, Screen.width / 10), btnTexture)) //绘制一个纹理图ReapeatButton
        {
            Debug.Log("若持续按下按钮,则输出提示信息Image");
        }
        if (GUI.RepeatButton(new Rect(Screen.width / 10, Screen.height / 3, Screen.width / 5, Screen.height / 10), "Click")) //绘制一个文本RepeatButton
        {
            Debug.Log("若持续按下按钮,则输出提示信息Text");
        }
    }

7、TextField控件

TextField控件用于绘制一个单行文本框,用户可以在里面编辑一个字符串

csharp 复制代码
public static string TextField(Rect position , string text);
public static string TextField(Rect position ,string text, GUIStyle style);
public static string TextField(Rect position , string text,int maxLength);
public static string TextField(Rect position , string text ,int maxLength ,GUIStyle style);

8、PasswordField控件

Password控件用于绘制一个可编辑密码的文本框

csharp 复制代码
public static string PasswordField(Rect position ,string password ,char maskChar );
public static string PasswordField(Rect position ,string password ,char maskChar ,GUIStyle style);
public static string PasswordField(Rect position ,string password ,char maskChar ,int maxLength)
public static string PasswordField(Rect position ,string password ,char maskChar,int maxLength,GUIStyle style);
csharp 复制代码
 public string passwordToEdit = "My Password";//声明一个字符串
    private void OnGUI()
    {
        //绘制一个密码编辑框,并设置*号来代替密码,设置密码编辑框的最大长度为25
        passwordToEdit = GUI.PasswordField(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 2, Screen.height / 10), passwordToEdit, "*"[0], 25);
    }

9、TextArea控件

TextArea控件用于绘制一个多行文本编辑框,用户可以在里面编辑一段字符串。

csharp 复制代码
public static string TextArea(Rect position , string text);
public static string TextArea(Rect position , string text, GUIStyle style);
public static string TextArea(Rect position , string text ,int maxLength);
public static string TextArea(Rect position ,string text ,int maxLength,GUIStyle style);
csharp 复制代码
 public string stringToEdit = "Hello World\nI,ve got 2 lines...";
    private void OnGUI()
    {
        //绘制一个多行文本编辑框,将已声明的字符串赋给它,并设置其最大长度为200
        stringToEdit = GUI.TextArea(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 2, Screen.height / 2), stringToEdit, 200);
    }

10、SetNextControlName控件和GetNameOfFousedControl控件

SetNextControlName控件用于给下一步控制设置事件名字

csharp 复制代码
public static void SetNextControlName(string name);
name为事件名字
csharp 复制代码
 public string login = "username";
    public string login2 = "no action here";
    private void OnGUI()
    {
        //设置下一步控制事件的名字为user
        GUI.SetNextControlName("user");
        //绘制下一个单行文本编辑框
        login = GUI.TextField(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 3, Screen.height / 10), login);
        if (Event.current.Equals(Event.KeyboardEvent("return")) && GUI.GetNameOfFocusedControl() == "user")//判断当前事件是否为键盘事件return
        {
            Debug.Log("Login");
        }

        if (GUI.Button(new Rect(Screen.width / 2, Screen.height / 10, Screen.width / 5, Screen.height / 10), "Login"))
        {
            Debug.Log("Login");
        }
    }

11、FocusControl控件

FocusControl控件用于通过键盘在当前焦点处输入值。

csharp 复制代码
public static void FocusControl(string name);

此方法中的参数name表示焦点所要移动到的控件的名称

创建FocusControl控件,可以在当前焦点处通过键盘输入值然后显示。

csharp 复制代码
    public string username = "username";//声明一个内容为username的字符串username
    public string pwd = "a pwd";//声明一个内容为 a pwd 的字符串pwd
    private void OnGUI()
    {
        GUI.SetNextControlName("MyTextField");//将下一步的控制事件命名为MyTextField
        //绘制一个单行文本编辑框,并将字符串username的内容赋给它
        username = GUI.TextField(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 3, Screen.height / 10), username);
        //绘制一个单行文本编辑框,并将字符串pwd的内容赋给它
        pwd = GUI.TextField(new Rect(Screen.width / 10, Screen.height / 4, Screen.width / 3, Screen.height / 10), pwd);
        //绘制一个名为Move Focus的按钮,并判断按钮是否被按下
        if (GUI.Button(new Rect(Screen.width / 10, Screen.height * 2 / 5, Screen.width / 6, Screen.height / 10), "Move Focus"))
        {
            GUI.FocusControl("MyTextField");
        }
            
    }

12、Toggle控件

Toggle控件用于绘制开关,我们可以通过控制开关的闭合来执行一下具体的操作

csharp 复制代码
public static bool Toggle(Rect position ,bool value ,string text);
public static bool Toggle(Rect position,bool value,Texture image);
public static bool Toggle(Rect position,bool value,GUIContent content);
public static bool Toggle(Rect position,bool value,string text,GUIStyle style);
public static bool Toggle(Rect position,bool value ,Texture image ,GUIStyle style);
public static bool Toggle(Rect position,bool value,GUIContent content,GUIStyle style);
public static bool Toggle(Rect position,int id ,bool value ,GUIContent content,GUIStyle style);

position:开关按钮在屏幕上的矩形位置

value:开关按钮的初始开关状态

text:按钮上显示的文本

image:按钮显示的纹理图

content:按钮的文本、图片和提示信息

style:开关按钮的使用样式

csharp 复制代码
  public Texture aTexture;//声明一个纹理图
    private bool toggleTxt = false;//声明一个初始值为false的布尔变量toggleTxt
    private bool toggleImg = false;//声明一个初始值为false的布尔变量toggleImg
    private void OnGUI()
    {
        if (!aTexture)
        {
            Debug.LogError("没有挂载纹理到Inspector");
            return;
        }
        //绘制一个名为 A Toggle text 且初始状态为toggleTxt的开关
        toggleTxt = GUI.Toggle(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 3, Screen.height / 10), toggleTxt, "A Toggle text");
        //绘制一个纹理图为aTexture且初始状态为toggleImg的开关
        toggleImg = GUI.Toggle(new Rect(Screen.width / 10, Screen.height / 4, Screen.width / 10, Screen.height / 10), toggleImg, aTexture);
    }

13、Toolbar控件

Toolbar控件用于绘制一个工具条,在里面可以置入一些工具按钮

csharp 复制代码
public static int Toolbar(Rect position,int selected ,string[] texts)
public static int Toolbar(Rect position,int selected ,Texture[] images)
public static int Toolbar(Rect position,int selected ,GUIContent[] content)
public static int Toolbar(Rect position,int selected ,string[] texts,GUIStyle style);
public static int Toolbar(Rect position,int selected,Texture[] image,GUIStyle style);
public static int Toolbar(Rect position,int selected ,GUIContent[] contents,GuIStyle style);

position:工具栏在屏幕上的矩形位置

seleted:被选择按钮的索引号

texts:显示在工具栏按钮上的字符串数组

images:参数表示显示在工具栏按钮上的纹理图数组

content:工具栏的文本、图片和提示信息

style:工具栏的使用样式

csharp 复制代码
 public int toolbarInt = 0;//声明一个初始值为0的整形变量toolbarInt
    public string[] toolbarStrings = new string[] { "Toolbar1", "Toolbar2", "Toolbar3" };//声明一个具有内容的字符型数组

    private void OnGUI()
    {
        //绘制一个内容为toolbarStrings且当前焦点在第toolbarInt上的工具条
        toolbarInt = GUI.Toolbar(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 2, Screen.height / 10), toolbarInt, toolbarStrings);
    }

14、SelectionGrid控件

SelectionGrid控件用于绘制网络按钮,用户可以在自定义的网格内置入具体功能按钮

csharp 复制代码
public static int SelectionGrid(Rect position,int selected , string[]texts , int xCount);
public static int SelectionGrid(Rect position,int selected , Texture[] images ,int xCount);
public static int SelectionGrid(Rect position,int selected ,GUIContent[] content ,int xCount);
public static int SelectionGrid(Rect position ,int selected ,string[] texts ,int xCount ,GUIStyle style);
public static int SelectionGrid(Rect position ,int selected ,Texture[] images,int xCount ,GUIStyle style);
public static int SelectionGrid(Rect position,int selected ,GUIContent[] content,int xCount,GUIStyle style);

position 表示网格在屏幕上的矩形位置

selected 表示被选择表格按钮的索引号

texts 表示显示在网格按钮上的字符串数组

images 表示显示在网格按钮上的纹理图数组

content 表示网格按钮的文本、图片和提示信息

xCount 表示水平方向向上的元素个数

style 表示网格按钮的使用样式

csharp 复制代码
 public int selGridInt = 0;//声明一个初始值为0的整型变量selGridInt
    public string[] selStrings = new string[] { "Grid1", "Grid2", "Grid3", "Grid4" };//声明一个具有内容的字符型数组
    private void OnGUI()
    {
        //绘制一个内容selStrings且当前焦点在第selGridInt上的网络按钮控件
        selGridInt = GUI.SelectionGrid(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 2, Screen.height / 3), selGridInt, selStrings, 2);
    }

SelectionGrid控件返回的是int类型的选择按钮的索引号

15、HorizontalSlider控件

HorizontalSlider控件用于绘制水平滑块,用户可以自己设置阈值

csharp 复制代码
public static float HorizontalSlider(Rect position,float value ,float leftValue,float rightValue);
public static float HorizontalSlider(Rect position,float value ,float leftValue,float rightValue,GUIStyle slider,GUIStyle thumb);

position 表示滑块条在屏幕上的矩形位置

value 表示滑动条的值,确定可拖行滑块的位置

leftValue:表示滑动条最左边的值

rightValue:滑动条最右边的值

slider:用于显示可拖动区域的GUI样式,thumb表示用于显示可拖动滑块的GUI样式。

csharp 复制代码
 public float hSliderValue = 0.0F;
    private void OnGUI()
    {
        //绘制一个初始值为hSliderValue的水平滚动条
        hSliderValue = GUI.HorizontalSlider(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 3, Screen.height / 10), hSliderValue, 0.0F, 10.0F);

    }

16、VerticalSlider控件

VerticalSlider控件用于绘制一个垂直的滑块,并且可以自己设置阈值。

csharp 复制代码
public static float VerticalSlider(Rect position,float value ,float topValue ,float bottomValue);
public static float VerticalSlider(Rect position,float value ,float value ,float topValue,float bottomValue,GUIStyle slider,GUIStyle thumb);

position 表示滑动条在屏幕上的矩形位置

value:表示滑动条的值,它确定了可拖动滑块的位置

topValue:表示滑动条最顶部的值

bottomValue:表示滑动条最底部的值

slider:表示用于显示可拖动区域GUI样式

thumb:表示用于显示可拖动滑块的GUI样式

csharp 复制代码
 public float vSliderValue = 0.0F;//声明一个初始值为0.0F的浮点型变量vSliderValue
    private void OnGUI()
    {
        //绘制一个初始值为vSliderValue的竖值滑块
        vSliderValue = GUI.VerticalSlider(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 10, Screen.height / 3), vSliderValue, 10.0F, 0.0F);

    }

17、HorizontalScrollbar控件

HorizontalScrollbar控件用于绘制一个水平滚动条,并且可以设置阈值

csharp 复制代码
public static float HorizontalScrollbar(Rect position,float value,float size,float leftValue,float rightValue);
public static float HorizontalScrollbar(Rect position,float value,float size,float leftValue,float leftValue,float rightValue,GUIStyle style);

position: 表示滑动条在屏幕上的矩形位置

value :滑动条的值,可以确定可拖动滑块的位置

size: 可以所能看到的大小

leftValue:表示滑块条最左端的值

rightValue:滑动条最右端的值

style :滚动条背景的样式

csharp 复制代码
 //HorizontalScrollbar控件返回值为float类型,并且能通过用户拖动滚动条或单击滚动条上的箭头来改变其值。
    public static float hSbarValue;//声明一个浮点型变量hSbarValue
    private void OnGUI()
    {
        //绘制一个初始值为hSbarValue的水平滚动条
        hSbarValue = GUI.HorizontalScrollbar(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 3, Screen.height / 10), hSbarValue, 1.0F, 0.0F, 10.0F);
    }

HorizontalScrollbar控件返回值为float类型

18、VerticalScrollbar控件

VerticalScrollbar控件用于绘制一个垂直滚动条,并且可以设置阈值

csharp 复制代码
public static float VerticalScrollbar(Rect position,float value ,float size,float topValue,float bottomValue);
public static flaot VerticalScrollbar(Rect position,float value, float size,float topValue)

position表示滑动条在屏幕上的矩形位置

csharp 复制代码
  public float vSbarValue;//声明一个浮点型变量vSbarValue
    private void OnGUI()
    {
        //绘制一个初始值为vSbarValue的竖直滚动条
        vSbarValue = GUI.VerticalScrollbar(new Rect(Screen.width / 10, Screen.height / 10, Screen.width / 10, Screen.height / 3), vSbarValue, 1.0F, 10.0F, 0.0F);
    }

VerticalScrollbar控件返回值为float类型,并且能通过用户拖动滚动条或单击滚动条上的箭头来改变其值。

19、BeginGroup控件和EndGroup控件

BeginGroup控件用于开始一个组,但必须与EndGroup控件配合来结束一个组

csharp 复制代码
public static void BeginGroup(Rect position);
public static void BeginGroup(Rect position,string text);
public static void BeginGroup(Rect position,GUIStyle style);
public static void BeginGroup(Rect position,Texture image);
public static void BeginGroup(Rect position,GUIContent content);
public static void BeginGroup(Rect position,string text,GUIStyle style);
public static void BeginGroup(Rect position,Texture image ,GUIStyle style);
public static void BeginGroup(Rect position,GUIContent content,GUIStyle style);

position:表示组在屏幕上的矩形位置

text:组上显示的文本

image:组上显示的纹理图

content:表示组的文本,图片和提示

style:组的背景样式

EndGroup控件用于结束一个组,必须与BeginGroup配对出现。

csharp 复制代码
public static void EndGroup()
此方法无参数,主要用于结束一个组
csharp 复制代码
 private void OnGUI()
    {
        GUI.BeginGroup(new Rect(Screen.width / 2 - 200, Screen.height / 2 - 100, 400, 200));
        GUI.Box(new Rect(0, 0, 400, 200), "在自定义区域创建一个Box控件,在Box控件用于显示的内容");
        GUI.EndGroup();

    }

当开始创建一个组时,里面的GUI控件的坐标系统相对于组的左上角设置为(0,0),所有的控件被限制到该组内。

20、BeginScrollView控件和EndScrollView控件

BeginScrollView控件用于在GUI中创建一个滚动视图

csharp 复制代码
public static Vector2 BeginScrollView(Rect position ,Vector2 scrollPosition,Rect ViewRect);
public static Vector2 BeginScrollView(Rect position, Vector2 scrollPosition,Rect ViewRect,bool alwaysShowHorizontal,bool alwaysShowVertical);
public static Vector2 BeginScrollView(Rect position,Vector2 scrollPosition,Rect ViewRect,GUIStyle horizontalScrollbar ,GUIStyle verticalScrollbar);
public static Vector2 BeginScrollView(Rect positon ,Vector2 scrollPositon,Rect viewRect,bool alawysShowHorizontal,bool alwaysShowVertical);

position:表示组在屏幕上的矩形位置

scrollPosition:显示滚动位置

ViewRect:表示滚动视图内使用的矩形

alwaysShowHorizontal:是否显示水平滚动条

alwaysShowVertical:是否显示垂直滚动条

horzontalScrollbar:表示水平滚动条的可选GUIStyle

verticalScrollbar表示竖直滚动条的可选GUIStyle

EndScrollView控件用于在GUI中撤销一个滚动视图

csharp 复制代码
public static void EndScrollView();
public static void EndScrollView(bool handleScrollWheel);

21、ScrollTo控件

ScrollTo控件用于将内容滚动到给定坐标的位置

csharp 复制代码
public static void ScrollTo(Rect position)
csharp 复制代码
public Vector2 scrollPos = Vector2.zero;//声明一个初始值为(0,0)的坐标scrollPos
    private void OnGUI()
    {
        //在屏幕指定区域内创建一个自定义滚动区域
        scrollPos = GUI.BeginScrollView(new Rect(
            Screen.width / 10,Screen.height / 10,Screen.width / 5,Screen.height / 4 ), scrollPos, new Rect(0, 0, Screen.width / 2, Screen.height / 10) );
        //创建一个名字为Go Right的按钮,并判断按钮是否被按下
        if (GUI.Button(new Rect(0, 0, Screen.width / 5, Screen.height / 10), "Go Right"))
        {
            GUI.ScrollTo(new Rect(Screen.width / 4, 0, Screen.width / 4, Screen.height / 10));//是当前焦点则立即跳到指定的区域
        }
        //创建一个名字为Go Left的按钮,并判断按钮是被按下
        if (GUI.Button(new Rect( Screen.width / 4,0, Screen.width/5,Screen.height / 10), "Go Left"))
        {
            GUI.ScrollTo(new Rect(0, 0, Screen.width / 4, Screen.height / 10));//是当前焦点则立即跳到指定的区域
        }
        GUI.EndScrollView();//撤销滚动视图
    }

22、Window控件

Window控件用于创建弹出窗口,该窗口浮动在普通GUI控件之上

csharp 复制代码
public static Rect Window(int id,Rect clientRect,GUI.WindowFunction func,string text);
public static Rect Window(int id,Rect clientRect,GUI.WindowFunction func,Texture image);
public static Rect Window(int id,Rect clientRect,GUI.WindowFunction func,GUIContent content);
public static Rect Window(int id,Rect clientRect,GUI.WindowFunction func,string text,GUIStyle style);
public static Rect Window(int id,Rect clientRect,GUI.WindowFunction func,Texture iamge);
public static Rect Window(int id,Rect clientRect,GUI.WindowFunction func,GUIContent title,GUIStyle style);

id表示每个窗口的唯一ID

clientRect:窗口组在屏幕上的矩形位置

func:在窗口中创建GUI的函数

text:窗口的标题文本显示

content:窗口的文本、图片和提示

style: 用户窗口的可选样式

csharp 复制代码
public Rect windowRect = new Rect(20, 20, 120, 50);//声明窗口的矩形区域windowRect
    private void OnGUI()
    {
        //在windowRect矩形区域内绘制一个名为My Window窗口
        windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window");
    }
    private void DoMyWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World"))
        {
            print("Got a click");//若按钮被按下,则输出提示信息
        }
    }

Window控件浮动在普通GUI控件之上,拥有点选焦点和能被终端用户随意拖动的特点,不像其他的GUI控件,Window控件需要单独提供一个方法,此方法中可以通过代码描述Window控件中哪些子控件(如按钮、标签等)。另外,如果使用GUILayout来摆放组件,就需要配套使用GUILayout.Window

Window控件可以使用一样的函数来创建多个窗口,但是要确定每一个窗口有自己的ID。

csharp 复制代码
public Rect windowRect = new Rect(20, 20, 120, 50);//声明窗口的矩形区域windowRect
    private void OnGUI()
    {
        //在windowRect矩形区域内绘制一个名为My Window窗口
        windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window");
    }
    private void DoMyWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World"))
        {
            print("Got a click");//若按钮被按下,则输出提示信息
        }
    }

Window控件返回Rect类型,即窗口所在的矩形。

csharp 复制代码
    public Rect windowRect0 = new Rect(20, 20, 120, 50);//声明窗口的矩形区域的windowRect0
    public Rect windowRect1 = new Rect(20, 100, 120, 50);//声明窗口的矩形区域WwindowRect1
    private void OnGUI()
    {
        //分别在windowRect0和windowRect1两个矩形区域内绘制两个窗口
        windowRect0 = GUI.Window(0, windowRect0, DoMyWindow, "My Window");
        windowRect1 = GUI.Window(1, windowRect1, DoMyWindow, "My Window");
    }
    //声明DoMyWindow函数,用于创建一个按钮
    private void DoMyWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World"))
        {
            print("Got a click in window"+windowID);//若按钮被按下,则输出相关提示信息
            GUI.DragWindow(new Rect(0, 0, 10000, 10000));//在自定义的矩形区域绘制一个可拖动窗口

        }
    }
    //Window控件返回Rect类型,即窗口所在的矩形

23、DragWindow控件

DragWindow控件用于绘制一个可拖动的窗口,并且可以设置其可拖动的区域

csharp 复制代码
public static void DragWindow()
public static void DragWindow(Rect position)

position:能够拖动窗口的位置

csharp 复制代码
 public Rect windowRect = new Rect(20, 20, 120, 50);//声明窗口的矩形区域windowRect
    private void OnGUI()
    {
        //在windowRect区域中绘制一个内容为My Window的窗口
        windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window");
    }
    private void DoMyWindow(int windowID)
    {
        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }

DragWindow控件需要再代码窗口调用函数来创建一个可拖动窗口,如果想将完整的窗口背景作为拖动区域,则需使用DragWindow的不带参数版本,然后将其放在窗口函数的末尾。

24、BringWindowToFront控件

BringWindowToFront控件用于将当前窗口显示至最上面,即将当前窗口设置在创建的所有窗口的最上面。

csharp 复制代码
public static void BringWindowToFront(int windowID);
csharp 复制代码
  private Rect windowRect = new Rect(20, 20, 120, 50);//声明窗口的矩形区域windowRect
    private Rect windowRect2 = new Rect(80, 20, 120, 50);//声明窗口的矩形区域windowRect2

    private void OnGUI()
    {
        windowRect = GUI.Window(0, windowRect, DoMyFirstWindow, "First");//绘制第一个窗口
        windowRect2 = GUI.Window(1, windowRect2, DoMySecondWindow, "Second");//绘制第二个窗口
    }
    private void DoMyFirstWindow(int windowID)//声明DoMyFirstWindow函数
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Bring to front"))//绘制一个按钮,并判断是否被按下
        {
            GUI.BringWindowToFront(1);//调用BringWindowToFront方法,并将ID为1的窗口置于最上方
        }
        GUI.DragWindow(new Rect(0, 0, 10000, 20));//绘制一个可拖动窗口
    }
    private void DoMySecondWindow(int windowID)//声明DoMySecondWindow函数
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Bring to front"))//绘制一个按钮,并判断是否被按下
            GUI.BringWindowToFront(0);//调用BringWindowToFront方法,将ID为0的窗口置于最上方

        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }

25、BringWindowToBack控件

BringWindowToBack控件用于将当前窗口移至最下面,即将当前窗口置于创建的所有的窗口的最下方。

csharp 复制代码
public static void BringWindowToBack(int windowID)
csharp 复制代码
  private Rect windowRect = new Rect(20, 20, 120, 50);//声明窗口的矩形区域windowRect
    private Rect windowRect2 = new Rect(80, 20, 120, 50);//声明窗口的矩形区域windowRect2
    private void OnGUI()
    {
        windowRect = GUI.Window(0, windowRect, DoMyFirstWindow, "First");//绘制第一个窗口
        windowRect2 = GUI.Window(1, windowRect2, DoMySecondWindow, "Second");//绘制第二个窗口
    }
    private void DoMyFirstWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Put Back"))
        {
            GUI.BringWindowToBack(0);
        }
        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }
    private void DoMySecondWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Put Back"))
        {
            GUI.BringWindowToBack(1);
        }
        GUI.DragWindow(new Rect(0, 0, 10000, 20));
    }

26、FocusWindow控件

FocusWindow控件可以将一个窗口设置为当前焦点窗口,通过调用窗口的ID即可完成设置。

FocusWindow控件用于使一个窗口成为活动窗口

csharp 复制代码
public static void FocusWindow(int windowID)
csharp 复制代码
private Rect windowRect = new Rect(20, 20, 120, 50);//声明窗口的矩形区域windowRect
    private Rect windowRect2 = new Rect(20, 80, 120, 50);//声明窗口的矩形区域windowRect2
    private void OnGUI()
    {
        windowRect = GUI.Window(0, windowRect, DoMyFirstWindow, "First");//绘制第一个窗口
        windowRect2 = GUI.Window(1, windowRect2, DoMySecondWindow, "Second");//绘制第二个窗口
    }
    private void DoMyFirstWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Focus other"))
        {
            GUI.FocusWindow(1);//调用FocusWindow函数,并将ID为1的窗口设置为焦点窗口
        }
    }
    private void DoMySecondWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Focus other"))
        {
            GUI.FocusWindow(0);//调用FoucsWindow函数,并将ID为0的窗口设置为焦点窗口
        }
    }

27、UnfocusWindow控件

UnfocusWindow控件用于将当前的焦点窗口从所有的窗口中移除,通过调用窗口的ID即可完成设置。

csharp 复制代码
public static void UnfocusWindow()
csharp 复制代码
 private Rect windowRect = new Rect(20, 20, 120, 50);//声明窗口的矩形区域windowRect
    private Rect windowRect2 = new Rect(20, 80, 120, 50);//声明窗口的矩形区域windowRect2
    private void OnGUI()
    {
        windowRect = GUI.Window(0, windowRect, DoMyFirstWindow, "First");//绘制第一个窗口
        windowRect2 = GUI.Window(1, windowRect2, DoMySecondWindow, "Second");//绘制第二个窗口
    }
    private void DoMyFirstWindow(int windowID)//声明DoMyFirstWindow函数
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "UnFocus"))//绘制一个按钮,并判断按钮是否被按下
        {
            GUI.UnfocusWindow();//若被按下,则移除当前窗口的焦点
        }
    }
    private void DoMySecondWindow(int windowID)//声明DoMySecondWindow函数
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "UnFocus"))//绘制一个按钮,并判断按钮是否被按下
        {
            GUI.UnfocusWindow();//若被按下,则移除当前窗口的焦点
        }
    }

UnfocusWindow控件用于从所有窗口移除焦点,即使所有窗口处于不激活状态

28、ModelWindow控件

ModelWindow控件用于创建模态窗口,通过调用窗口的ID即可完成设置

csharp 复制代码
public static Rect ModalWindow(int id ,Rect clientRect,GUI.WindowFunction func,string text);
public static Rect ModalWindow(int id ,Rect clientRect,GUI.WindowFunction func,Texture image);
public static Rect ModalWindow(int id ,Rect clientRect,GUI.WindowFunction func,GUIContent content);
public static Rect ModalWindow(int id ,Rect clientRect,GUI.WindowFunction func,string text , GUIStyle style);
public static Rect ModalWindow(int id ,Rect clientRect,GUI.WindowFunction func,Texture image , GUIStyle style);
public static Rect ModalWindow(int id ,Rect clientRect,GUI.WindowFunction func,GUIContent content ,GUIStyle style);

id: 窗口的ID

clientRect:窗口组在屏幕上的矩形位置

func:窗口中创建GUI的函数

text: 窗口的标题文本显示

content: 窗口的文本、图片和提示

style: 用户窗口的可选样式

csharp 复制代码
 public Rect windowRect = new Rect(150, 20, 120, 50);//声明窗口的矩形区域windowRect
    private bool toggle = false;
    private void OnGUI()
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World"))
        {
            print("Got a click");
            

        }
        toggle = GUI.Toggle(new Rect(150, 70, 120, 50), toggle, "Show ModalWindow");
        if (toggle)
        {
            windowRect = GUI.ModalWindow(0, windowRect, DoMyWindow, "Modal Window");
        }
    }
    private void DoMyWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Close Window"))
        {
            toggle = false;
        }
    }

ModalWindow与GUI.Window类似,但其窗口始终位于所有其他GUI组件的顶部,并且当其显示时,该控件将是所有GUI输入和事件的唯一接收者。

当显示ModelWindow控件时,其他控件将不会处理输入,并且异常只能显示一个ModalWindow控件

相关推荐
两水先木示17 分钟前
【Unity3D】ECS入门学习(九)SystemBase
学习·unity·ecs
吴梓穆8 小时前
Unity EasyAR入门教程
unity
两水先木示15 小时前
【Unity3D】ECS入门学习(七)缓存区组件 IBufferElementData
学习·unity·ecs
EQ-雪梨蛋花汤17 小时前
【WebAR-图像跟踪】在Unity中基于Imagine WebAR实现AR图像识别
unity·游戏引擎·ar
Thinbug17 小时前
UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL
游戏引擎·虚幻
子燕若水17 小时前
UE(虚幻引擎)运行项目时缺少插件/摸块,需要手动编译
游戏引擎·虚幻
向宇it18 小时前
【从零开始入门unity游戏开发之——C#篇32】C#其他不常用的泛型数据结构类、顺序存储和链式存储
java·开发语言·数据结构·unity·c#·游戏引擎
虾球xz1 天前
游戏引擎学习第64天
redis·学习·游戏引擎
虾球xz1 天前
游戏引擎学习第63天
学习·游戏引擎
两水先木示1 天前
【Unity3D】ECS入门学习(六)状态组件 ISystemStateComponentData
学习·unity·ecs