Unity3D 学习笔记(二) GUI

来源:互联网 发布:unity3d鼠标点击物体 编辑:程序博客网 时间:2024/06/06 13:11
GUI 都是通过OnGUI函数实现的
Unity把GUI的控件的创建和控件的事件的触发以及执行 整合在一起
OnGUI函数负责所有与GUI相关的处理,在OnGUI中有函数则在每一帧执行。


Button
#pragma strict
function Start ( ) {
}
function Update ( ) {
}

function OnGUI ( ) {
if (GUI.Button(Rect(10,10,120,100),"Unity Button")) 
//定义控件位置(左上角,宽度,高度)  同时控件内容(文本或图片影像)
{
print( "用户单击了Button");
//对按钮的单击事件进行反应
}
}

闪烁按钮
if ( (Time.time%2)<1)  // 按钮每隔一秒显示一次(闪烁)
{
if(GUI.Button(Rect(10,10,120,100),"Unity Button"))
{
print("用户点击了按钮");//按钮显示了才可以点击
}
}

图片按钮
#pragma strict
var image : Texture2D; //定义纹理变量
function OnGUI ( ) {
if (GUI.Button(Rect(10,10,120,100),image)) //使用自变量,且为此赋值
//if (GUI.Button(Rect(10,10,120,100), GUIContent("我的Button",image)))  //文字+图片
///if (GUI.Button(Rect(10,10,120,100), GUIContent("我的Button",“This is a button”)))  //文字+鼠标移动到此的提示
{
print( "用户单击了Button");
//对按钮的单击事件进行反应
}
///GUI.Label (Rect(10,120,100,20),GUI.tooltip); //GUI工具提示
}



标签控件向用户显示某些信息,不能交互。直接声明内容即可。
e.g.
GUI.Label(Rect(25,25,100,30),"This is a label");

按钮控件 显示信息,典型交互性控件。
声明语句定义在If语句中,点击后执行的语句放置在if语句体中。
RepeatButton 当鼠标左键按下并保持时,if语句中保持持续执行,直到释放鼠标后才停止执行。

文本输入框    
e.g. 
#pragma strict
var text : String ;
function OnGUI() {
text = GUI.TextField(Rect(140,130,100,40),text);//输入后返回
}

开关控件
e.g.
#pragma strict
var toggleBool = true; //要么开要么关
function OnGUI ( ) {
toggleBool = GUI.Toggle (Rect(140,170,100,30), toggleBool, "Toggle");
}

水平滑块或竖直滑块
e.g.
#pragma strict
var hSlideValue : float = 0.0 ; //引用或保存滑块位置 
function OnGUI ( ) {
 hSlideValue = GUI.HorizontalSlider(Rect(140,210,100,30),  hSlideValue, 0 , 10);
//保持滑块在滑动条上的输出值。//定义位置,滑块位置变量, 开始和结束位置代表的浮点数值
toggleBool = GUI.Toggle (Rect(10*hSlideValue,170,100,30), toggleBool, "Toggle");
}



工具条控件
e.g.
#pragma strict
var toolbarInt = 0; 
//记录工具栏的当前哪一个按钮被激活,0为第一个按钮(可以初始化),跟踪按钮单击状态
var toolbarStrings : String [] = ["Toolbar1", "Toolbar2", "Toolbar3"];
//定义按钮的数量以及显示信息

function OnGUI ( ) {
toolbarInt = GUI.Toolbar ( Rect (140, 25, 250, 30), toolbarInt, toolbarStrings);
//记录工具条的返回值
}

选择网格控件
类似多行工具条控件
e.g.
#pragma strict
var selectionGridInt : int = 0;
//记录状态并且跟踪
var selectionStrings : String[] = ["Grid 1", "Grid 2", "Grid 3", "Grid 4", "Grid 5"];
function OnGUI ( ) {
selectionGridInt = GUI.SectionGrid ( Rect (140, 25, 250, 30), selectionGridInt, selectionStrings, 2);
//第四个参数为选择网络控件的列数(自动缩放)
}

控件发生了更新,检测返回bool值
function OnGUI () {
if(GUI.changed)
{
print("某些控件发生更新");

if(toolbarInt == 0)
print ("工具条的第一个按钮被点击");
}
}


以上的矩形位置-》手动定位

自动定位控件  --》 GUILayout
e.g.
function OnGUI (  ) {
GUILayout.Button("This is a GUILayout Button");
//尺寸按照文字内容自动定义位置
}

群组视图控件
相当于一个容器容纳所有控件(控件相对于组的位置定位)
在组中的控件,必须定义在组的声明内
function OnGUI ( ) {
GUI.BeginGroup(Rect(20,30,200,100));   //可以把组看成一个大控件
//GUI.BeginGroup(Rect(Screen.width/2 - 50, Screen.height/2 -50,500,500)); 
…………//其他组中的控件的定义
GUI.EndGroup();
}
使用组时,同时可以使用组的嵌套
//通过此实现能量条


GUI Skin & 自定义风格组件
e.g.
#pragma strict
function OnGUI ( ) { 
GUI.Buttion(Rect(10,10,180,20),"This is a Button","toggle");
//按钮,外观显示是开关控件的风格
GUI.Label( Rect (0,0,200,100), "This is a Label with box style", "box");
}

GUIStyle

e.g.
#pragma strict
var buttonStyle : GUIStyle;
function OnGUI ( ) { 
GUI.Buttion(Rect(10,10,180,20),"This is a Button",buttonStyle);
}
在属性编辑器中编辑GUIStyle

GUISkin
多个GUIStyle组合集中使用
创建一个GUISkin
e.g.
#pragma strict
var mySkin :GUISkin
function OnGUI ( ) { 
GUI.skin = mySkin;
GUI.Buttion(Rect(10,10,180,20),"This is a Button with skin");
GUI.skin = null;
GUI.Buttion(Rect(10,60,180,20),"This is a Button with default skin");
}


GUILayout控件
e.g.
#pragma strict
function Start(){
}
function Update(){
}
function OnGUI()
{
GUILayout.BeginArea(Rect(Screen.width/2,Screen.height/2,500,500)); //相当于一个容器
GUILayout.BeginHorizontal(); //控件在水平方向自动排列
GUILayout.Button("This is a GUILayout Button");
GUILayout.Button("This is a another GUILayout Button");
GUILayout.BeginVertical();//垂直布局
GUILayout.Box("This is a GUILayout Box");
GUILayout.Space(120);//间距
sliderValue = GUILayout.HorizontalSlider(sliderValue,0.0,10.0, GUILayout.Width(100)//定义控件的长度);
GUILayout.EndVertical();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}



动态窗口控件
使用回调函数来实现功能
e.g.
#pragma strict
var windowShoworNot: boolean = true ;
var windowRect : Rect = Rect (20,20120,50);
//窗口可以拖动的,接受位置变量

function OnGUI ( ) {
windowShoworNot = GUI.Toggle(Rect(10,100,20),windowShoworNot,"显示与否");//接收状态
if(windowShoworNot){ //点击了才能显示
windowRect = GUI.Window(0,windowRect,MyWindowFunction,"My Window" );
//变量接收窗口的位置,
//ID,位置&尺寸,窗口回调函数,窗口名称
}
}
function MyWindowFunction (windowID : int ) {
if(GUI.Button(Rect(10,10,100,20),"Button in Window"))
print("Click the button in the window.");
GUI.DragWindow(Rect(0,0,10000,10000));//拖动窗口(范围)
}




0 0
原创粉丝点击