基于Unity 3D的游戏的设计与实现天使投资
摘要:Unity 3D是一款基于3D的跨多平台的游戏引擎,本文在介绍Unity 3D 引擎的基础上,以一款《保龄球游戏》为例,介绍了Unity 3D创建材质、预置物体、脚本的方法,详细分析了保龄球击落保龄球瓶的发射、消失、按钮、开始等JavaScript脚本的编写方法与技巧。
关键词:Unity 3D;游戏开发;保龄球游戏;JavaScript
1 Unity 3D引擎简介
随着掌握上电子设备不断更新发展,现在进行游戏开发已经变得更快更容易。过去要成为程序员还需要进行大学教育,牢记一堆源代码的卡片,用一间房间那么大的计算机去编写一段简单的游戏代码。现在的游戏开发工具不仅具有数字分布功能,还灵活性很强并且便宜,比如Unity 3D,在不久的未来游戏开发者全民化将成为现实。Unity 3D除了可以在多种平台开发并运行,还自带了丰富的资源包,如人物控制,特效渲染,常用脚本,天空盒,面向手机平板电脑类型的系统开发资源包,另外还有地形、树、水、玻璃、粒子系统等资源包。本案例以Unity 4.0为例开发游戏。
2 《保龄球游戏》的设计与实现
游戏策划内容是:游戏由两个场景组成,第1个场景是初始界面设计2个按钮“开始”和“退出”,单击“开始”进入第2个场景的游戏界面,在保龄球游戏界面下方有3个按钮“重新开始”、“退出”、“音效”,单击鼠标左键发射保龄球,击倒前方的保龄球瓶,按A键主摄像机左移,D键右移,
W键前移,S键后移,Q键左转,R键右转,Z键向上转,C键向下转,当保龄球瓶全部击落到地面以下,屏幕会显示“恭喜过关~”,整个游戏结束。
其次,设计保龄球游戏脚本。在Unity3D中创建新项目,导入保龄球游戏场景的三维模型FBX文件,为场景中的保龄球瓶添加rigidbody刚体属性,设置其方体碰撞的属性,以免保龄球瓶穿过地面掉落,再创建一个保龄球并设置为预置物体。在Assets资源库中创建“faqiu”脚本,将该脚本拖放到Main Camera上,“faqiu”脚本如下:
function Start () { }
var speed:int=5; //定义speed是整数型变量
var newobject:Transform;//定义newobject:Transform
var fqshu:int=0; //定义fqshu是整数型变量
var xmshu:int=0; //定义xmshu是整数型变量
function Update (){//摄像机前后左右的平移功能
var x=Input.GetAxis("Horizontal")
*Time.deltaTime*speed; //水平移动摄像机
var z=Input.GetAxis("Vertical")
*Time.deltaTime*speed;//垂直移动摄像机
transform.Translate(x,0,z);//摄像机平移坐标
if(Input.GetButtonDown("Fire1")){
var n:Transform=Instantiate(newobject,transform.position,transform.rotation); var fwd:Vector3=transform.TransformDirection (Vector3.forward);//向前掷球
n.rigidbody.AddForce(fwd*2500); //加力
fqshu++;//发球数+1
gameObject.Find("掷球数").GetComponent(GUIText).text="发球:"+fqshu+" 消灭:"+ xmshu;
if(Input.GetKey(KeyCode.Q)){ transform.Rotate(0,-
25*Time.deltaTime,0,Space.Self);}
if(Input.GetKey(KeyCode.R)){ transform.Rotate(0,25*Time.deltaTime,0,Space.Self); }
if(Input.GetKey(KeyCode.C)){ transform.Rotate(-25*Time.deltaTime,0,0,Space.Self); }
if(Input.GetKey(KeyCode.Z)){ transform.Rotate(25*Time.deltaTime,0,0,Space.Self); }
保龄球发射后3秒后自动消失,XH.js脚本如下:
function Start () {Destroy(gameObject,3.0);}
将发射球的数量和消灭保龄球瓶的数量在屏幕中进行计数,计算消灭数的方式就是瓶子掉到了地面以下,y值小于0,实现xmshu+1,如果消灭数大于10,游戏结束。
Panduan.js判断脚本作为组件添加到保龄球瓶,其脚本如下:
function Start () { }
var fq:int;
var xm:int;
function Update( ) { //判断保龄球瓶是否击落到地下
if(gameObject.transform.position.y10){ //消灭数大于10显示"恭喜过关~"并停止发球
gameObject.Find("掷球数").GetComponent(GUIText).text="恭喜过关~";
gameObject.Find("Main Camera").GetComponent(faqiu).enabled=false;
gameObject.Find("地板").GetComponent(restart).enabled=true; }
Destroy(gameObject); //销毁物体 } }
在游戏窗口下方添加3个按钮――“退出”、“重新开始”、“音效”,button.js脚本赋给层级面板的地板物体,button.js脚本如下: function OnGUI(){
if(GUI.Button(Rect(10,300,60,30),"退出")){Application.Quit();} if(GUI.Button(Rect(100,300,80,30),"重新开始
")){Application.LoadLevel("保龄球"); }
if(GUI.Button(Rect(300,300,60,30),"音效")) audio.Pause();}
将mp3的音乐文件拷入预置文件夹中,为“地面”添加音乐组件,这样游戏开始时会播放音乐,按“音效”键可以关闭或开启音乐。
第三,设计游戏初始界面。在Hierarchy层级面板单击Create(创建)?GUI Texture(GUI纹理),创建“初始界面.Unity”。start.js脚本添加到初始界面场景的主摄像机,其脚本如下:
function OnGUI(){
if(GUI.Button(Rect(180,400,60,30),"退出")){Application.Quit();
//“退出”按钮坐标(180,400),大小6030像素,调用Quit程序 }
if(GUI.Button(Rect(280,400,60,30),"开始游戏
")){Application.LoadLevel("保龄球");
//“开始游戏”按钮坐标(280,400),大小6030像素,调用“保龄
球.unity”场景}}
最后,游戏的打包与发布。发布设置窗口中设置游戏打包到PC, Mac & Linux standard alone平台,将“初始界面.unity”场景执行顺序设置为0,“保龄
球.unity”场景执行顺序设置为1,单击Build and Run按钮,即可得到打包后的exe文件。至此,整个游戏开发完成。
3 结束语
Unity 3D是一项新的技术,它能最大程度上让游戏开发者的生活变得更美好更容易,使用Unity 3D后,你会觉得开发带有影视特效的游戏比以前更快更简单。