如果大佬在阅读过程中发现本人有误或有更好用的方法,欢迎指正和教导,十分感谢
GUI图形用户界面系统就是项目开发过程中的按钮、文本、图片、开关……这类的2d控件。
需要注意的是,GUI的坐标系统是左上角为(0, 0),右下角为(Screen.width, Screen.height)。
GUI的相关代码需要写在OnGUI函数中。
void OnGUI()
{
GUIStyle labelStyle = new GUIStyle(); // 创建一个GUIStyle对象,用来控制GUI控件的展示。
labelStyle.normal.textColor = Color.red; // 设置文本颜色。
labelStyle.fontSize = 22; // 设置文本字号。
GUI.Label(new Rect(15, 15, 50, 20), "a label", labelStyle); // 根据自定义的GUIStyle来创建一个label控件。
}
skin:
skin是对总体GUI风格的设置控件,需要使用时,需要先Create→GUI Skin,创建一个GUI Skin元件。单击时,在Inspector面板中就会有相应的各个控件的控制变量。
代码中使用GUI.skin = skinTb[index]来控制使用哪个皮肤设置项进行渲染。(上面举例的OnGUI中的GUIStyle对象的参数,其实就是这里截图的变量名,层级结构相同。注意首字母小写,去掉空格)
Color、backgroundColor、contentColor
Color color = new Color(60/255f, 42/255f, 30/255f); // 设置自定义颜色。
GUI.color = color;
Color backgroundColor = Color.red // 设置系统默认红色为背景色。
GUI.backgroundColor = backgroundColor;
Color contentColor = Color.yellow; // 设置空间内的内容文本颜色为黄色。
GUI.contentColor = contentColor;
//下边使用的FromArgb方法,unity中提示没有定义该方法。有知道是为什么的大神烦请告知,不胜感激。
// Color.FromArgb(100, 100, 100); // 根据argb值设置颜色,这里没有alpha值,默认为255,
// Color.FromArgb(150, 255, 0, 0); // 这里是透明度为150的红色。
changed
GUI.changed可以用来检测所有控件的输入值是否变化,输入框内容的变化、选中框的状态变化、按钮的点击操作……都会触发changed
public string textFieldStr = "place holder" // 默认文本
public int maxLength = 50; // 最大长度
void OnGUI()
{
textFieldStr = GUI.TextField(new Rect(15, 15, 80, 50), textFieldStr, maxLength); // 创建一个TextField输入框控件
if (GUI.changed) { // 如果输入框的内容被更改,GUI.changed就会返回true。
Debug.Log("Text field has changed");
}
}
enabled
GUI.enabled用来判断图形界面是否被启用。作用域为直到下次该值被修改,具体看如下示例代码。
public bool fatherOption = true; // 主开关状态
public bool childOption = true; // 子开关状态
void OnGUI()
{
fatherOption = GUI.Toggle(new Rect(15, 15, 100, 30), fatherOption, "father option"); // 创建一个勾选框Toggle控件并获取其启用状态。
GUI.enabled = fatherOption; // 设置控件状态为主开关的开启状态,若开启,则允许下一次设置enabled之前的控件可以互动。
childOption = GUI.Toggle(new Rect(25, 40, 100, 30), childOption, "child option"); // 创建子开关。
GUI.enabled = true; // 在这一行之前的控件,不受此次赋值影响。
if (GUI.Button(new Rect(15, 70, 80, 30), "OK")) { // 按钮随时可以点击,不受开关状态的影响
Debug.Log("on click ok");
}
}
// enabled为false之后,相应的控件全部不可点击、控件透明度变低。
效果如图