关于Unity学习七--UI

1.GUI(最原始的UI系统)
UI是游戏组成的重要部分,游戏的很多操作直接通过UI控制,无论摄像机拍到的图像怎么变幻,GUI永远显示在屏幕上,不受变形,碰撞等信息印象
写GUI脚本,必须注意两个重要特征
(1)GUI脚本控制必须定义在脚本文件的OnGUI事件函数中
(2)GUI美一帧都会调用
2.常见的控件
(1)Label :标签
void OnGUI(){
GUI.Label(new Rect(100,100,200,100),”I am the Label”);
}
(2)TextFiled:文本框
public class GUITest : MonoBehaviour {
public string _strText;
void OnGUI(){
//不能修改文本框里的内容
GUI.TextField(new Rect(100,30,100,30),”Hello”);
//可以修改文本框里的内容但是不可以换行
_strText = GUI.TextField(new Rect(100,120,100,30),_strText);
}
(3)TextArea:多行文本框
(4)Button:按钮
void OnGUI(){
if (GUI.Button (new Rect (0, 150, 50, 30), “Sure”)) {
print(“button”);
}
}
//因为返回的值是bool类型
(5)ToolBar:Tab页
public class GUITest : MonoBehaviour {
public int _IntSelectIndex = 0;
void OnGUI(){
_IntSelectIndex = GUI.Toolbar(new Rect(0,200,200,30),
_IntSelectIndex,new string[]{“Duty”,“Equip”,“People”});
}
}
(6)Toggle:选择框
public class GUITest : MonoBehaviour {
public bool _BoolCheck1;
public bool _BoolCheck2;
void OnGUI(){
_BoolCheck1 = GUI.Toggle(new Rect(0,260,100,50),_BoolCheck1,“zhuangbei”);
_BoolCheck2 = GUI.Toggle(new Rect(0,300,100,50),_BoolCheck2,“renyuan”);

}

}
(7)HorizontalSlider:水平滚动条
public class GUITest : MonoBehaviour {
public float value;
public int max = 100;
public int min = 0;
void OnGUI(){
value = GUI.HorizontalSlider (new Rect (0, 400, 200, 50), value, max, min);
}
}
(8)VerticalSlider:垂直滚动条

3.GUILayout自动布局
含义:每个控价的宽度高度按照一些字体的大小进行统一计算,位置采取靠左对齐,一个空间占据一行的原则
OnGUI(){
// 相当于布局一个盒子,盒子使用Rect进行定义,如果字体太多,超出范围不显示
GUILayout.BeginArea (new Rect (100, 100, 300, 400));
GUILayout.Label(“I am label”);
GUILayout.Label(“hello world”);
GUILayout.Label(“Hello Morning”);
GUILayout.EndArea ();
}
BeginArea和EndArea必须同时出现
例子:
public class GUITest : MonoBehaviour {
private bool _BoolDisplay = false;
private bool _BoolDisplayWindow = false;
OnGUI(){
if (GUILayout.Button (“Show”)) {
GUILayout.Label(“I can’t show in window”);
}
if (GUILayout.Button (“xianshi”)) {
_BoolDisplay = true;
}
if (_BoolDisplay) {
GUILayout.Label(“I can be show”);
}

	if (GUILayout.Button ("Show Window")) {
		_BoolDisplayWindow = true;
	}

//添加窗口
if (_BoolDisplayWindow) {
GUILayout.Window(0,new Rect(100,100,200,200),AddWindow,“MyWindow”);
}
}

void AddWindow(int winId){
	if (GUILayout.Button ("Exit")) {
		_BoolDisplayWindow = false;
	}
}

}
4.GUI皮肤
(1)使用GUI.DrawTexture()方法进行贴图的绘制输出
使用Resource.Load()类静态方法进行动态提取项目视图中存在的贴图资源
例子:
using UnityEngine;
using System.Collections;

public class Demo1 : MonoBehaviour {
public Texture2D Txt2D_coin; //在检视视图上直接拖拽的
private Texture2D _Txt2D_bird;
// Use this for initialization
void Start () {
//在代码中进行添加
_Txt2D_bird = (Texture2D)Resources.Load(“A”);
Texture2D image = Resources.Load(“1”);
}
void OnGUI(){
//Screen.width, Screen.height获取全屏
GUI.DrawTexture (new Rect (0, 0, Screen.width, Screen.height), Txt2D_coin);
GUI.DrawTexture (new Rect (0, 0, 100, 100), _Txt2D_bird);
}
// Update is called once per frame
void Update () {

}

}
(2)使用GUISkin
创建过程
(1)首先项目视图中鼠标右键点击Create-GUI Skin,然后进行CustomStyle进行贴图的赋值,需要几个就进行赋值几个即可
(2)代码中public GUISkin mySkin ,进行连接即可
public class NewBehaviourScript : MonoBehaviour {
public GUISkin mySkin;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}

void OnGUI(){
	GUI.skin = mySkin;
	GUI.Button(new Rect(0,0,114,60),"",mySkin.GetStyle("boy"));
	GUI.Button(new Rect(200,200,114,60),"",mySkin.GetStyle("flower"));
}

}
5.网格布局的使用
void OnGUI(){
for (int i = 0; i<5; i++) {
for(int j = 0;j<5;j++){
//按行展开
if(GUI.Button(new Rect(100j,100i,80,80),"",mySkin.GetStyle(“ring”))){
ButtonClicked(i*5+j);
}
}
}
}

void ButtonClicked(int tag){
print (tag);
}
6.游戏的暂停与继续
例子:
public class ParseandStart : MonoBehaviour {
public float moveSpeed;
void Update () {
transform.Rotate (new Vector3 (0, 0, moveSpeed * Time.deltaTime));
}

void OnGUI(){
	if (GUI.Button (new Rect (140, 0, 100, 50), "Pause")) {
		Time.timeScale = 0;
	}
	if (GUI.Button (new Rect (280, 0, 100, 50), "Continue")) {
		Time.timeScale = 1;
	}
}

}
7.滚动视图的使用
BeginScrollView的参数:
position:Rect-滚动视图在屏幕上的矩形位置
scrollPosition:Vector2-用来显示滚动的位置
viewRect:Rect-滚动视图内使用的矩形
alwayShowHorizontal:bool-可选参数,总是显示水平滚动条,如果不设置为false或者不设置时,只用当内矩形区宽于矩形区域时才显示
alwayShowVertical:bool-可选参数,总是显示垂直滚动条,如果不设置为false或者不设置时,只用当内矩形区高于矩形区域时才显示
例子:
public class ParseandStart : MonoBehaviour {
private string[] infos = new string[5];
Vector2 scrollPosition;
void Start () {
infos[0] = “AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhfhhhhhhhhhwuioetyoafhewghwaliwrfgtiuhaslhg”;
infos[1] = “BBBBBBBBBBBBBBBBBBBBBBBByuw//////////////yuexiaojian dhwqunraeuwgfl;a23QYTRGA;RG2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222”;
infos[2] = “CCCCCCCCCCCCCCCCCCCCCCCCCCC”;
infos[3] = “DDDDDDDDDDDDDDDDDDDDDDDDDD”;
infos[4] = “EEEEEEEEEEEEEEEEEEEEEEEEEE”;
}
void OnGUI(){
scrollPosition = GUI.BeginScrollView (new Rect (10, 10, 400, 400), scrollPosition, new Rect (10, 10, 700, 700)
, false, false);
GUI.Label (new Rect (10, 10, 770, 40), infos [0]);
GUI.Label (new Rect (10, 50, 770, 40), infos [1]);
GUI.Label (new Rect (10, 90, 770, 40), infos [2]);
GUI.Label (new Rect (10, 130, 770, 60), infos [3]);
GUI.Label (new Rect (10, 190, 770, 40), infos [4]);

	GUI.EndScrollView ();
}

}
添加按钮及图标

扫描二维码关注公众号,回复: 6170432 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_36725286/article/details/89961268