摘 要:Unity 3D是一款基于3D的跨多平臺(tái)的游戲引擎,本文在介紹Unity 3D引擎的基礎(chǔ)上,以一款《保齡球游戲》為例,介紹了Unity 3D創(chuàng)建材質(zhì)、預(yù)置物體、腳本的方法,詳細(xì)分析了保齡球擊落保齡球瓶的發(fā)射、消失、按鈕、開始等JavaScript腳本的編寫方法與技巧。
關(guān)鍵詞:Unity 3D;游戲開發(fā);保齡球游戲;JavaScript
中圖分類號(hào):TP317
1 Unity 3D引擎簡(jiǎn)介
隨著掌握上電子設(shè)備不斷更新發(fā)展,現(xiàn)在進(jìn)行游戲開發(fā)已經(jīng)變得更快更容易。過(guò)去要成為程序員還需要進(jìn)行大學(xué)教育,牢記一堆源代碼的卡片,用一間房間那么大的計(jì)算機(jī)去編寫一段簡(jiǎn)單的游戲代碼?,F(xiàn)在的游戲開發(fā)工具不僅具有數(shù)字分布功能,還靈活性很強(qiáng)并且便宜,比如Unity 3D,在不久的未來(lái)游戲開發(fā)者全民化將成為現(xiàn)實(shí)。Unity 3D除了可以在多種平臺(tái)開發(fā)并運(yùn)行,還自帶了豐富的資源包,如人物控制,特效渲染,常用腳本,天空盒,面向手機(jī)平板電腦類型的系統(tǒng)開發(fā)資源包,另外還有地形、樹、水、玻璃、粒子系統(tǒng)等資源包。本案例以Unity 4.0為例開發(fā)游戲。
2 《保齡球游戲》的設(shè)計(jì)與實(shí)現(xiàn)
游戲策劃內(nèi)容是:游戲由兩個(gè)場(chǎng)景組成,第1個(gè)場(chǎng)景是初始界面設(shè)計(jì)2個(gè)按鈕“開始”和“退出”,單擊“開始”進(jìn)入第2個(gè)場(chǎng)景的游戲界面,在保齡球游戲界面下方有3個(gè)按鈕“重新開始”、“退出”、“音效”,單擊鼠標(biāo)左鍵發(fā)射保齡球,擊倒前方的保齡球瓶,按A鍵主攝像機(jī)左移,D鍵右移,W鍵前移,S鍵后移,Q鍵左轉(zhuǎn),R鍵右轉(zhuǎn),Z鍵向上轉(zhuǎn),C鍵向下轉(zhuǎn),當(dāng)保齡球瓶全部擊落到地面以下,屏幕會(huì)顯示“恭喜過(guò)關(guān)!”,整個(gè)游戲結(jié)束。
其次,設(shè)計(jì)保齡球游戲腳本。在Unity3D中創(chuàng)建新項(xiàng)目,導(dǎo)入保齡球游戲場(chǎng)景的三維模型FBX文件,為場(chǎng)景中的保齡球瓶添加rigidbody剛體屬性,設(shè)置其方體碰撞的屬性,以免保齡球瓶穿過(guò)地面掉落,再創(chuàng)建一個(gè)保齡球并設(shè)置為預(yù)置物體。在Assets資源庫(kù)中創(chuàng)建“faqiu”腳本,將該腳本拖放到Main Camera上,“faqiu”腳本如下:
function Start () { }
var speed:int=5;//定義speed是整數(shù)型變量
var newobject:Transform;//定義newobject:Transform
var fqshu:int=0; //定義fqshu是整數(shù)型變量
var xmshu:int=0; //定義xmshu是整數(shù)型變量
function Update (){//攝像機(jī)前后左右的平移功能
var x=Input.GetAxis(\"Horizontal\")*Time.deltaTime*speed;//水平移動(dòng)攝像機(jī)
var z=Input.GetAxis(\"Vertical\")*Time.deltaTime*speed;//垂直移動(dòng)攝像機(jī)
transform.Translate(x,0,z);//攝像機(jī)平移坐標(biāo)
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++;//發(fā)球數(shù)+1
gameObject.Find(\"擲球數(shù)\").GetComponent(GUIText).text=\"發(fā)球:\"+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);}
保齡球發(fā)射后3秒后自動(dòng)消失,XH.js腳本如下:
function Start () {Destroy(gameObject,3.0);}
將發(fā)射球的數(shù)量和消滅保齡球瓶的數(shù)量在屏幕中進(jìn)行計(jì)數(shù),計(jì)算消滅數(shù)的方式就是瓶子掉到了地面以下,y值小于0,實(shí)現(xiàn)xmshu+1,如果消滅數(shù)大于10,游戲結(jié)束。Panduan.js判斷腳本作為組件添加到保齡球瓶,其腳本如下:
function Start () { }
var fq:int;
var xm:int;
function Update( ) { //判斷保齡球瓶是否擊落到地下
if(gameObject.transform.position.y<0){ //保齡球瓶y值小于0
xm=gameObject.Find(\"Main camera\").GetComponent(faqiu).xmshu++; //消滅數(shù)+1
fq=gameObject.Find(\"Main Camera\").GetComponent(faqiu).fqshu; //發(fā)球數(shù)
gameObject.Find(\"擲球數(shù)\").GetComponent(GUIText).text=\"擲球數(shù):\"+sd+\" 消滅數(shù):\"+xm;
//顯示\"擲球數(shù):\"和\"消滅數(shù):\"
if(xm>10){ //消滅數(shù)大于10顯示\"恭喜過(guò)關(guān)!\"并停止發(fā)球
gameObject.Find(\"擲球數(shù)\").GetComponent(GUIText).text=\"恭喜過(guò)關(guān)!\";
gameObject.Find(\"Main Camera\").GetComponent(faqiu).enabled=1;
gameObject.Find(\"地板\").GetComponent(restart).enabled=true; }
Destroy(gameObject); //銷毀物體 } }
在游戲窗口下方添加3個(gè)按鈕——“退出”、“重新開始”、“音效”,button.js腳本賦給層級(jí)面板的地板物體,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的音樂(lè)文件拷入預(yù)置文件夾中,為“地面”添加音樂(lè)組件,這樣游戲開始時(shí)會(huì)播放音樂(lè),按“音效”鍵可以關(guān)閉或開啟音樂(lè)。
第三,設(shè)計(jì)游戲初始界面。在Hierarchy層級(jí)面板單擊Create(創(chuàng)建)→GUI Texture(GUI紋理),創(chuàng)建“初始界面.Unity”。start.js腳本添加到初始界面場(chǎng)景的主攝像機(jī),其腳本如下:
function OnGUI(){
if(GUI.Button(Rect(180,400,60,30),\"退出\")){Application.Quit();
//“退出”按鈕坐標(biāo)(180,400),大小6030像素,調(diào)用Quit程序 }
if(GUI.Button(Rect(280,400,60,30),\"開始游戲\")){Application.LoadLevel(\"保齡球\");
//“開始游戲”按鈕坐標(biāo)(280,400),大小6030像素,調(diào)用“保齡球.unity”場(chǎng)景}}
最后,游戲的打包與發(fā)布。發(fā)布設(shè)置窗口中設(shè)置游戲打包到PC, Mac Linux standard alone平臺(tái),將“初始界面.unity”場(chǎng)景執(zhí)行順序設(shè)置為0,“保齡球.unity”場(chǎng)景執(zhí)行順序設(shè)置為1,單擊Build and Run按鈕,即可得到打包后的exe文件。至此,整個(gè)游戲開發(fā)完成。
3 結(jié)束語(yǔ)
Unity 3D是一項(xiàng)新的技術(shù),它能最大程度上讓游戲開發(fā)者的生活變得更美好更容易,使用Unity 3D后,你會(huì)覺(jué)得開發(fā)帶有影視特效的游戲比以前更快更簡(jiǎn)單。
參考文獻(xiàn):
[1]路朝龍.Unity3D游戲開發(fā)從入門到精通[M].北京:中國(guó)鐵道出版社,2013.
[2]俞亮,俞文心.基于Unity的Web游戲設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2014(08):225-226.
[3]程明智,王一夫.Unity游戲開發(fā)技術(shù)[M].北京:國(guó)防工業(yè)出版社,2012.
作者簡(jiǎn)介:張敏(1972-),女,湖南長(zhǎng)沙人,教研室主任,碩士,研究方向:三維展示。
作者單位:湖南工業(yè)職業(yè)技術(shù)學(xué)院,長(zhǎng)沙 410208