unity3d GUI界面介绍
在Unity开发中,GUI(Graphical User Interface,图形用户界面)起着至关重要的作用。它能够为玩家提供直观的交互体验,让玩家与游戏进行有效的沟通。接下来,我们将深入了解Unity GUI界面的相关内容。
一、Unity GUI基础
Unity的GUI类提供了丰富的界面控件,通过合理配合使用这些控件,可以创建出各种复杂的用户界面。需要注意的是,GUI代码必须在OnGUI函数中调用才能进行绘制。而且,大多数GUI控件都需要传入Rect参数来指定屏幕绘制区域,例如Rect(0, 10, 200, 300),该矩形区域左上角的坐标为(0, 10),宽度为200,高度为300。在Unity GUI中,屏幕坐标系以左上角为原点。
二、常见GUI控件及使用示例
1. Label控件
Label控件主要用于显示文本信息或者图片。以下是一个简单的示例,我们新建一个C#脚本,命名为TestGUI.cs,并将其绑定到Main Camera对象上。
void OnGUI()
{
// GUI.color = Color.red;
GUI.Label(new Rect(10, 10, 100, 200), "Hello World!");
GUI.Label(new Rect(100, 100, texture.width / 4, texture.height / 4), texture);
}
在上述代码中,我们定义了两个Label,一个用于显示文字,另一个用于显示图片。
2. Box控件
Box控件用于绘制带有边框背景的文字或图片。示例代码如下:
void OnGUI()
{
// GUI.color = Color.red;
// GUI.Label(new Rect(10, 10, 100, 200), "Hello World!");
// GUI.Label(new Rect(100, 100, texture.width / 4, texture.height / 4), texture);
GUI.Box(new Rect(10, 10, Screen.width * 0.5f, Screen.height * 0.5f), "This is a title");
GUI.Box(new Rect(150, 170, texture.width / 4, texture.height / 4), texture);
}
3. Button控件
Button控件用于绘制响应单击事件的按钮。以下是几种不同类型按钮的创建代码:
// 文字按钮
GUI.Button(new Rect(10, 10, 150, 50), "这是一个文字按钮");
// 图片按钮
GUI.Button(new Rect(150, 100, texture.width / 4, texture.height / 4), texture);
// 带图片和文字的按钮
GUIContent guic = new GUIContent("按钮", texture);
GUI.Button(new Rect(10, 70, 150, 30), guic);
// 设置按钮的点击事件
if (GUI.Button(new Rect(150, 100, texture.width / 4, texture.height / 4), texture))
{
Debug.Log("--------aaa");
}
当点击按钮时,控制台会输出相应的内容。
4. 文本输入控件
在游戏中,经常会用到信息输入的窗口,如聊天窗、用户信息输入等。以下是几种文本输入控件的使用示例:
using UnityEngine;
using System.Collections;
public class TestGUI : MonoBehaviour
{
public Texture2D texture;
public string userName;
public string password;
public bool isSuccess;
// Use this for initialization
void Start()
{
userName = "admin";
password = "123";
}
// Update is called once per frame
void Update() { }
void OnGUI()
{
// GUI.color = Color.red;
// GUI.Label(new Rect(10, 10, 100, 200), "Hello World!");
// GUI.Label(new Rect(100, 100, texture.width / 4, texture.height / 4), texture);
// GUI.Box(new Rect(10, 10, Screen.width * 0.5f, Screen.height * 0.5f), "This is a title");
// GUI.Box(new Rect(150, 170, texture.width / 4, texture.height / 4), texture);
// GUI.Button(new Rect(10, 10, 150, 50), "这是一个文字按钮");
// 图片按钮
// if (GUI.Button(new Rect(150, 100, texture.width / 4, texture.height / 4), texture))
// {
// Debug.Log("--------aaa");
// }
// 绘制一个带图片和文字按钮
// GUIContent guic = new GUIContent("按钮", texture);
// GUI.Button(new Rect(10, 70, 150, 30), guic);
userName = GUI.TextField(new Rect(10, 10, 150, 30), userName);
// '*' 密码字符串的掩码字符
password = GUI.PasswordField(new Rect(10, 50, 150, 30), password, '*', 25);
GUI.TextArea(new Rect(10, 100, 150, 50), "abcderfasdasdasdasfasdaasdfdfsfsd");
if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height / 2 - 50, 100, 100), "登录"))
{
// 判断登录
if (userName.Equals("admin") && password.Equals("123"))
{
isSuccess = true;
}
else
{
isSuccess = false;
}
}
if (isSuccess)
{
GUI.Label(new Rect(10, 200, 100, 30), "登录成功!");
}
else
{
GUI.Label(new Rect(10, 200, 100, 30), "登录失败!");
}
}
}
其中,TextField控件用于单行文本输入,PasswordField控件用于密码输入,TextArea控件用于多行文本编辑。
5. Toggle控件
Toggle控件可用于制作开关按钮,每次单击时,它会在开和关的状态之间切换。创建代码如下:
// 文字
toggleTxt = GUI.Toggle(new Rect(10, 10, 100, 30), toggleTxt, "A Toggle text");
// 图片
toggleImg = GUI.Toggle(new Rect(10, 50, 50, 50), toggleImg, texture);
6. ToolBar控件
ToolBar控件适用于绘制一组按钮,在这些按钮中同时只激活一个,可用于制作工具栏。创建代码如下:
public int toolbarInt;
toolbarInt = GUI.Toolbar(new Rect(10, 10, 250, 30), toolbarInt, new string[] { "功能一", "功能二", "功能三" });
7. Slider控件
Slider滑动条是一种常用的界面元素,可用于音量调整、进度显示、数值调整等。在Unity中,Slider控件分为水平和垂直两种,对应的GUI函数为HorizontalSlider和VerticalSlider。创建代码如下:
hSliderValue = GUI.HorizontalSlider(new Rect(50, 25, 100, 30), hSliderValue, 0.0f, 10.0f);
// 显示水平滑动条数值
GUI.Label(new Rect(25, 22, 100, 30), hSliderValue.ToString("0.00"));
vSliderVaule = GUI.VerticalSlider(new Rect(25, 70, 30, 100), vSliderVaule, 0.0f, 10.0f);
// 显示垂直滑动条数值
GUI.Label(new Rect(22, 170, 100, 30), vSliderVaule.ToString("0.00"));
8. Scrollbar控件
滚动条Scrollbar常用于页面区域的滚动,例如文档浏览。在Unity中,Scrollbar控件分为水平和垂直两种,对应的GUI函数为HorizontalScrollbar和VerticalScrollbar。创建代码如下:
hSbarValue = GUI.HorizontalScrollbar(new Rect(25, 25, 100, 30), hSbarValue, 1.0f, 0.0f, 10.0f);
vSbarVaule = GUI.VerticalScrollbar(new Rect(25, 50, 30, 100), vSbarVaule, 1.0f, 10.0f, 0.0f);
三、自定义GUI样式
Unity默认的控件外观较为简单,在游戏开发过程中,开发者通常会根据游戏的类型和内容来设计一套个性化的游戏界面。Unity可以通过配置GUISkin来更改控件的默认样式,制作出符合游戏风格的控件外观。具体操作步骤如下:
- 依次打开菜单栏中的
Assets -> Create -> GUI Skin来创建GUISkin。 - 单击
GUISkin文件,在Inspector视图中可以对GUISkin的参数进行设置。例如,若需要更换按钮的背景图片以及按钮上的字体大小等,可单击Button折叠项,展开Button控件的样式参数,更改Normal、Hover、Active、On Normal、On Hover、Font Size等参数。 - 在代码中使用自定义的
GUISkin:
public GUISkin mySkin;
GUI.skin = mySkin;
GUI.Button(new Rect(60, 50, 588 / 2, 288 / 2), "开始游戏");
四、GUILayout自动布局
在Unity中,GUI控件的布局方式有两种:一种是固定布局,即在绘制控件时传入位置参数,指定控件的精确位置;另一种是自动布局,适用于控件数量动态变化的情况,或者开发者不太在乎控件精准位置的场景。如果想使用自动布局,需要使用GUILayout类来代替前面使用的GUI类,并且去掉Rect()位置参数。示例代码如下:
// 自动布局
GUILayout.Button("aaaaaaa");
通过以上内容,我们对Unity GUI界面有了较为全面的了解,开发者可以根据实际需求灵活运用这些控件和布局方式,创建出美观、实用的游戏界面。