趙紫儒(青島工學(xué)院,山東 青島 266300)
隨著互聯(lián)網(wǎng)技術(shù)的迅速興起和發(fā)展,人們生活質(zhì)量在不斷的提高,人們對生活品質(zhì)也在不斷增加。當(dāng)前計算機電腦的普及,玩電腦游戲已經(jīng)成為人們娛樂的主要方式之一[4]。選擇一款獨特的、吸引人的、畫面精美的游戲已成為一種主流。盡管目前市場上存在各種游戲,但塔防游戲市場仍然相當(dāng)大。 因為它的特殊之處在于人們在游戲過程中沉浸其中,而且難度越大,挑戰(zhàn)性越強,越刺激。而且對于工作的人來說,也不可能花費大量時間用在游戲上,他們會在休閑時間,來享受這短暫的快樂,所以像這款保衛(wèi)蘿卜塔防游戲就剛好迎合了他們的需求。
Unity是近些年來十分熱門的游戲?qū)I(yè)開發(fā)引擎之一,包含各種開發(fā)工具,可發(fā)布多平臺的一個全面整合的專業(yè)游戲引擎,它可以一邊運行一邊調(diào)試,在運行調(diào)試過程中可以讓開發(fā)者挖掘到其中的樂趣,不斷迸發(fā)想法,不斷學(xué)習(xí)。
一個完整的Unity程序是由若干個場景組合而成的,每個場景都由許多游戲?qū)ο蠼M成,每個游戲?qū)ο罂梢杂腥舾蓚€組件,腳本也是組件之一,通過腳本控制場景中的物體,跳轉(zhuǎn)場景等等是主要的操作手段,可以說,腳本即是大腦。
Unity簡單直觀的設(shè)計界面,高度的兼容性,使得游戲開發(fā)者能高效的完成工作。因此,Unity成為了目前國內(nèi)大部分游戲開發(fā)者的首選工具。
(1)對象池
對象池的應(yīng)用在于減少內(nèi)存開銷,其原理就是把可能要反復(fù)用到的對象,先存在一個“池子”里,要用的時候就調(diào)出來,不用的時候就放回去[5],比如炮塔的子彈就是用的對象池技術(shù)。
(2)自動尋路算法
自動尋路算法意思是從某點自動到另一個點的算法[3],一般用于解放玩家雙手,自動尋找某個NPC等,在塔防游戲中,自動尋路一般用于怪物身上,通過在地圖上設(shè)置尋路點,通過判斷這些點來使怪物沿著一條固定的路徑前進。
人們生活節(jié)奏越來越快,游戲已經(jīng)成為人們生活中必不可少的一部分,人們通過玩游戲放松自己、消遣時間,而游戲的種類也是越出越多,通過對學(xué)生發(fā)放的100份調(diào)查問卷得出,針對“你喜歡哪款類型的游戲”這一問題中得出,47位同學(xué)選擇了塔防游戲這一選項,可見塔防游戲并非沉寂,塔防游戲時間短,無論何時何地就能隨時玩一把,而且代入感強,使玩家沉浸其中,緊張又刺激,隨著關(guān)卡越高難度也越來越難,這一點更能帶領(lǐng)玩家要強的本質(zhì)。
保衛(wèi)蘿卜是一款休閑策略類塔防游戲,怪物會沿著一條道路前進,玩家通過建立炮塔攻擊怪物來保衛(wèi)蘿卜不被怪物吃掉,不同關(guān)卡難度不同,關(guān)卡越高,難度越大[1]。玩家進入游戲后,在主菜單選擇游戲模式,跳轉(zhuǎn)到關(guān)卡界面,可以查看幫助和返回主界面,默認(rèn)玩家只能選擇第一關(guān),后續(xù)關(guān)卡為鎖定狀態(tài),玩家只有在通過第一關(guān)后才能進入第二關(guān),當(dāng)所有關(guān)卡都通關(guān)后,跳轉(zhuǎn)通關(guān)界面,玩家可以選擇重新開始游戲或者清檔,重新開始游戲闖過的關(guān)卡可以直接進入;清檔后相當(dāng)于初始化,回到游戲最初狀態(tài),關(guān)卡鎖定。
本設(shè)計為2D策略塔防類游戲,場景界面元素通過Unity5.6自帶的插件UGUI,導(dǎo)入外部資源包,在場景中創(chuàng)建Canvas畫布為基礎(chǔ),ITween插件輔助界面動畫顯示,腳本進行控制。整個游戲系統(tǒng)分為兩大部分:游戲基礎(chǔ)模塊和游戲邏輯管理模塊,游戲基礎(chǔ)模塊又分為資源管理模塊,數(shù)據(jù)存儲模塊和頁面UI管理模塊,資源管理模塊中包含著游戲的全部資源,包括動畫、特效、2D圖形,關(guān)卡配置文件等。游戲邏輯管理模塊包含著游戲最重要的邏輯模塊。
4.1.1 游戲框架設(shè)計
Unity中的每個場景都以樹狀層次結(jié)構(gòu)組織游戲?qū)ο螅總€游戲?qū)ο罂梢杂卸鄠€組件。 因此,整個游戲系統(tǒng)都要符合這種規(guī)范,在這種規(guī)范下為了滿足設(shè)計的高內(nèi)聚、低耦合,采用MVC模型來設(shè)計游戲的層次結(jié)構(gòu) ,使得游戲結(jié)構(gòu)變得清晰簡單有條理,之間互不影響、互相隔離開來,方便日后的功能擴展。
4.2.1 地圖編輯器
地圖是游戲中重要的一部分,在本游戲中更是如此,通過MapEditor類和Map類實現(xiàn)在編輯器內(nèi)對地圖關(guān)卡的加載關(guān)卡、讀取關(guān)卡XML數(shù)據(jù)、清除塔位、消除路徑、保存關(guān)卡數(shù)據(jù)等操作,創(chuàng)建Map類來保存地圖相關(guān)屬性,通過OnDrawGizmos方法計算地圖的大小,通過對地圖的計算繪制行列,將地圖分割成等大小的格子。創(chuàng)建地圖尋路點和怪物的尋路路徑,通過鼠標(biāo)左鍵點擊格子可以添加塔位,鼠標(biāo)右鍵點擊刪除塔位,設(shè)置尋路路徑。
4.2.2 讀取、保存關(guān)卡
在塔防游戲里,關(guān)卡是游戲的核心,關(guān)卡中地圖的數(shù)據(jù)就顯得尤為重要。通過加載關(guān)卡文件,顯示出關(guān)卡,關(guān)卡文件中包含關(guān)卡名稱、怪物行走路徑點、可放置的塔的位置以及出怪的數(shù)量信息等、在編譯器里可以對地圖進行編輯,修改路徑,炮塔塔位的數(shù)量,位置信息等,修改完畢后我們可以將修改的數(shù)據(jù)保存到地圖中。
4.2.3 游戲?qū)ο?/p>
本游戲有三大游戲?qū)ο螅}卜,子彈和炮臺,對各個游戲?qū)ο髣?chuàng)建相對應(yīng)的腳本來實現(xiàn)游戲?qū)ο蟮膶傩裕}卜怪物的相關(guān)信息,炮塔的創(chuàng)建、升級、攻擊、銷毀,子彈的跟蹤等等。在游戲界面,主角蘿卜是處于一個動態(tài)的存在,蘿卜在正常狀態(tài)會眨眼睛,處于正常狀態(tài),在被怪物攻擊了之后會全身抖一下,進入被攻擊狀態(tài),Role類中保存了蘿卜和怪物血量信息和死亡條件。炮塔有兩個狀態(tài),一個是沒有怪物在范圍內(nèi)時,炮塔會處于正常靜止?fàn)顟B(tài),當(dāng)有怪物進入攻擊范圍時,炮塔會跳轉(zhuǎn)到攻擊狀態(tài),自動搜尋敵人轉(zhuǎn)向。
本文闡述了基于Unity游戲開發(fā)引擎,開發(fā)一款策略塔防類游戲-保衛(wèi)蘿卜。以培養(yǎng)學(xué)習(xí)者自主學(xué)習(xí)、單獨思考、動手能力為基準(zhǔn),以對象池技術(shù)、自動尋路算法及動態(tài)加載等技術(shù)設(shè)計并實現(xiàn)基于Unity的塔防游戲保衛(wèi)蘿卜。該游戲運行流暢,性能穩(wěn)定,不需要網(wǎng)絡(luò),由于Unity的跨平臺性,可隨時隨地打開。