李慎亮 司占軍
摘要:為了解Unity與三維建模軟件的兼容問題,以及游戲的基本制作流程,以90坦克為原型,在3D Max中進行了建模、UV分展。在PS 中進行貼圖制作,在Gold Wave中進行音樂切分制作;在Unity中綜合運用各種資源,結合AI、剛體檢測等技術實現(xiàn)了碰撞檢測、鍵盤檢測、爆炸等效果,最終制作出了一款操作性好、畫面精良、具有一定趣味性的3維TPS游戲。
關鍵詞:TPS;Unity;三維游戲;坦克游戲
DOIDOI:10.11907/rjdk.151403
中圖分類號:TP319
文獻標識碼:A 文章編號文章編號:16727800(2015)008015203
0 引言
計算機軟硬件技術的發(fā)展水平越來越高,畫面簡單、立體感差的二維平面游戲正在淡出人們的視野。立體感強、操作性好、畫面精美的三維游戲越來越受到玩家和游戲廠商的喜愛。虛擬現(xiàn)實、體感檢測等技術的發(fā)展更是為游戲產(chǎn)業(yè)的發(fā)展提供了良好的技術支持。
本文以三維坦克游戲的開發(fā)過程為例,介紹了Unity平臺與其它軟件之間的關聯(lián)以及注意事項。
1 游戲設計
為了讓游戲情節(jié)更好地展開,增加游戲的趣味性,本次實驗設計了山區(qū)狙擊戰(zhàn)、城鎮(zhèn)街道戰(zhàn)及工廠會戰(zhàn)3種游戲場景,游戲設計如圖1所示。
2 預期效果
(1)鍵盤監(jiān)聽。能夠監(jiān)聽鍵盤上的按鍵,根據(jù)玩家按下的不同按鍵作出相應反應。例如按下A、S、W、D鍵會讓坦克向左、右、前、后行駛。
(2)攝像頭跟隨。攝像機跟隨游戲中的角色移動。攝像機要有廣闊的視野,以便玩家能夠及時了解游戲的變化。
(3)坦克AI(人工智能)。標識為敵人的坦克能夠在地圖范圍內(nèi)隨意走動,且能夠自主判斷在其范圍內(nèi)的其它坦克是否為敵人。
(4)爆炸效果。坦克的炮彈射出后擊中目標產(chǎn)生爆炸效果,同時播放爆炸音效,模擬真實的爆炸情景。
(5)炮臺轉向。坦克靜止后,坦克炮臺隨著鼠標的移動在一定角度范圍內(nèi)轉向。
圖1 游戲的基本元素與設計流程
3 實驗流程
3.1 模型創(chuàng)建與優(yōu)化
模型是游戲的基礎,精致的三維模型能夠提高游戲的真實性。Unity平臺支持多個三維軟件創(chuàng)建的模型,本實驗選用上手相對較快的3D Max軟件,在3D Max中利用多邊形建模和Box模型拼接結合的方式對坦克建模。需要注意的是3D Max與Unity中單位之比為0.01:1,即在3D Max中的1cm就是Unity中的1m。為保證單位的統(tǒng)一,實驗中將3D Max的系統(tǒng)單位設置為cm。一般來說,游戲中模型的面數(shù)越多,游戲所消耗的資源就越多,游戲的流暢度就會降低。因此需要在3D Max中使用線的分隔、點的焊接等命令將模型的面設置成三邊面。
3.2 UV分展
如果說模型是三維游戲的骨架,那貼圖就是游戲的衣服。精美的貼圖使游戲畫面更加絢麗、真實。畫面的精美程度與游戲消耗的資源數(shù)是成正比的。因此,要減少游戲消耗的資源,不僅要減少游戲模型的畫面數(shù),還要利用高精度貼圖的方法來制作游戲。高精度貼圖的制作需要對高精度模型進行UV分展、烘培,然后導出到PS中進行貼圖繪制。精細的UV劃分能夠讓模型有著豐富的細節(jié)和變化,增加模型的真實感。在分展UV時,結合使用棋盤格材質(zhì)以及松弛等方法,對UV進行分展、整合,最后渲染出UV模板,如圖2所示。
圖2 模型UV的分展、整合
將繪制完畢的貼圖重新導入到3D Max中,并對創(chuàng)建完畢的低精度模型進行貼圖。此時低精度模型與高精度模型的比例應為1:1。
3.3 模型導出導入
實驗中直接導出fbx格式模型。在導出之前需要將每塊模型的坐標歸零。在3D Max中利用坐標調(diào)整工具調(diào)整坐標的方向及位置并保存。導出模型時,選擇導出為fbx格式,并勾選嵌入媒體選項。
導出的模型直接拖入Unity中的資源面板就可以實現(xiàn)資源的導入,而且模型的貼圖等數(shù)據(jù)也會一并導入到Unity中(Untiy的面板命令也可導入資源)。
3.4 地形與環(huán)境制作
選擇菜單 terrain→create terrain,在工作區(qū)域中出現(xiàn)一個地形圖(長方形),調(diào)整地形大小。選擇菜單terrain→flatten heightmap,設置地形高度[1]。
Unity自帶的地形編輯器具有上凸、下凹等命令,利用這些命令可以模擬出山川、丘陵、小島等環(huán)境。
Unity中有兩種添加花草樹木的方法,一種是利用預制物體,將樹木挨個向場景中添加;另一種是利用地形編輯菜單欄中的筆刷工具向場景中添加樹木。
添加預制物體需要將樹木變?yōu)轭A制物體,再拖拽到場景中進行布置。預制物體是指Unity中為了更有效地使用資源,在Unity內(nèi)部創(chuàng)建的一個模板,該模板的所有副本都是它的一個實例。預制物體使用時需要將物體挨個拖入到場景中,對于場景較大的地方來說比較麻煩,而且不同的環(huán)境還要編寫不同的代碼來實現(xiàn)不同的效果,例如風吹的效果。由于預制是真實的三維模型,因而真實性更高。預制物體比較適合場景中樹木的制作。
圖3 Untiy的地形編輯命令面板
圖4 游戲中的樹木
筆刷工具添加的花草樹木是利用二維貼圖來模擬現(xiàn)實三維效果,與使用預制制作的樹木相比更加適合大規(guī)模的樹木制作,例如森林、草地等。
石塊和房屋等資源需要在三維軟件中創(chuàng)建模型,貼圖制作后導入到Unity中使用,也可以去Unity Store中尋找需要的資源購買使用。
3.5 腳本編寫
Unity是一個面向對象的游戲引擎,腳本是三維游戲開發(fā)的重要組成部分,是游戲引擎與游戲素材資源之間的紐帶[2],游戲物體實現(xiàn)的各種效果都需要腳本來控制,例如坦克的移動:
function Update () {
if (Input.GetKey(KeyCode.Escape)){
move=false;
}
if (controlled&&move){
var x=Input.GetAxis("Horizontal")*Time.deltaTime*speed;
var z=Input.GetAxis("Vertical")*Time.deltaTime*speed;
transform.Translate(x,0,z);
if(Input.GetKey(KeyCode.A)){
transform.RotateAround(rotate_point.position,Vector3.up,-rotate_speed);
}
if(Input.GetKey(KeyCode.D)){
transform.RotateAround(rotate_point.position,Vector3.up,rotate_speed);
}
}
}
AI偽碼設計:①為坦克設置敵我標識Flag;②定義最遠攻擊距離D2,以及攻擊角度;③定義與其它剛體最小的接近距離D3;4④射射線實時檢測一定范圍內(nèi)的剛體;⑤能否攻擊敵人B;⑥If(剛體Flag==敵人){
計算距離D1
If (D1 攻擊 B=false 調(diào)用計時函數(shù); B=true; } } else { 計算距離D1 If(D1 調(diào)用轉向函數(shù) } } 爆炸效果 function OnCollisionStay(collision:Collision){ Instantiate(boomFire,this.transform.position,this.transform.rotation); gameObject.renderer.enabled=false; gameObject.collider.enabled=false; play=true; playmusic(); } 3.6 炮塔轉向 坦克建模時需要將坦克分為炮臺和身體兩個部分。因為炮臺前后左右的移動要受到身體的限制,但是旋轉只會受到鼠標的影響,因此需要在Unity中將其設置為父子關系,并分別設置腳本,炮臺的腳本代碼如下: function update(){ if(tank_controll.move){ checkMouseMove(); if(FirePoint==null){ return; } if(Input.GetMouseButtonDown(0)){ if(CurrBullet>0){ var clone:Transform; clone = Instantiate(BULLET.FirePoint.transform.position, FirtePoint.transform.ratation); Var fwd:Vector3= transform.TransformDirection(Vector3.right); } } } } function checkMouseMove(){ if(Input.GetMouseButton(1)){ var h:: float=2*Input.GetAxis("Mouse X"); transform.Rotate(0,h0); } } 4 完善和測試發(fā)布 游戲制作完成后,為了檢查游戲是否完整,能否達到預期效果,需要對其進行調(diào)試和運行[3]。進入游戲后,首先測試游戲的基本操作,以及炮彈的發(fā)射、爆炸等功能,還要測試AI系統(tǒng)是否正常。 經(jīng)過測試,游戲基本達到預期效果,各界面切換流暢,運行正常。 5 結語 使用3D Max軟件建模,結合使用圖像處理、聲音處理等軟件以及游戲引擎Unity,為該款游戲的實現(xiàn)搭建基本環(huán)境。通過模型創(chuàng)建、貼圖制作、場景創(chuàng)建、規(guī)則制定并結合鼠標鍵盤檢測、爆炸效果、碰撞檢測等技術,制作了一款TPS游戲,經(jīng)測試,運行效果良好。不足的是游戲的趣味性、可操作性較差,交互設計也較少,仍需作進一步的改進。 參考文獻: [1] 王亞萍. 淺析Unity 3D 創(chuàng)建環(huán)境地形[J] .計算機光盤軟件與應用,2012 ,19(2):175178. [2] 伍傳敏,張帥,邱錦明.基于 Unity3D 的 FPS 游戲設計與開發(fā)伍[J]. 三明學院學報, 2012,29(2):3540. [3] 董健. 一款基于Unity3D的移動平臺游戲的設計[J]. 軟件工程師,2014,17(12):3435. (責任編輯:杜能鋼)