Unity3D⼊门之JavaScript
刚刚接触Unity3D游戏引擎,这⾥做点学习笔记。下⾯是我建⽴的简单场景,左侧的Hierarchy(层次)视图⾥显⽰了场景中所有游戏对象,这些基本对象可以从Create下拉菜单⾥创建。当你点击某个对象,⽐如⽴⽅体Cube时,在右侧Inspector(监视)中可以看到Cube对象的详细信息,⽐如它的位置信息、表⾯材质信息,然后可以在其中修改。下⽅的Project视图中的Assets(资源)⾥显⽰了游戏中所有资源,这⾥注意与Hierarchy视图⾥对象的区别,我们的游戏脚本放在Assets⾥。刚开始学习Unity3D,我会反感那些脚本,总希望不需要写代码就能创建⾃⼰的游戏,但后来发现,在Unity3D中不写脚本是不可能的,脚本完全就是⼀切的逻辑。
要在Scene(场景)视图⾥创建物体,可以在左侧的Hierarchy视图⾥点击Create下拉菜单,选择创建即可,我这⾥创建了⼀个平⾯Plane、两个⽴⽅体Cube和MyCube、⼀个摄像机MainCamera、⼀个圆柱体Cylinder。在Scene中,按住ALT键,⽤⿏标就可以旋转整个场景;按住⿏标中键,可以拖动场景视图;⽤⿏标滚轮可以缩放视图。
要给场景中的物体上⾊,⽐如平⾯Plane,只需要点击对象Plane,然后在右侧Inspector中做些设置即可。那么如何改变物体表⾯的颜⾊了,是直接修改吗?不是,有点图像学基础的都知道,要改变表⾯颜⾊,实际要改变的是物体的表⾯材质,材质中可以包含各种复杂信息。要创建材质,可以在Assets视图中点击右键,选择Create->Material即可,然后在Inspector中修改Main Color属性即可。最后点击Plane对象,在右侧点击Materials ⾥Element0最右边的⼩圈,选择想要的材质,也可以直接把Assets⾥的材质拖放到Element0上即可。
在Create⾥只能创建⼀些基本模型,下⾯学习⽤JavaScript脚本在场景中创建游戏界⾯元素,⽐如按钮、⽂本框、图⽚等。我看的书是《Unity3D 游戏开发》,最开始讲的就是JavaScript,后⾯会讲C#作为脚本语⾔。下⾯是我⾃⼰的⼀个练习的截图。
界⾯有点乱,也懒得改了。最上⾯的是⼏个旋转视图的按钮,左边绿⾊的⽂字,接着是⼀幅图⽚、滑动条。下⽅是输⼊框、图⽚按钮。⽐较显眼的是3个窗⼝,窗⼝⾥的元素坐标都是相对的。我在代码中都有详细的注释,也不需要做什么说明了。要使⽤脚本,先在Assets⾥创建javaScript,打开编辑器复
制我的代码。然后点击左侧的Main Camera对象,把脚本⽂件拖动到右侧中即可。可能会出现编译错误,⽆法运⾏,那是因为我没有提供材质、图⽚。点击Main Camera对象,点击右侧Inspector⾥的脚本⽂件,展开它的属性,会看到Image Texture、Button Texture这些变量,凡是在JavaScript⾥的public修饰的变量就会出现在这⾥,要给这些变量赋值才可以正常运⾏。
我这⾥需要赋值的是Image Texture、Button Texture、View Texture 0,这三个都是图⽚,从Assets⾥拖放三个图⽚赋给它们即可。下⾯还有⼀个My Skin变量,是Unity⾥的⽪肤,⽐如决定按钮的颜⾊,可以被很多按钮使⽤,也是在Assets⾥直接创建即可。对于Unity3D⾥的GUI控件,简单的有Label(⽂本)、Button(按钮)、TextField(⽂本框)、ToolBar(⼯具栏)、Slider(滑块)、ScrollView(滚动显⽰区域)等。
组视图(Group View控件):将多个视图放在⼀个组中,组视图⾥的坐标都是相对的。修改组视图坐标,⾥⾯所有元素坐标都会变化。
GUILayout:相对与GUI控件,GUILayout控件的创建不需要设定显⽰区域,不指定具体坐标,可以动态适应窗⼝。⽐如绘制⼀个按钮,如果⽤GUI 控件,需要指定按钮的长度,如果按钮上的⽂字长度超出了按钮长度,超出部分便⽆法显⽰了。如果使⽤GUILayout,便可以动态⾃适应。
帧动画:在加载图⽚动画时,我使⽤了Resources.Load()这样的⽅法,注意需要在Assets⾥创建Reso
urces⽬录,然后把动画资源放在其中。
刚体(Rigidbody):在Unity中可以给对象添加这个属性,⽐如⽴⽅体,添加后的⽴⽅体可以和其它物体产⽣碰撞反应,变成了⼀个具有物理属性的物体,⽐如可以⾃由裸体运动。要添加这个属性,先选择对象,然后在菜单栏⾥选择Component->Physics->Rigidbody即可。
1 #pragma strict
2
3 var str1 : String;//外部字符串
4 var imageTexture : Texture;//外部贴图
5 var buttonTexture : Texture2D;//按纽图⽚
6 var viewTexture0 : Texture2D;
7 var TranslateSpeed = 20;//模型移动速度
8 var RotateSpeed = 1000;//模型旋转速度
9
10 private var username : String;//⽤户名
11 private var password : String;//密码
12
13 private var imageWidth : int;//图⽚宽度
14 private var imageHeight : int;
15 private var screenWidth : int;//屏幕宽度
16 private var screenHeight : int;
18 private var select : int;//⼯具栏选择按钮的ID
19 private var barResource : String[];//⼯具栏按钮字符串
20
21 var verticalValue : int = 0;//纵向滑动条数值
22 var horizontalValue : float = 0.0f;//横向滑动条数值
23
24 var scrollPosition : Vector2;//滚动条位置
25
26 var mySkin : GUISkin;//⾃定义⽪肤
27
28 private var choose : boolean = false;//单选控件是否选中
29
30 //默认窗⼝位置
31 private var window0 : Rect = Rect(770,100,250,100);
32 private var window1 : Rect = Rect(600,200,400,300);
33
34 var winArrayList = new ArrayList();//⽤于存储窗⼝
35
36
37 private var animUp : Object[];//动画数组
javascript说明
38 private var animDown : Object[];
39 private var animLeft : Object[];
40 private var animRight : Object[];
41 private var map : Texture2D;//地图贴图
42 private var tex : Object[];//当前⼈物动画
43 private var x : int = 400;//⼈物的x坐标
44 private var y : int = 400;//⼈物的y坐标
45 private var nowFrame : int;//帧序列
46 private var mFrameCount : int;//帧总数
47 private var fps : float = 10;//⼀秒多少帧
48 private var time : float = 0;//限制帧的时间
49
50 //程序开始函数,变量初始化
51 function Start () {
52    screenWidth = Screen.width;
53    screenHeight = Screen.height;
54    imageWidth = imageTexture.width;
55    imageHeight = imageTexture.height;
56    str1 = "点击click";
57    username = "";
58    password = "";
59    select = 0;
60    barResource = ["Toolbar1","Toolbar2","Toolbar3"];
61    scrollPosition[0] = 50;
62    scrollPosition[1] = 50;
63
64    //添加⼀个窗⼝
65    winArrayList.Add(Rect(winArrayList.Count*100,400,150,100));
66
67    //得到帧动画中的所有图⽚资源
68    animUp = Resources.LoadAll("up");
69    animDown = Resources.LoadAll("down");
70    animLeft = Resources.LoadAll("left");
71    animRight = Resources.LoadAll("right");
72    tex = animUp;
73 }
74
75 //每⼀帧都要执⾏的更新
76 function Update () {
77
78 }
79
80 //绘制GUI界⾯组件
81 function OnGUI()
83    //设置GUI背景颜⾊
84    GUI.backgroundColor = d;
85    //设置⼀个按钮,规定⼀个矩形区域
86    if (GUI.Button(Rect(10,10,70,30), "向左旋转"))
87    {
88        //transform为当前绑定模型的变换对象,设置模型旋转
89        //Time.deltaTime:表⽰完成最后⼀帧的时间,单位为秒
90        transform.Rotate(Vector3.up * Time.deltaTime * (-RotateSpeed));
91    }
92    if (GUI.Button(Rect(170,10,70,30), "向右旋转"))
93    {
94        transform.Rotate(Vector3.up * Time.deltaTime * RotateSpeed);
95    }
96    if (GUI.Button(Rect(90,10,70,30), "向前移动"))
97    {
98        transform.Translate(Vector3.forward * Time.deltaTime * TranslateSpeed);
99    }
100    if (GUI.Button(Rect(90,50,70,30), "向后移动"))
101    {
102        transform.Translate(Vector3.back * Time.deltaTime * TranslateSpeed);
103    }
104    if (GUI.Button(Rect(10,50,70,30), "向左移动"))
105    {
106        transform.Translate(Vector3.left * Time.deltaTime * TranslateSpeed);
107    }
108    if (GUI.Button(Rect(170,50,70,30), "向右移动"))
109    {
110        transform.Translate(Vector3.right * Time.deltaTime * TranslateSpeed);
111    }
112
113    //显⽰⽂字信息Label
114    lor = ;
115    GUI.Label(Rect(250,10,200,30), "模型的位置" + transform.position);//设置⼀个⽂本框116    GUI.Label(Rect(250,50,200,30), "模型的旋转" + ation);
117    GUI.Label(Rect(450,10,200,30), "屏幕宽度:" + screenWidth);
118    GUI.Label(Rect(450,50,200,30), "屏幕⾼度:" + screenHeight);
119
120    //显⽰图⽚Label
121    lor = Color.white;
122    GUI.Label(Rect(600,10,imageWidth,imageHeight), imageTexture);
123
124    //显⽰图⽚按钮Button
125    GUI.backgroundColor = Color.white;
126    GUI.Button(Rect(250,90,buttonTexture.width,buttonTexture.height),buttonTexture); 127
128    //显⽰⽂本框TextField
129    GUI.backgroundColor = Color.white;
130    username = GUI.TextField(Rect(0,90,100,30),username,15);
131    password = GUI.PasswordField(Rect(120,90,100,30),password,"?"[0],15);
132
133    //显⽰⼯具栏Toolbar
134    select = GUI.Toolbar(Rect(0,140,barResource.Length * 100, 30),select,barResource); 135    switch(select)
136    {
137        case 0:
138            GUI.Label(Rect(10,180,200,30),"X");
139            break;
140        case 1:
141            GUI.Label(Rect(10,180,200,30),"Y");
142            break;
143        case 2:
144            GUI.Label(Rect(10,180,200,30),"Z");
145            break;
146        default:
147            break;
148    }
149
150    //显⽰滑块Slider
151    verticalValue = GUI.VerticalSlider(Rect(750,10,30,100),verticalValue,99,0);
152    horizontalValue = GUI.HorizontalSlider(Rect(820,10,100,30),horizontalValue,0.0f,100.0f);
153    GUI.Label(Rect(780,20,18,100), "纵向进度" + verticalValue);
154    GUI.Label(Rect(820,30,100,20), "横向进度" + horizontalValue);
155
156    //开始组视图,将多个组件放在⼀个组中,组中组件坐标都是相对坐标;修改组坐标,其中所有坐标都会改变157    GUI.BeginGroup(new Rect(10,230,200,400));
158    GUI.DrawTexture(Rect(10,20,viewTexture0.width,viewTexture0.height),viewTexture0);
159    GUI.Label(Rect(10,70,100,40),"组视图1");
160    GUI.Label(Rect(10,100,100,40),"按钮");
161    GUI.EndGroup();
162
163    //注册窗⼝
164    GUI.Window(1001,window0,oneWindow,"第⼀个窗⼝");
165    GUI.Window(1002,window1,twoWindow,"GUILayout");
166
167    //⾃定义⽪肤
168    GUI.skin = mySkin;
169    GUI.Button(Rect(300,230,120,30),"⾃定义⽪肤按钮");
170    GUI.Toggle(Rect(300,270,100,30),choose,"单项选择");
171    //⾃定义⽪肤风格组件Custom Styles
172    GUI.Button(Rect(450,230,120,30), "Custom0Button", "Custom0");
173    GUI.Button(Rect(450,270,120,30), "Custom1Button", "Custom1");
174
175    //遍历每个窗⼝,并加⼊视图
176    var count = winArrayList.Count;
177    for (var i = 0; i < count; i++)
178    {
179        winArrayList[i] = GUILayout.Window(i,winArrayList[i],AddWindow,"窗⼝ID:"+i);
180    }
181
182    //绘制帧动画
183    DrawAnimation(tex, Rect(x,y,32,48));
184    GUI.BeginGroup(new Rect(400,120,200,400));
185    //点击按钮移动⼈物
186    if (GUILayout.RepeatButton("向上"))
187    {
188        y-=2;
189        tex = animUp;
190    }
191    if (GUILayout.RepeatButton("向下"))
192    {
193        y+=2;
194        tex = animDown;
195    }
196    if (GUILayout.RepeatButton("向左"))
197    {
198        x-=2;
199        tex = animLeft;
200    }
201    if (GUILayout.RepeatButton("向右"))
202    {
203        x+=2;
204        tex = animRight;
205    }
206    GUI.EndGroup();
207 }
208
209 //窗⼝1
210 function oneWindow(windowID: int)
211 {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。