学习笔记适合新手,如有错误请指正。?号处也请各位指点下,谢谢。
UnityGUI使用一个特殊的OnGUI()函数
它一共有两种类型的接口:GUI.xxx()和GUILayout.XXX()
第一种需要自己手动填写处于屏幕上的位置
第二种unity会为我们自动排版,我们只需要关系内容即可
无论摄像机拍到的图像时怎么变的,GUI永远是显示在屏幕上,不受 变形、碰撞、光照的影响。
lGUI部分是每帧擦除重绘的,只应该在OnGUI中绘制GUI,按钮:GUILayout.Button(“Hello”); 只读标签:GUILayout.Label()
l修改控件的颜色:GUI.backgroundColor = Color.red;设置背景色,GUI.color设置前景色,影响OnGUI中之后的控件直到下次修改颜色为止。
lHierarchy中的游戏对象不一样,OnGUI是每帧擦除重绘的(有可能一帧调用多次)。GUILayout.Button(“Hello”)应该理解为“画一个Button控件”而不是“创建一个Button控件”:
•if(tick%100>50)//每50帧画一次Buton
•{
• GUILayout.Button("Hello");
•}
•tick++;
因此,TextBox的输入要成员变量保存当前的值,否则输不进去。 GUILayout.TextField(“yzk”) ,参数为要显示的值,返回值为用户输入的值。 username = GUILayout.TextField(username
按钮的点击
l响应按钮点击:GUI中没有事件概念,鼠标点击了按钮Button返回值就是true,例如:
• if(GUILayout.Button("Test"))
• {
• Camera.mainCamera.transform.Translate(Vector3.back);
• }
l思考下面的代码有什么问题,怎么解决:
• if(GUILayout.Button("Test"))
• {
• GUILayout.Label("Clicked Test");
• }
l案例:实现登陆功能,显示登陆结果。演练一下。常见错误:OnGUI大小写;文件编码;运行提示“Compiler Error”
GUILayout布局
lGUILayout布局默认会伸展控件的尺寸。Button等控件支持params GUILayoutOption[] options可变参数数组,可以通过GUILayout.Width(30)返回一个设置控件宽度的GUILayoutOption对象, Height()、 MinWidth()、MinHeight()等同理。
例子:GUILayout.Button("Test",GUILayout.Width(500),GUILayout.Height(30))
lGUILayout采用线性布局,类似于StackPanel,默认是纵向布局。通过GUILayout.BeginHorizontal();开启和GUILayout.EndHorizontal()结束一个横向排列区域,同理BeginVertical() 、EndVertical()。
l如果嫌控件太挤,可以使用GUILayout.Space(30);增加若干像素的间隙。
常用GUI控件
- 滑动条:纵向, sliderValue = GUILayout.VerticalSlider(sliderValue,0,100);返回值为当前值,第二个参数为最小值,第二个为最大值。 HorizontalSlider()横向
- 区域Area,相当于一个控件的盒子, Area中的控件跟着Area移动, BeginArea()开始一个区域,参数指定区域的大小和坐标, EndArea()结束区域;
- 窗口,区域是没有边框和标题的,也不可以拖放。 GUILayout.Window(0, new Rect(50,50,200,200),AddWindow1,“我的窗口”); 第一个参数为窗口的编号,第二个为窗口大小,第三个为void WindowFunction(int windowId)委托,用来绘制窗口内容。
- 窗口拖拽,在WindowFunction的最后调用GUI.DragWindow()可以启用全屏拖放(给DragWindow传Rect参数可以设定可拖放的区域)。考虑帧刷新的问题,要在OnGUI把Window()的返回Rect保存才可以可拖动,Start()中设定初始位置。
- 密码框:pwd = GUILayout.PasswordField(pwd,‘*’),第二个参数为掩码字符,注意帧刷新的问题。
- Button只有鼠标抬起才会返回true,这样用Button做发射子弹就不能按下一直发射,可以使用RepeatButton,这样按下期间会一直返回true。案例:Button和RepeatButton实现游戏对象移动。
- Tab页: electedToolBarId = GUILayout.Toolbar(selectedToolBarId,newstring[]{“装备”,“经验”,“队友”}); 返回值为激活的按钮的序号。
- 复选框:isMuted = GUILayout.Toggle(isMuted,“静音”);
- 多行文本区: msgBody =GUILayout.TextArea(msgBody,GUILayout.Width(300),GUILayout.Height(300));
gui总结