• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Unity平臺(tái)的三維坦克游戲設(shè)計(jì)與實(shí)現(xiàn)

      2015-09-18 13:14:20李慎亮司占軍
      軟件導(dǎo)刊 2015年8期

      李慎亮 司占軍

      摘要:為了解Unity與三維建模軟件的兼容問題,以及游戲的基本制作流程,以90坦克為原型,在3D Max中進(jìn)行了建模、UV分展。在PS 中進(jìn)行貼圖制作,在Gold Wave中進(jìn)行音樂切分制作;在Unity中綜合運(yùn)用各種資源,結(jié)合AI、剛體檢測(cè)等技術(shù)實(shí)現(xiàn)了碰撞檢測(cè)、鍵盤檢測(cè)、爆炸等效果,最終制作出了一款操作性好、畫面精良、具有一定趣味性的3維TPS游戲。

      關(guān)鍵詞:TPS;Unity;三維游戲;坦克游戲

      DOIDOI:10.11907/rjdk.151403

      中圖分類號(hào):TP319

      文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2015)008015203

      0 引言

      計(jì)算機(jī)軟硬件技術(shù)的發(fā)展水平越來越高,畫面簡(jiǎn)單、立體感差的二維平面游戲正在淡出人們的視野。立體感強(qiáng)、操作性好、畫面精美的三維游戲越來越受到玩家和游戲廠商的喜愛。虛擬現(xiàn)實(shí)、體感檢測(cè)等技術(shù)的發(fā)展更是為游戲產(chǎn)業(yè)的發(fā)展提供了良好的技術(shù)支持。

      本文以三維坦克游戲的開發(fā)過程為例,介紹了Unity平臺(tái)與其它軟件之間的關(guān)聯(lián)以及注意事項(xiàng)。

      1 游戲設(shè)計(jì)

      為了讓游戲情節(jié)更好地展開,增加游戲的趣味性,本次實(shí)驗(yàn)設(shè)計(jì)了山區(qū)狙擊戰(zhàn)、城鎮(zhèn)街道戰(zhàn)及工廠會(huì)戰(zhàn)3種游戲場(chǎng)景,游戲設(shè)計(jì)如圖1所示。

      2 預(yù)期效果

      (1)鍵盤監(jiān)聽。能夠監(jiān)聽鍵盤上的按鍵,根據(jù)玩家按下的不同按鍵作出相應(yīng)反應(yīng)。例如按下A、S、W、D鍵會(huì)讓坦克向左、右、前、后行駛。

      (2)攝像頭跟隨。攝像機(jī)跟隨游戲中的角色移動(dòng)。攝像機(jī)要有廣闊的視野,以便玩家能夠及時(shí)了解游戲的變化。

      (3)坦克AI(人工智能)。標(biāo)識(shí)為敵人的坦克能夠在地圖范圍內(nèi)隨意走動(dòng),且能夠自主判斷在其范圍內(nèi)的其它坦克是否為敵人。

      (4)爆炸效果。坦克的炮彈射出后擊中目標(biāo)產(chǎn)生爆炸效果,同時(shí)播放爆炸音效,模擬真實(shí)的爆炸情景。

      (5)炮臺(tái)轉(zhuǎn)向。坦克靜止后,坦克炮臺(tái)隨著鼠標(biāo)的移動(dòng)在一定角度范圍內(nèi)轉(zhuǎn)向。

      圖1 游戲的基本元素與設(shè)計(jì)流程

      3 實(shí)驗(yàn)流程

      3.1 模型創(chuàng)建與優(yōu)化

      模型是游戲的基礎(chǔ),精致的三維模型能夠提高游戲的真實(shí)性。Unity平臺(tái)支持多個(gè)三維軟件創(chuàng)建的模型,本實(shí)驗(yàn)選用上手相對(duì)較快的3D Max軟件,在3D Max中利用多邊形建模和Box模型拼接結(jié)合的方式對(duì)坦克建模。需要注意的是3D Max與Unity中單位之比為0.01:1,即在3D Max中的1cm就是Unity中的1m。為保證單位的統(tǒng)一,實(shí)驗(yàn)中將3D Max的系統(tǒng)單位設(shè)置為cm。一般來說,游戲中模型的面數(shù)越多,游戲所消耗的資源就越多,游戲的流暢度就會(huì)降低。因此需要在3D Max中使用線的分隔、點(diǎn)的焊接等命令將模型的面設(shè)置成三邊面。

      3.2 UV分展

      如果說模型是三維游戲的骨架,那貼圖就是游戲的衣服。精美的貼圖使游戲畫面更加絢麗、真實(shí)。畫面的精美程度與游戲消耗的資源數(shù)是成正比的。因此,要減少游戲消耗的資源,不僅要減少游戲模型的畫面數(shù),還要利用高精度貼圖的方法來制作游戲。高精度貼圖的制作需要對(duì)高精度模型進(jìn)行UV分展、烘培,然后導(dǎo)出到PS中進(jìn)行貼圖繪制。精細(xì)的UV劃分能夠讓模型有著豐富的細(xì)節(jié)和變化,增加模型的真實(shí)感。在分展UV時(shí),結(jié)合使用棋盤格材質(zhì)以及松弛等方法,對(duì)UV進(jìn)行分展、整合,最后渲染出UV模板,如圖2所示。

      圖2 模型UV的分展、整合

      將繪制完畢的貼圖重新導(dǎo)入到3D Max中,并對(duì)創(chuàng)建完畢的低精度模型進(jìn)行貼圖。此時(shí)低精度模型與高精度模型的比例應(yīng)為1:1。

      3.3 模型導(dǎo)出導(dǎo)入

      實(shí)驗(yàn)中直接導(dǎo)出fbx格式模型。在導(dǎo)出之前需要將每塊模型的坐標(biāo)歸零。在3D Max中利用坐標(biāo)調(diào)整工具調(diào)整坐標(biāo)的方向及位置并保存。導(dǎo)出模型時(shí),選擇導(dǎo)出為fbx格式,并勾選嵌入媒體選項(xiàng)。

      導(dǎo)出的模型直接拖入U(xiǎn)nity中的資源面板就可以實(shí)現(xiàn)資源的導(dǎo)入,而且模型的貼圖等數(shù)據(jù)也會(huì)一并導(dǎo)入到Unity中(Untiy的面板命令也可導(dǎo)入資源)。

      3.4 地形與環(huán)境制作

      選擇菜單 terrain→create terrain,在工作區(qū)域中出現(xiàn)一個(gè)地形圖(長(zhǎng)方形),調(diào)整地形大小。選擇菜單terrain→flatten heightmap,設(shè)置地形高度[1]。

      Unity自帶的地形編輯器具有上凸、下凹等命令,利用這些命令可以模擬出山川、丘陵、小島等環(huán)境。

      Unity中有兩種添加花草樹木的方法,一種是利用預(yù)制物體,將樹木挨個(gè)向場(chǎng)景中添加;另一種是利用地形編輯菜單欄中的筆刷工具向場(chǎng)景中添加樹木。

      添加預(yù)制物體需要將樹木變?yōu)轭A(yù)制物體,再拖拽到場(chǎng)景中進(jìn)行布置。預(yù)制物體是指Unity中為了更有效地使用資源,在Unity內(nèi)部創(chuàng)建的一個(gè)模板,該模板的所有副本都是它的一個(gè)實(shí)例。預(yù)制物體使用時(shí)需要將物體挨個(gè)拖入到場(chǎng)景中,對(duì)于場(chǎng)景較大的地方來說比較麻煩,而且不同的環(huán)境還要編寫不同的代碼來實(shí)現(xiàn)不同的效果,例如風(fēng)吹的效果。由于預(yù)制是真實(shí)的三維模型,因而真實(shí)性更高。預(yù)制物體比較適合場(chǎng)景中樹木的制作。

      圖3 Untiy的地形編輯命令面板

      圖4 游戲中的樹木

      筆刷工具添加的花草樹木是利用二維貼圖來模擬現(xiàn)實(shí)三維效果,與使用預(yù)制制作的樹木相比更加適合大規(guī)模的樹木制作,例如森林、草地等。

      石塊和房屋等資源需要在三維軟件中創(chuàng)建模型,貼圖制作后導(dǎo)入到Unity中使用,也可以去Unity Store中尋找需要的資源購(gòu)買使用。

      3.5 腳本編寫

      Unity是一個(gè)面向?qū)ο蟮挠螒蛞?,腳本是三維游戲開發(fā)的重要組成部分,是游戲引擎與游戲素材資源之間的紐帶[2],游戲物體實(shí)現(xiàn)的各種效果都需要腳本來控制,例如坦克的移動(dòng):

      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偽碼設(shè)計(jì):①為坦克設(shè)置敵我標(biāo)識(shí)Flag;②定義最遠(yuǎn)攻擊距離D2,以及攻擊角度;③定義與其它剛體最小的接近距離D3;4④射射線實(shí)時(shí)檢測(cè)一定范圍內(nèi)的剛體;⑤能否攻擊敵人B;⑥If(剛體Flag==敵人){

      計(jì)算距離D1

      If (D1

      攻擊

      B=false

      調(diào)用計(jì)時(shí)函數(shù);

      B=true;

      }

      } else {

      計(jì)算距離D1

      If(D1

      調(diào)用轉(zhuǎn)向函數(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 炮塔轉(zhuǎn)向

      坦克建模時(shí)需要將坦克分為炮臺(tái)和身體兩個(gè)部分。因?yàn)榕谂_(tái)前后左右的移動(dòng)要受到身體的限制,但是旋轉(zhuǎn)只會(huì)受到鼠標(biāo)的影響,因此需要在Unity中將其設(shè)置為父子關(guān)系,并分別設(shè)置腳本,炮臺(tái)的腳本代碼如下:

      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 完善和測(cè)試發(fā)布

      游戲制作完成后,為了檢查游戲是否完整,能否達(dá)到預(yù)期效果,需要對(duì)其進(jìn)行調(diào)試和運(yùn)行[3]。進(jìn)入游戲后,首先測(cè)試游戲的基本操作,以及炮彈的發(fā)射、爆炸等功能,還要測(cè)試AI系統(tǒng)是否正常。

      經(jīng)過測(cè)試,游戲基本達(dá)到預(yù)期效果,各界面切換流暢,運(yùn)行正常。

      5 結(jié)語

      使用3D Max軟件建模,結(jié)合使用圖像處理、聲音處理等軟件以及游戲引擎Unity,為該款游戲的實(shí)現(xiàn)搭建基本環(huán)境。通過模型創(chuàng)建、貼圖制作、場(chǎng)景創(chuàng)建、規(guī)則制定并結(jié)合鼠標(biāo)鍵盤檢測(cè)、爆炸效果、碰撞檢測(cè)等技術(shù),制作了一款TPS游戲,經(jīng)測(cè)試,運(yùn)行效果良好。不足的是游戲的趣味性、可操作性較差,交互設(shè)計(jì)也較少,仍需作進(jìn)一步的改進(jìn)。

      參考文獻(xiàn):

      [1] 王亞萍. 淺析Unity 3D 創(chuàng)建環(huán)境地形[J] .計(jì)算機(jī)光盤軟件與應(yīng)用,2012 ,19(2):175178.

      [2] 伍傳敏,張帥,邱錦明.基于 Unity3D 的 FPS 游戲設(shè)計(jì)與開發(fā)伍[J]. 三明學(xué)院學(xué)報(bào), 2012,29(2):3540.

      [3] 董健. 一款基于Unity3D的移動(dòng)平臺(tái)游戲的設(shè)計(jì)[J]. 軟件工程師,2014,17(12):3435.

      (責(zé)任編輯:杜能鋼)

      凤凰县| 于田县| 白河县| 达日县| 六安市| 福清市| 柳州市| 海安县| 沁阳市| 宜兰市| 鸡泽县| 彭州市| 宁都县| 浦城县| 宁乡县| 镇远县| 平陆县| 石棉县| 乌苏市| 四子王旗| 屯留县| 肇东市| 泰来县| 永济市| 张家界市| 邯郸市| 石阡县| 长寿区| 章丘市| 突泉县| 湟源县| 渝北区| 肥西县| 贺兰县| 永顺县| 南部县| 监利县| 黑河市| 凭祥市| 江源县| 德阳市|