unity学习

1.父子关系:我们可以将在层次视图上创建两个物体,将其中一个物体拉到另一个物体上面,这是被拉的物体就成了儿子,儿子动父亲可以不动,父亲动儿子跟着动。
2.材质问题:我们可以在项目视图里新建材质球,根据材质球改变物体材质,贴图可以直接拖到物体上。
3.灯光:我们根据需要选择不同的灯光,灯光效果,颜色,有无阴影等都可以进行设置

4.让游戏视图匹配到场景视图,gameobject里面的allgn with view可以实现。

5.游戏运行情况下对物体进行操作是没有用的,运行结束后物体又会回到一开始的样子。

1.设置javascript语句让物体进行运动,并用按钮确定运动状态,将物体运动状态的变化反映到界面上。
代码如下:
#pragma strictvar translatespeed=20;var rotatespeed=1000;function OnGUI(){ if(GUI.Button(Rect(10,10,70,30),"向左旋转")){ transform.Rotate(Vector3.up*Time.deltaTime*(-rotatespeed));}if(GUI.Button(Rect(170,10,70,30),"向右旋转")){ transform.Rotate(Vector3.up*Time.deltaTime*(rotatespeed));}if(GUI.Button(Rect(90,10,70,30),"向前移动")){ transform.Translate(Vector3.forward*Time.deltaTime*(translatespeed));}if(GUI.Button(Rect(90,50,70,30),"向后移动")){ transform.Translate(Vector3.forward*Time.deltaTime*(-translatespeed));}if(GUI.Button(Rect(10,50,70,30),"向左移动")){ transform.Translate(Vector3.right*Time.deltaTime*(-translatespeed));}if(GUI.Button(Rect(170,50,70,30),"向右移动")){ transform.Translate(Vector3.right*Time.deltaTime*(translatespeed));}GUI.Label(Rect(250,10,200,30),"模型的位置"+transform.position);GUI.Label(Rect(250,50,200,30),"模型的旋转"+transform.rotation);}function Start () {}function Update () {}

//OnGUI用于绘制GUI界面组件;GUI.button()表示设置一个按钮,返回true的时候表示按钮被按下。;GUI.label()设置一个文本框
transform为当前绑定模型的变换对象 transform.Rotate()设置模型旋转; transform.Translate()设置模型平移
Time.deltaTime:该数值为一个只读属性,不可修改,表示完成最后一帧的时间,单位为秒
Vector3:标志一个模型移动或者旋转的方向。 Rect:规定一个矩形区域,用于显示控件

第三章  GUI游戏界面的学习
1.Label控件
#pragma strictvar str:String; //表示接受外部赋值字符串var imageTexture:Texture;private var imageWidth:int;private var imageHeight:int;private var screenWidth:int;private var screenHeight:int;function Start () {screenWidth=Screen.width;screenHeight=Screen.height;imageWidth=2000;imageHeight=300;}function OnGUI(){ GUI.Label(Rect(100,10,100,30),str);GUI.Label(Rect(100,40,100,30),"当前屏幕高"+screenHeight);GUI.Label(Rect(100,80,100,30),"当前屏幕宽"+screenWidth);GUI.Label(Rect(100,120,imageWidth,imageHeight),imageTexture); //将贴图展示到屏幕上}function Update () {}

思考:1.我们设置变量时使用var str:String可以接收外部赋值字符串;代码里的图片也是,在unity界面里直接拖动到相应的地方就可以了。
          2.我们在此处练习使用了Lable标签,其可以在游戏界面上以文本的形式输出一段字符串信息,还可以进行贴图

2.Button组件

#pragma strict
var buttonTexture:Texture2D;
private var str:String;
private var frameTime:int;


function Start () {
	str="请您点击按钮";
}

function OnGUI(){

  if(GUI.Button(Rect(10,50,900,100),buttonTexture)){
     str="您点击了图片按钮";
}

GUI.color=Color.green;
GUI.backgroundColor=Color.red;

if(GUI.Button(Rect(10,200,70,30),"文字按钮")){
  str="您点击了文字按钮";
}

GUI.color=Color.yellow;
GUI.backgroundColor=Color.black;

if(GUI.RepeatButton(Rect(10,250,100,30),"按钮按下中")){
   str="按钮按下的时间"+frameTime;
   frameTime++;

}



  GUI.Label(Rect(10,10,90,30),str);



}

function Update () {
	
}

思考:1.Button组件可以用来判断用户在程序中的一些操作行为(可以监听用户是否点击了按钮)
          2.按钮一共有三种状态,未点击状态,击中状态,点击后状态。3.按钮一般分为图片按钮和普通按钮,图片按钮可以设置按钮的背景图片。
 

3.TextField控件

#pragma strict
private var editUsername:String;
private var editPassword:String;
private var editShow:String;


function Start () {
   editShow="请您输入正确的用户名和密码";
   editUsername="请输入用户名";
   editPassword="请输入密码";
}

function OnGUI(){
GUI.Label(Rect(10,10,Screen.width,30),editShow);
if(GUI.Button(Rect(10,120,100,50),"登录")){
 editShow="您输入的用户名为"+editUsername+"您输入的密码为"+editPassword;
}
//编辑框提示信息
GUI.Label(Rect(10,40,50,30),"用户名");
GUI.Label(Rect(10,80,50,30),"密码");

//创建输入框并获取输入框的信息
editUsername=GUI.TextField(Rect(60,40,200,30),editUsername,15);
editPassword=GUI.PasswordField(Rect(60,80,200,30),editPassword,"*"[0],15);
}

思考:1.我们用GUI.TextField()显示输入框,该方法的返回值是用户输入的字符串信息。使用GUI.PasswordField()方法,可以将用户输入的信息显示为任意字符串。后面的参数“*”[0]用来将输入的字符串显示为*******

4.ToolBar组件

作用:用于创建工具栏,并且用tap的形式来展现,选择其中任意一项后即可返回所选项的ID。一个工具栏可以放多个按钮,按钮可以用贴图的形式进行展现,通过不同按钮来切换界面显示的内容。

#pragma strict
private var select:int;
private var barResource:String[];

private var selecttoggle0:boolean;
private var selecttoggle1:boolean;


function Start () {
  select=0;
  barResource=["第一个工具栏","第二个工具栏","第三个工具栏","第四个工具栏"];

  selecttoggle0=false;
  selecttoggle1=false;
}

function OnGUI(){
var oldselect=select; //备份上一次工具栏选择的ID
//重新计算本次工具栏选择的ID
select =GUI.Toolbar(Rect(10,10,barResource.length*100,30),select,barResource);
//如果两次选择的是不同的工具栏,将选择按钮全部释放掉,此处的选择按钮是指单选的按钮
if(oldselect!=select){
  selecttoggle0=false;
  selecttoggle1=false;
}
switch(select){
 case 0:
  selecttoggle0=GUI.Toggle(Rect(10,50,150,30),selecttoggle0,"第一个工具栏单项选择-1");
  selecttoggle1=GUI.Toggle(Rect(10,80,150,30),selecttoggle1,"第一个工具栏单项选择-2");
 break;

case 1:
   selecttoggle0=GUI.Toggle(Rect(10,50,150,30),selecttoggle0,"第二个工具栏单项选择-1");
   selecttoggle1=GUI.Toggle(Rect(10,80,150,30),selecttoggle1,"第二个工具栏单项选择-2");
break;

case 2:
   selecttoggle0=GUI.Toggle(Rect(10,50,150,30),selecttoggle0,"第三个工具栏单项选择-1");
   selecttoggle1=GUI.Toggle(Rect(10,80,150,30),selecttoggle1,"第三个工具栏单项选择-2");
break;

case 3:
   selecttoggle0=GUI.Toggle(Rect(10,50,150,30),selecttoggle0,"第四个工具栏单项选择-1");
   selecttoggle1=GUI.Toggle(Rect(10,80,150,30),selecttoggle1,"第四个工具栏单项选择-2");
break;
}

}

5.Slide控件
用法:此控件由滑块和滑动条组成。分为水平滑动条和垂直滑动条。我们通常使用滑动条来调节音量或者颜色。
#pragma strict
var verticalvalue:int=0;
var horizontalvalue:float=0.0f;




function Start () {
 
}

function OnGUI(){
  verticalvalue=GUI.VerticalSlider(Rect(25,25,30,100),verticalvalue,100,0);
  horizontalvalue=GUI.HorizontalSlider(Rect(50,25,100,30),horizontalvalue,0.0f,100.0f);
  GUI.Label(Rect(10,150,Screen.width,30),"纵向滑动条当前进度:"+verticalvalue+"%");
  GUI.Label(Rect(10,180,Screen.width,30),"横向滑动条当前进度"+horizontalvalue+"%");

}

6.ScrollView控件

用法:scrollview控件可以设定一个滚动显示区域,如果横向或者纵向的GUI控件超出了其显示区域,视图下方或右方将会出现滚动条。(防止游戏界面的GUI控件过多超出了屏幕的显示范围)

#pragma strict

var scrollPosition:Vector2;

function Start () {
   scrollPosition[0]=50;
   scrollPosition[1]=50;
}

function OnGUI(){
 scrollPosition =GUI.BeginScrollView(Rect(0,0,200,200),scrollPosition,Rect(0,0,Screen.width,300),true,true);
GUI.Label(Rect(100,40,Screen.width,30),"测试滚动视图,测试滚动视图,测试滚动视图");
GUI.EndScrollView();

}

补充:1.Start()方法用于设置默认情况下滚动条的位置,数组scrollPosition【0】表示滚动视图横向滚动滑块位置,数组scrollPosition表示滚动视图纵向滚动滑块的位置。GUI.BeginScrollView()方法用于开始滚动视图,该方法的第一个参数用于设置滚动显示视图的范围,第二个参数用于设置视图滚动条的起始位置,第三个参数用于设置滚动整体显示范围(这里需要说明一下滚动视图的显示范围必须小于游戏视图整体范围),第四个参数和第五个参数为true时,表示内容超过显示范围后显示滚动条,否则不显示滚动条。  开始滚动方法和结束滚动方法必须成对出现,否则会报错。

7.群组视图
用处:可以将多个视图全部放到一个群组当中。将视图放到群组后,所有视图的坐标都是相对坐标,它是相对群组视图左上角的坐标。
#pragma strict
var viewTexture0:Texture2D;


function Start () {

}

function OnGUI(){
GUI.BeginGroup(new Rect(10,50,200,400));  //此方法可以设定群组视图的区域,在该区域内可以添加任意控件

GUI.DrawTexture(Rect(10,20,200,150),viewTexture0);
GUI.Label(Rect(10,150,100,40),"群组视图");

GUI.Button(Rect(10,190,100,40),"按钮");
GUI.EndGroup();
}

8.窗口
用处:视图都需要窗口来显示,我们可以将窗口理解为视图的父类。游戏界面可以看作是由若干个窗口组成,窗口又由若干个视图组成。
#pragma strict
private var window0:Rect=Rect(20,20,200,200);
private var window1:Rect=Rect(250,20,200,200);



function OnGUI(){
  //注册两个窗口
GUI.Window(0,window0,oneWindow,"第一个窗口"); 我们使用此方法来注册窗口,该方法的第一个参数表示窗口的ID,第二个参数表示窗口显示的区域,第三个参数表示一个回掉方法名称,窗口中包含的所有视图控件都将写入这个方法,第四个方法表示窗口的标题名称。
GUI.Window(1,window1,twoWindow,"第二个窗口");
}

function oneWindow(windowID){
 GUI.Box(Rect(10,50,150,50),"这里窗口的ID是"+windowID);
 if(GUI.Button(Rect(10,120,150,50),"普通按钮")){
  Debug.Log("窗口ID="+windowID+"按钮被点击");
}
}

function twoWindow(windowID:int){
   GUI.Box(Rect(10,50,150,50),"这里窗口的ID是"+windowID);
 if(GUI.Button(Rect(10,120,150,50),"普通按钮")){
  Debug.Log("窗口ID="+windowID+"按钮被点击");
}
}

9.GUI SKin


二:GUILayout

用来进行游戏界面的布局,GUILayout无需设定显示区域,系统会自动计算控件的显示区域,并且保证不会重叠。
1.通过两个类型的按钮,感受GUI和GUILayout的区别
#pragma strict
var addstr:String ="添加测试字符串";
function Start () {
	
}

function Update () {
	
}
function OnGUI(){

 if(GUI.Button(Rect(50,50,100,30),addstr)){
 addstr+=addstr;
}

if(GUILayout.Button(addstr)){   //我们不需要设置按钮的位置,并且按钮的大小会随着字体的变大而变大
  addstr+=addstr;
}

}

2.用GUILayoutOption进行界面布局设置

#pragma strict
function OnGUI(){
 GUILayout.Button("设置布局按钮宽度为300,高度为30",GUILayout.Width(300),GUILayout.Height(30));
 GUILayout.Button("设置宽度不等于最宽按钮",GUILayout.ExpandWidth(false));
 GUILayout.Button("设置宽度等于最宽按钮",GUILayout.ExpandWidth(true));
}

//此时我们并没有设置按钮的显示区域,他们默认将以垂直线性布局的形式展现。
//我们利用GUILayoutOption来设定控件的显示区域,它可以直接设置某控件的宽度和高度等参数
//GUILayoutOption可填充区域的参数。
1.GUILayout.Width()  设置布局宽度
2.GUILayout.Height()  设置布局高度
3.GUILayout.MinWidth()  设置布局最小宽度
4.GUILayout.MinHeight()  设置布局最小高度
5.GUI.MaxWidth()设置布局最大宽度
6.GUI.MaxHeight()设置布局最大高度
7.GUI.ExpandWidth()设置布局整体宽度
8.GUI.ExpandHeight()设置布局整体高度

3.线性布局
分为水平线性布局和垂直线性布局,默认是使用垂直线性布局。无论是水平线性布局还是垂直线性布局,都可以使用嵌套的形式来制作游戏界面。
#pragma strict
var texture:Texture2D;
function OnGUI(){
 GUILayout.BeginHorizontal();   //我们用这个语句开始了水平布局
GUILayout.Box("开始水平布局");
GUILayout.Button("按钮");
GUILayout.Label("文本框");
GUILayout.TextField("输入框");
GUILayout.Box(texture);
//结束水平线性布局
GUILayout.EndHorizontal();

GUILayout.BeginVertical();   //我们用这个语句开始了垂直布局
GUILayout.Box("开始垂直布局");
GUILayout.Button("按钮");
GUILayout.Label("文本框");
GUILayout.TextField("输入框");
GUILayout.Box(texture);
//结束垂直线性布局
GUILayout.EndVertical();
}

4.控件偏移
我们利用控件偏移实现修改布局中两个相连控件的距离。
#pragma strict

function OnGUI(){
GUILayout.BeginArea(Rect(0,0,200,60));  //开始一个显示区域
GUILayout.BeginHorizontal();  //开始最外层横向布局

GUILayout.BeginVertical();    //嵌套一个纵向布局
GUILayout.Box("Test1");        
GUILayout.Space(10);           //两个Box控件中间偏移10像素
GUILayout.Box("Test2");
GUILayout.EndVertical();
GUILayout.Space(20);        //两个纵向布局中间偏移20像素

GUILayout.BeginVertical();
GUILayout.Box("Test3");
GUILayout.Space(10);
GUILayout.Box("Test4");
GUILayout.EndVertical();

GUILayout.EndHorizontal();
GUILayout.EndArea();
}

5.对齐方式
一般情况下,游戏窗口都是矩形的,而矩形有四个角。如果要让控件分别对齐在这四个角上,就需使用FlexibleSpace()进行偏移。
#pragma strict

function OnGUI(){
GUILayout.BeginArea(Rect(0,0,Screen.width,Screen.height));  //开始一个显示区域
GUILayout.BeginHorizontal();  //开始最外层横向布局
GUILayout.BeginVertical();

GUILayout.Box("Test1");
GUILayout.FlexibleSpace();   //两个Box控件上下对齐
GUILayout.Box("Test2");
GUILayout.EndVertical();

GUILayout.FlexibleSpace();   //两个竖向布局之间左右对齐

GUILayout.BeginVertical();
GUILayout.Box("Test3");

GUILayout.FlexibleSpace();
GUILayout.Box("Test4");
GUILayout.EndVertical();
GUILayout.EndHorizontal();
GUILayout.EndArea();
}

6.实例----添加和关闭窗口
目标:制作一个可以动态添加和关闭的窗口    

实现:我们将窗口的属性存储在数组链表中(无论是添加窗口还是关闭窗口,实际上就是在维护这个窗口的数组链表),然后使用OnGUI()方法遍历窗口并将窗口绘制在屏幕当中。

#pragma strict

var winArrayList=new ArrayList();

var icon:Texture;

function Start(){
winArrayList.Add(Rect(winArrayList.Count*100,50,150,100));
}

function OnGUI(){
var count=winArrayList.Count;
for(var i=0;i<count;i++){
  winArrayList[i]=GUILayout.Window(i,winArrayList[i],AddWindow,"窗口ID:"+i);
}
}

function AddWindow (windowID:int){
GUILayout.BeginHorizontal();
GUILayout.Label(icon,GUILayout.Width(50),GUILayout.Height(50));

GUILayout.Label("这是一个全新的窗口");

GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();

if(GUILayout.Button("添加新窗口")){
winArrayList.Add(Rect(winArrayList.Count*100,50,150,100));
}

if(GUILayout.Button("关闭新窗口")){
winArrayList.RemoveAt(windowID);
}

GUILayout.EndHorizontal();
GUI.DragWindow(Rect(0,0,Screen.width,Screen.height));
}

7.2D贴图和帧动画
2D贴图可以由GUI绘制或者是将贴图以材质的形式绘制在游戏对象上。

帧动画是使用若干个静态图片以一定的时间一帧一帧的在屏幕中切换播放。

#pragma strict

private var texSingle:Texture2D;
private var texAll:Object[];

function OnGUI(){
if(GUI.Button(Rect(0,10,100,50),"加载一张贴图")){
   if(texSingle==null){
   texSingle=Resources.Load("single/0");
}}

if(GUI.Button(Rect(0,130,100,50),"加载一组贴图")){
   if(texAll==null){
   texAll=Resources.LoadAll("Textures");
}
}

if(texSingle!=null){
  GUI.DrawTexture(Rect(110,10,120,120),texSingle,ScaleMode.StretchToFill,true,0);
}

if(texAll!=null){
for(var i=0;i<texAll.length;i++){
 GUI.DrawTexture(Rect(110+i*120,130,120,120),texAll[i],ScaleMode.StretchToFill,true,0);
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值