• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Unity3D的移動(dòng)塔防游戲設(shè)計(jì)與實(shí)現(xiàn)

    2019-03-14 07:17:48胡杭
    現(xiàn)代計(jì)算機(jī) 2019年4期
    關(guān)鍵詞:關(guān)卡魔法導(dǎo)彈

    胡杭

    (溫州大學(xué)數(shù)理與電子信息工程學(xué)院,溫州 325035)

    0 引言

    近年來(lái),隨著移動(dòng)設(shè)備的不斷發(fā)展,手機(jī)端游戲越來(lái)越受到大家的青睞。App Annie數(shù)據(jù)顯示,移動(dòng)游戲市場(chǎng)2018年在全球的規(guī)模達(dá)到了700億美元,增長(zhǎng)速度達(dá)到26%。

    Unity3D游戲引擎是一款全球領(lǐng)先的專(zhuān)業(yè)游戲開(kāi)發(fā)引擎,在游戲開(kāi)發(fā)領(lǐng)域占有著極大的比重,具有簡(jiǎn)單易上手、功能豐富等特點(diǎn)。Unity3D引擎中集成了大量的開(kāi)發(fā)工具,利用這些工具可以大幅度縮短開(kāi)發(fā)周期[1]。另外,Unity3D具有跨平臺(tái)開(kāi)發(fā)的優(yōu)點(diǎn),開(kāi)發(fā)人員只需要一次開(kāi)發(fā),就可以將項(xiàng)目部署到多個(gè)平臺(tái),包括Windows、iOS和Android這些主流的平臺(tái),大大縮短了游戲開(kāi)發(fā)周期[2]。

    塔防游戲作為一款經(jīng)典游戲,被許多玩家所喜愛(ài)。塔防游戲中面對(duì)敵軍的入侵,玩家可以建造一系列的防守道具來(lái)抵御入侵,最終取得游戲的勝利。目前游戲市場(chǎng)上有諸多塔防類(lèi)游戲,例如植物大戰(zhàn)僵尸、皇家守衛(wèi)軍等。這幾款游戲在可玩性和策略性上占有著很大的優(yōu)勢(shì),也深受廣大玩家所喜愛(ài)。但由于許多這類(lèi)游戲是基于2D平臺(tái)進(jìn)行開(kāi)發(fā)的,因此在游戲畫(huà)質(zhì),游戲代入感方面并不是很出色。

    本文針對(duì)2D塔防游戲存在的一些局限性問(wèn)題,使用3D引擎進(jìn)行設(shè)計(jì)和開(kāi)發(fā)。在保證可玩性與策略性的基礎(chǔ)上,使用3D模型代替2D模型,增加視野控制功能,優(yōu)化游戲畫(huà)質(zhì),增強(qiáng)游戲的趣味性。

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

    塔防游戲功能模塊劃分如圖1所示。

    圖1 游戲總體模塊結(jié)構(gòu)圖

    加載模塊:加載模塊主要實(shí)現(xiàn)加載界面,游戲場(chǎng)景加載時(shí)的一個(gè)過(guò)渡效果,能夠顯示當(dāng)前場(chǎng)景的加載進(jìn)度,實(shí)現(xiàn)異步交互,提供給玩家一個(gè)反饋,能夠增強(qiáng)玩家的游戲體驗(yàn)。

    商城模塊:增加商城模塊可以增加游戲的策略性。商城用于購(gòu)買(mǎi)各種游戲道具,購(gòu)買(mǎi)道具需要一定量的鉆石,鉆石可從游戲中獲取,也可以通過(guò)充值操作進(jìn)行充值。購(gòu)買(mǎi)的道具可在游戲中進(jìn)行使用,不同的道具有不同的效果,對(duì)于游戲的局勢(shì)可以產(chǎn)生一定的影響。

    升級(jí)模塊:增加升級(jí)模塊是另一種增強(qiáng)游戲策略性的方式。升級(jí)模塊可以進(jìn)行各類(lèi)炮塔的升級(jí),每種炮塔的升級(jí)都能對(duì)炮塔的屬性進(jìn)行一定的加持,玩家可以定制自己的升級(jí)策略。升級(jí)需要消耗一定數(shù)量的星星,星星的獲得是視游戲通關(guān)的情況而定,例如每次關(guān)卡完美通關(guān)可獲得3個(gè)星星。升級(jí)模塊可以促使玩家通過(guò)不斷提升關(guān)卡等級(jí)來(lái)解鎖新的升級(jí)策略。

    道具模塊:道具模塊主要用于商城購(gòu)買(mǎi)道具的施放。商城模塊主要注重購(gòu)買(mǎi),而道具模塊注重道具施放。例如,萬(wàn)箭齊發(fā)道具可以向指定區(qū)域發(fā)射大量弓箭,造成物理傷害;龍卷風(fēng)道具可以在指定區(qū)域形成龍卷風(fēng),造成范圍魔法傷害。

    魔法模塊:為了使游戲更具特色,增加了魔法模塊。例如,治療魔法可以恢復(fù)1點(diǎn)生命值;減速魔法可以使指定區(qū)域敵人行進(jìn)速度降低一段時(shí)間。魔法不消耗物品,但是具有冷卻時(shí)間,只有冷卻時(shí)間完成之后,魔法才可以使用。因此,如何有效地運(yùn)用魔法,需要從游戲整體策略上進(jìn)行規(guī)劃與設(shè)計(jì)。

    玩家進(jìn)入游戲主界面后,會(huì)呈現(xiàn)出已經(jīng)解鎖的關(guān)卡,玩家可以通過(guò)不斷地通關(guān)當(dāng)前關(guān)卡來(lái)解鎖下一個(gè)關(guān)卡。在關(guān)卡選擇界面,玩家可以進(jìn)入商城和升級(jí)模塊,商城模塊可以進(jìn)行道具的購(gòu)買(mǎi),升級(jí)模塊可以指定相應(yīng)的升級(jí)策略。每一次戰(zhàn)斗都需要建立不同的炮塔防線來(lái)阻止敵軍的進(jìn)攻??梢酝ㄟ^(guò)加速按鈕加速游戲的進(jìn)程,通過(guò)暫停按鈕暫停游戲進(jìn)程。每當(dāng)戰(zhàn)斗勝利,便會(huì)得到一定的游戲獎(jiǎng)勵(lì)。

    2 游戲?qū)崿F(xiàn)

    2.1 Unity 3D游戲引擎

    Unity3D引擎具有諸多模塊,這里列舉了一些使用比較頻繁的功能模塊。

    后來(lái),攝影家辦了展覽,她在圈中就小有名氣了。涂當(dāng)偶爾也給她拍幾張發(fā)在微博上,但一直是半紅不黑的,直到那天陳小北找到她。陳小北把她的照片放到了某知名網(wǎng)站上,并想方設(shè)法做成頭條新聞。一夜之間,她紅了,三炒兩炒,有一些名不見(jiàn)經(jīng)傳的牌子或網(wǎng)店找她代言。于是,街頭巷尾的婆婆媽媽也知道了,只除了她那個(gè)從不上網(wǎng)的爸爸葉之容。

    碰撞器模塊:碰撞器是游戲開(kāi)發(fā)中至關(guān)重要的一個(gè)組件,它不斷檢測(cè)著物體之間的碰撞,并調(diào)用相應(yīng)的回調(diào)函數(shù)。開(kāi)發(fā)者可以在Unity腳本中重寫(xiě)這些回調(diào)函數(shù)來(lái)對(duì)碰撞做出相關(guān)的策略。碰撞的實(shí)質(zhì)其實(shí)是碰撞盒的碰撞。在Unity引擎中,為開(kāi)發(fā)者提供了多種碰撞器,常見(jiàn)的有盒型碰撞器(Box Collider)、球型碰撞器(Sphere Collider)、膠囊型碰撞器(Capsule Collider)和網(wǎng)格碰撞器(Mesh Collider)[3]。其中,前三者可以處理模型較為簡(jiǎn)單的物體,碰撞器能夠較好地包裹在模型的周?chē)纬膳鲎埠?,這樣檢測(cè)碰撞而消耗的性能也會(huì)較小;但是對(duì)于一些比較復(fù)雜的模型或者對(duì)碰撞盒的精確度有著較高的要求的情況下,就可以使用網(wǎng)格碰撞器。

    Unity Shader:Unity 提供了許多內(nèi)置的 Shader,其中,Unity標(biāo)準(zhǔn)著色器(Standard Shader)集成了非常強(qiáng)大而全面的功能。我們可以通過(guò)設(shè)置十種常用的貼圖(反射率貼圖、法線貼圖等)來(lái)渲染模型;我們可以設(shè)置渲染模式為Opaque(不透明)、Cutout(鏤空)、Fade(隱現(xiàn))和Transparent(透明)來(lái)呈現(xiàn)不同的模型效果。另外,我們可以通過(guò)調(diào)節(jié)參數(shù)面板上的相關(guān)參數(shù)來(lái)改變模型的平滑度和金屬度。

    動(dòng)畫(huà)系統(tǒng):Unity的動(dòng)畫(huà)系統(tǒng)由以下幾部分構(gòu)成:Avatar(骨骼模型)、Animation(動(dòng)畫(huà)片段)、Animator(動(dòng)畫(huà)組件)、Animator Controller(動(dòng)畫(huà)控制器)。圖2為一個(gè)人形的骨骼模型,圖3為該模型的骨骼節(jié)點(diǎn)映射情況,Unity可以通過(guò)Avatar檢視面板來(lái)調(diào)節(jié)骨骼模型的各個(gè)節(jié)點(diǎn)的映射。骨骼動(dòng)畫(huà)不會(huì)改變對(duì)象的位置、旋轉(zhuǎn)和縮放等內(nèi)容,但會(huì)在幀間對(duì)其內(nèi)部組成進(jìn)行移動(dòng)或變形[4]。

    圖2 骨骼模型

    圖3 骨骼映射

    2.2 建立3D模型

    3D游戲開(kāi)發(fā)過(guò)程中,3D建模是必不可少的步驟。玩家首先會(huì)通過(guò)模型去觀察整個(gè)游戲世界,進(jìn)而去體驗(yàn)游戲的其他內(nèi)容。優(yōu)秀的游戲模型能夠帶來(lái)游戲畫(huà)面的直觀感受,增加游戲的吸引力。諸如3Ds MAX、Maya、Rhino等軟件都能實(shí)現(xiàn)快速建模。通過(guò)采集模型,利用3Ds MAX軟件進(jìn)行模型細(xì)節(jié)調(diào)整,能過(guò)完成游戲開(kāi)發(fā)的初期建模工作。

    2.3 實(shí)現(xiàn)與優(yōu)化

    MVC(Model-View-Controller)框架主要運(yùn)用于軟件的分層開(kāi)發(fā),合理利用MVC框架能夠達(dá)到很好的解耦效果。MVC框架在軟件開(kāi)發(fā)中能夠?qū)浖目煽啃?、?guī)范性和可擴(kuò)展性起到極大的促進(jìn)作用[5]。在游戲開(kāi)發(fā)中,Model進(jìn)行游戲數(shù)據(jù)的讀出和寫(xiě)入,View層進(jìn)行UI視圖層的控制,Controller層進(jìn)行游戲核心邏輯的控制,并且對(duì)Model層和View層起到了一定調(diào)控作用。

    如何平衡游戲畫(huà)質(zhì)和游戲性能兩個(gè)方面一直以來(lái)是本文研究的重點(diǎn)。本文總結(jié)了如下幾點(diǎn)優(yōu)化措施:

    (1)使用對(duì)象池實(shí)現(xiàn)對(duì)象的預(yù)加載以及回收。游戲?qū)ο笤趧?chuàng)建過(guò)程中需要消耗大量的資源,導(dǎo)致設(shè)備卡頓。使用對(duì)象池能夠?qū)τ螒驅(qū)ο筮M(jìn)行重復(fù)利用,減少資源的消耗,提高游戲性能。

    (2)在保證圖像質(zhì)量的前提下對(duì)圖像進(jìn)行壓縮,并減少冗余資源和重復(fù)資源。這樣做的好處是能夠減少安裝包的體積,降低內(nèi)存要求。

    (3)使用靜態(tài)貼圖烘焙代替動(dòng)態(tài)燈光效果。動(dòng)態(tài)燈光效果所消耗的性能非常巨大,一般適用于動(dòng)態(tài)的物體。對(duì)于靜態(tài)游戲資源,采用靜態(tài)貼圖烘焙能夠有效減少渲染所消耗的性能。

    (4)為常用的物體添加Tag或Layer,而不是每次都使用Find查找。在開(kāi)發(fā)中經(jīng)常涉及到游戲?qū)ο蟮牟檎?,遍歷查找所消耗的CPU資源是比較多的,通過(guò)添加Tag或Layer的方式查找能夠減小CPU的壓力。

    2.4 導(dǎo)彈追蹤算法

    圖4 導(dǎo)彈追蹤示意圖

    如圖4所示,假設(shè)導(dǎo)彈的位置為(x1,y1,z1),目標(biāo)的位置為(x2,y2,z2),連接導(dǎo)彈和目標(biāo)的坐標(biāo),得到一條線段,線段和導(dǎo)彈初始發(fā)射方向所構(gòu)成的夾角a就是要旋轉(zhuǎn)的角度,即在導(dǎo)彈飛向目標(biāo)的過(guò)程中,角a不斷趨向于0。假設(shè)d為初始位置導(dǎo)彈和目標(biāo)的距離,s為飛行過(guò)程中某一時(shí)刻導(dǎo)彈和目標(biāo)的距離,a為線段和導(dǎo)彈初始發(fā)射方向所構(gòu)成的夾角,則某一時(shí)刻線段和導(dǎo)彈方向所構(gòu)成的夾角angle可以表示為s/d*a。因此,在導(dǎo)彈不斷飛行的過(guò)程中,角度逐漸的縮小,當(dāng)距離為0時(shí),導(dǎo)彈的正前方就是目標(biāo)。算法實(shí)現(xiàn)核心思想如下:

    (1)獲取目標(biāo)的位置坐標(biāo);

    (2)獲取導(dǎo)彈發(fā)射方向與目標(biāo)位置連線的夾角;

    (3)計(jì)算本幀內(nèi)導(dǎo)彈移動(dòng)的距離以及需要偏移的角度,并對(duì)導(dǎo)彈角度進(jìn)行調(diào)整;

    (4)循環(huán)步驟(3)直至導(dǎo)彈到達(dá)目標(biāo)位置。

    3 實(shí)驗(yàn)結(jié)果

    圖5為關(guān)卡模塊實(shí)現(xiàn)的效果圖,通過(guò)選擇不同的關(guān)卡來(lái)進(jìn)行挑戰(zhàn),并解鎖后續(xù)的關(guān)卡。關(guān)卡上的星星表示當(dāng)前關(guān)卡的評(píng)級(jí)。在該界面可以點(diǎn)擊商店按鈕進(jìn)入商店,點(diǎn)擊建造按鈕進(jìn)入升級(jí)界面。圖6為道具商店界面,可以根據(jù)自身的金幣購(gòu)買(mǎi)所需的道具,增強(qiáng)戰(zhàn)斗力。

    圖5 游戲關(guān)卡選擇界面

    圖6 道具商店界面

    圖7為游戲戰(zhàn)斗畫(huà)面,玩家可以通過(guò)建造不同的炮塔來(lái)防御敵人的入侵,殺死敵人能夠獲得金幣,金幣可用來(lái)建造升級(jí)炮塔。當(dāng)消滅所有的敵人時(shí),就獲得勝利,游戲勝利畫(huà)面如圖8所示。

    圖7 游戲戰(zhàn)斗畫(huà)面

    圖8 游戲勝利畫(huà)面

    4 結(jié)語(yǔ)

    本文介紹了一個(gè)移動(dòng)塔防游戲的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程。本游戲使用3Ds MAX進(jìn)行游戲建模,使用碰撞系統(tǒng)來(lái)進(jìn)行碰撞檢測(cè),使用動(dòng)畫(huà)系統(tǒng)進(jìn)行動(dòng)畫(huà)控制,使用Unity Shader進(jìn)行渲染,使用MVC框架進(jìn)行更好地代碼維護(hù)。并且,運(yùn)用游戲優(yōu)化手段來(lái)平衡畫(huà)質(zhì)和性能,使用恰當(dāng)?shù)乃惴▉?lái)實(shí)現(xiàn)游戲邏輯。本文對(duì)塔防3D游戲設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行了詳盡的闡述,完成了3D休閑類(lèi)游戲的設(shè)計(jì)與開(kāi)發(fā)。

    猜你喜歡
    關(guān)卡魔法導(dǎo)彈
    海龜上岸
    松軟魔法
    東方少年(2022年28期)2022-11-23 07:10:06
    導(dǎo)彈燃料知多少
    軍事文摘(2020年14期)2020-12-17 06:27:16
    魔法筆
    神奇的魔法
    正在發(fā)射的岸艦導(dǎo)彈
    攔截那枚導(dǎo)彈
    我的魔法棒
    導(dǎo)彈轉(zhuǎn)運(yùn)
    2015年高考江蘇省物理卷一道題的3種解法
    无为县| 吴川市| 玉山县| 乌兰浩特市| 海丰县| 临湘市| 三江| 井研县| 凌源市| 汾西县| SHOW| 思茅市| 汾阳市| 济源市| 嘉荫县| 厦门市| 嵩明县| 松溪县| 甘谷县| 碌曲县| 洮南市| 徐闻县| 丽江市| 胶州市| 富源县| 南溪县| 东兴市| 怀来县| 横峰县| 威海市| 贺兰县| 从江县| 金沙县| 驻马店市| 岱山县| 靖宇县| 蒙自县| 延安市| 洛扎县| 栾城县| 农安县|