郭欣桐
(黑龍江工商學(xué)院 黑龍江省哈爾濱市 150025)
隨著生活節(jié)奏的加快,游戲成為人們首選的休閑娛樂方式。正當(dāng)適度的休閑游戲方式在釋放壓力的同時(shí)也可提高大腦反應(yīng)速度[1]。目前大部分休閑益智類游戲采用2D 與Internet 相結(jié)合的方式,如保衛(wèi)蘿卜、切水果、捕魚達(dá)人、憤怒的小鳥,玩法簡單易操作,適合各個(gè)年齡段人群,游戲內(nèi)容輕度,僅占用玩家碎片化時(shí)間,花費(fèi)的流量、時(shí)間、金錢較少,游戲畫風(fēng)簡易,色彩豐富。
本文基于Unity 游戲引擎的2D 功能,針對(duì)休閑益智類游戲的特點(diǎn),設(shè)計(jì)開發(fā)了一款休閑益智類游戲。通過使用Photoshop 設(shè)計(jì)制作游戲角色和各個(gè)場景中的游戲?qū)ο竽P停瑢⒛P蛯?dǎo)入unity 中搭建游戲場景,利用Unity 編程語言C#實(shí)現(xiàn)主角轉(zhuǎn)身、移動(dòng)、攻擊、主角與各物體碰撞消息的傳遞等游戲核心功能,從而完成整個(gè)游戲流程。
PhotoShop 簡稱“PS”,由Adobe 公司推出。PhotoShop 作為一款操作性強(qiáng),使用廣泛的圖形類平面處理軟件,在圖像處理領(lǐng)域有著較大的使用優(yōu)勢(shì)[2]。PhotoShop 其強(qiáng)大的色彩調(diào)節(jié)功能,可方便地對(duì)圖像的色彩進(jìn)行調(diào)節(jié)及校正,解決圖像本身由于曝光過度造成的過亮或光線不足而太暗的問題。濾鏡功能,可制作出各種絢麗奪目的特效,如風(fēng)格化,素描等以滿足使用者的需求。PhotoShop采用圖文界面,將常用功能以圖標(biāo)的形式匯總排列在工具箱中,使用者通過點(diǎn)擊對(duì)應(yīng)圖標(biāo)觸發(fā)相應(yīng)功能,完成編輯圖像的各種操作。目前PhotoShop 最新版本為PhotoShop2020。
Unity 是由丹麥Unity Technologies 公司開發(fā)的綜合性多平臺(tái)的游戲開發(fā)工具。使用Unity 可實(shí)現(xiàn)多平臺(tái)一次性開發(fā)且兼容性較好。Unity 支持Android,Windows,Linux,Web Player,PC,IOS,BlackBerry ,Window Phone8,Xbox 等多個(gè)平臺(tái)發(fā)布。2018年該引擎已經(jīng)擴(kuò)展到支持超過25 個(gè)平臺(tái)[3-4]??奢p松實(shí)現(xiàn)同款游戲在各大主流游戲平臺(tái)無縫并存以及跨平臺(tái)對(duì)決[5]。Unity 的強(qiáng)大之處在于其將編輯器、腳本、地形編輯、物理、著色器、網(wǎng)絡(luò)、跨平臺(tái)發(fā)布、版本控制等整合為一體?;赨nity 開發(fā)的游戲有爐石傳說,神廟逃亡2,夢(mèng)幻國度2,神鬼夢(mèng)幻等眾多游戲。由于手機(jī)游戲的流行,Unity Technologies 為Unity 引擎和編輯器推出了新的2D 功能和工作流程。在原有3D 功能的基礎(chǔ)上添加了新的子畫面紋理導(dǎo)入器類型、自動(dòng)合成功能和專用的2D 渲染器組件后,方便2D 資源的導(dǎo)入、操作、應(yīng)用。Unity2D 其特點(diǎn)是游戲場景加載速度快,節(jié)約計(jì)算機(jī)內(nèi)存資源。
玩家所面對(duì)的有星星,彩蛋,敵人,炸彈,草藥五個(gè)游戲角色。針對(duì)這五種游戲角色執(zhí)行不同的碰撞規(guī)則。玩家只有碰撞到星星和彩蛋時(shí),才可獲得相應(yīng)的積分,星星和彩蛋的積分不同,星星的積分為10 分,彩蛋的積分為20 分。碰撞到敵人和導(dǎo)彈時(shí),必然會(huì)失去一定的生命值,每次碰撞失去生命值20 點(diǎn)。玩家共有120 點(diǎn)生命值。玩家可通過鍵盤操作激活攻擊技能,用以躲避導(dǎo)彈或閃躲敵人。當(dāng)玩家碰撞到草藥可恢復(fù)生命值10 點(diǎn)。五種游戲角色的移動(dòng)速度會(huì)隨著時(shí)間的增長而加快,若游戲期間玩家的生命值為0,則說明玩家失敗,游戲結(jié)束。玩家可在游戲結(jié)束界面查看本次游戲積分,選擇重新開始或退出游戲。
游戲模型主要包括主角人物以及場景游戲?qū)ο竽P蛢刹糠帧?/p>
3.2.1 主角人物
游戲主角是游戲的重要組成部分之一。游戲主角選定為恐龍?;谟螒蛑黝}以及減輕玩家的視覺負(fù)擔(dān),游戲主角的顏色設(shè)計(jì)為綠色,這一色調(diào)也與游戲背景相呼應(yīng),有利于游戲場景還原,降低游戲場景的違和感。游戲主角的風(fēng)格設(shè)計(jì)為簡潔版,有利于不同年齡段的玩家接受。
設(shè)計(jì)游戲主角雛形,游戲主角主要分為龍角、頭部、身體、手部、尾巴,龍旗、腳六大部分。使用PS 繪圖工具繪制游戲主角輪廓。PS 中常用的繪圖工具有畫筆工具、鉛筆工具以及鋼筆工具。先使用鉛筆工具勾勒輪廓,為后續(xù)的鋼筆工具提供參考點(diǎn),在使用鋼筆工具進(jìn)行進(jìn)一步的細(xì)化繪制。相比鉛筆工具和畫筆工具,鋼筆工具可通過錨點(diǎn)更好地繪制曲線及復(fù)雜的路徑,編輯已有的路徑曲線。
使用鋼筆工具在不同圖層下繪制游戲主角的六大部分,但手和腳通過復(fù)制圖層的方式由一個(gè)圖形得到兩個(gè)相同的圖形,這種復(fù)制圖層的方式省時(shí)省力。填充各個(gè)圖層的顏色,調(diào)整圖層位置、和旋轉(zhuǎn)角度,完成主角輪廓各部位的拼接。但此時(shí)主角模型屬于平面圖像,無立體效果,為了用戶體驗(yàn)度,應(yīng)當(dāng)使圖像呈現(xiàn)效果。PS 中添加立體效果的方法很多,常用的為以下四種方式:
(1)圖層樣式中的“斜面和浮雕”功能與圖層樣式其他效果搭配使用。
(2)復(fù)制圖層,將新的圖層移動(dòng)至原圖層斜線方向,多次重復(fù)此操作,直至達(dá)到理想效果。該方式多用于文字。
(3)利用PS 的3D 功能。但此功能對(duì)PS 軟件版本有要求,版本需高于CS4。
(4)在圖像的邊緣添加高光和暗影。
本項(xiàng)目使用方法一和方法四,在設(shè)置斜面和浮雕樣式的基礎(chǔ)上,添加高光和陰影效果,從而創(chuàng)建出立體感及浮雕效果,將主角模型變形為陰刻形態(tài)。其中斜面和浮雕圖層樣式設(shè)置為內(nèi)斜面,方法選擇平滑,使用較深的顏色作為暗影顏色。
主角模型的輪廓已完成,但整體缺乏層次感,即圖層之間沒有進(jìn)行遮蓋,可通過調(diào)整圖層的順序或添加圖層模板,在圖層模板中將需要遮蓋的部分使用黑色畫筆進(jìn)行涂抹,需要顯示的部分使用白色畫筆進(jìn)行涂抹。本項(xiàng)目通過調(diào)整圖層的順序,在PS 圖層面板中,由上到下的順序依次為:左手,頭部,嘴內(nèi)部,嘴外層,尾巴,身體,龍旗,右手,左腳,右腳。
在主角模型輪廓的基礎(chǔ)上,添加各部位細(xì)節(jié),主要主要包括牙齒,眼睛,瞳孔,鼻孔,牙齒,龍角,頭部與嘴的銜接部分。通過PS 中的矩形工具,圓角矩形工具,橢圓工具,多邊形工具,直線工具,自定義工具可方便地繪制相應(yīng)的圖形。本項(xiàng)目中的眼睛,鼻孔,瞳孔,頭部與嘴的銜接部分均使用橢圓工具繪制。眼睛部位添加斜面和浮雕效果,使其更加立體,并利用灰色畫筆在眼睛的下部邊緣繪制暗影。PS 共提供了五種漸變方式,分別為線性漸變、徑向漸變、角度漸變、對(duì)稱漸變和菱形漸變。瞳孔依據(jù)需求需使用徑向漸變,即從起點(diǎn)顏色白色到終點(diǎn)顏色黑色從內(nèi)到外進(jìn)行圓形漸變。設(shè)計(jì)后的主角模型如圖1所示。
圖1:主角模型
3.2.2 場景游戲?qū)ο竽P?/p>
游戲共有四個(gè)界面,分別為游戲進(jìn)入界面,游戲介紹界面,游戲關(guān)卡界面,游戲結(jié)束界面。主要針對(duì)以上四個(gè)界面進(jìn)行場景以及相關(guān)模型設(shè)計(jì)與創(chuàng)建。
(1)游戲進(jìn)入場景游戲?qū)ο竽P汀S螒蜻M(jìn)入界面需要制作的模型為開始按鈕,退出按鈕,界面背景,游戲文字。
開始按鈕和退出按鈕具有兩個(gè)狀態(tài),正常狀態(tài)和點(diǎn)擊狀態(tài),點(diǎn)擊狀態(tài)在正常狀態(tài)的基礎(chǔ)上,調(diào)整大小,文字顏色更改為紅色,使其突出顯示。正常狀態(tài)下的開始按鈕與退出按鈕的制作流程相似,均采用圓角矩形工具,填充藍(lán)色漸變。使用橫排文字工具輸入對(duì)應(yīng)文字,將文字位置調(diào)整至矩形之中。使用鋼筆工具繪制矩形邊框下方陰影。點(diǎn)擊狀態(tài)在上述完成的模型基礎(chǔ)上,使用魔棒工具,單獨(dú)選定文字部分,更改顏色即可。
游戲進(jìn)入界面背景借鑒游戲“憤怒的小鳥”原圖,將原圖中的文字以及游戲角色去掉。
PS 中去除多余部分的方法主要有兩種:1.使用索要工具。2.使用仿制圖章工具。由于天空背景為漸變色,變化較細(xì)微,不適合使用方法1 處理文字,故使用方法2 仿制圖章工具,選取文字周圍進(jìn)行去除。原圖中的游戲角色去除使用方法2,將小鳥周圍部分索套,按住Alt 鍵將索套部分移動(dòng)小鳥將其遮擋。
游戲文字為Dinosaur catch eggs。使用文字工具輸入文字,通過變形文字工具將文字變形,添加斜面和浮雕,內(nèi)發(fā)光以及陰影圖層樣式。在PS 中文字圖層不能直接使用濾鏡,應(yīng)將文字圖層?xùn)鸥窕D(zhuǎn)換為正常圖層,但圖層的內(nèi)容變?yōu)椴豢删庉嫷奈谋?,柵格化文字后,添加濾鏡水波效果。
(2)游戲介紹場景游戲?qū)ο竽P?。游戲介紹界面需要制作的模型:星星、彩蛋、敵人,藥包。這些圖片的處理過程中須截取部分圖像。的方法:1.利用裁切工具2.利用選框工具3.魔棒工具。使用裁剪工具直接將星星、彩蛋、敵人,藥包從相應(yīng)的圖中裁出,在使用魔棒工具選中背景將其刪除。最后導(dǎo)出文件格式為PNG。PNG 格式的圖像背景透明。
(3)游戲關(guān)卡場景游戲?qū)ο竽P汀S螒蜿P(guān)卡界面需要制作的模型:石頭、草地、火球、子彈頭以及7 種狀態(tài)的生命條。
石頭,火球,子彈頭三者的制作流程與上述游戲介紹界面的星星處理方法一致。7 種狀態(tài)的生命條由一張只有一格血(20 點(diǎn))的生命條圖片使用仿制圖章工具制作而成。
(4)游戲結(jié)束場景游戲?qū)ο竽P?。游戲結(jié)束界面需要制作的模型:再玩一次按鈕,Score 文字,結(jié)束邊框,game over 文字,乘號(hào)。其中再玩一次按鈕分為兩種狀態(tài),正常狀態(tài)以及點(diǎn)擊狀態(tài)。再玩一次按鈕的正常顯示狀態(tài)和點(diǎn)擊狀態(tài)圖片的制作方法與開始按鈕一致。game over 文字使用文字工具輸入,添加變形文字中的上弧效果。乘號(hào)使用文字工具輸入,填充顏色為黃色。
4.1.1 游戲進(jìn)入場景
該場景主要實(shí)現(xiàn)的是玩家通過點(diǎn)擊界面的兩個(gè)按鈕進(jìn)入游戲或退出游戲。主要使用OnMouseEnter,OnMouseExit 函數(shù)和IEnumerator,Application.LoadLevel 函數(shù)實(shí)現(xiàn)功能。在Unity 中當(dāng)鼠標(biāo)進(jìn)入到GUI 元素或碰撞體時(shí)調(diào)用OnMouseEnter 函數(shù),鼠標(biāo)移出GUI 元素或碰撞體時(shí)調(diào)用OnMouseExit 函數(shù),當(dāng)用戶點(diǎn)擊按鈕時(shí)使用Application.LoadLevel 函數(shù)加載File 菜單Build Settings 關(guān)卡列表中的關(guān)卡。
4.1.2 游戲介紹場景
該場景主要實(shí)現(xiàn)的是顯示游戲規(guī)則文字,15 秒之后自動(dòng)轉(zhuǎn)到游戲關(guān)卡場景。主要使用Time.deltaTime,Application,LoadLevel 函數(shù)完成。顯示文字通過選擇GameObject 菜單中CreateOther|GUIText 建立GUI,將相應(yīng)的文字輸入至屬性面板中的Text 處。
4.1.3 游戲關(guān)卡場景
該場景主要實(shí)現(xiàn)的是子彈的發(fā)射。通過子彈隨機(jī)產(chǎn)生彩蛋,敵人,星星,草藥,設(shè)置各游戲配角的下落時(shí)間間隔為5 秒。主要使用二維數(shù)組Rigidbody2D[]存放物體,在實(shí)例化時(shí)使用隨機(jī)數(shù)Random.Range()實(shí)現(xiàn)隨機(jī)掉落物體。血條通過選擇GameObject 菜單中CreateOther|GUITexture,建立GUI,將其顯示在界面左上角,方便用戶直觀地查看自身血量。
4.1.4 游戲結(jié)束場景
該場景主要實(shí)現(xiàn)的是顯示本局游戲數(shù)據(jù),并使玩家通過點(diǎn)擊兩個(gè)按鈕能夠重新開始游戲或退出游戲。主要使用OnGUI()實(shí)現(xiàn),在相應(yīng)的位置用GUI.Label()來顯示相應(yīng)的數(shù),需要調(diào)用游戲關(guān)卡中的變量,后續(xù)小節(jié)會(huì)講到具體實(shí)現(xiàn)方法。界面其他圖片直接拖拽至相應(yīng)的位置,按鈕的顯示通過選擇GameObject 菜單中CreateOther|GUITexture,建立GUI。
4.2.1 游戲主角移動(dòng)轉(zhuǎn)身功能
游戲主角移動(dòng)功能通過鍵盤左右方向鍵實(shí)現(xiàn)向左或右進(jìn)行移動(dòng)。在移動(dòng)的同時(shí),系統(tǒng)判斷主角朝向,確定是否使游戲主角轉(zhuǎn)身。因游戲主角為平面模型,進(jìn)行左右轉(zhuǎn)身時(shí),模型須向左轉(zhuǎn)或向右旋轉(zhuǎn)180 度。實(shí)現(xiàn)過程主要涉及三個(gè)函數(shù),分別為Update,FixedUpdate 以及自定義函數(shù)Flip。Update 函數(shù)中通過Input.GetAxis("Horizontal")獲取水平軸的方向。在Unity 中FixedUpdate函數(shù)在固定的是時(shí)間間隔執(zhí)行,不受游戲幀率的影響。FixedUpdate函數(shù)判斷主角人物的朝向。通過獲取水平軸方向h 判斷玩家是否按下左右鍵,h>0 代表玩家按下右鍵,h<0 代表玩家按下左鍵,布爾變量facingRight 判斷主角是否朝向右側(cè),只有當(dāng)主角朝向右側(cè),按下左鍵或主角朝向左側(cè),按下右鍵這兩種情況下才可轉(zhuǎn)身。自定義Flip()函數(shù)將facingRight 進(jìn)行取反操作,通過引用中間變量theScale 改變transform.localScale,transform.localScale 表示獲取主角當(dāng)前的局部縮放值,在Unity 中transform 的position 和Scale 只能整體改變,若只改變其中一項(xiàng),用自定義變量代替轉(zhuǎn)換。
4.2.2 游戲主角攻擊功能
主角攻擊功能主要指的是發(fā)射火球阻擋炸彈的攻擊,達(dá)到躲避炸彈的目的。在Untiy 中創(chuàng)建GameObject 作為發(fā)射器,通過該發(fā)射器發(fā)射火球。將火球設(shè)置為預(yù)制件(Prefab)。在Unity 中預(yù)制件是根據(jù)需要預(yù)先做好的物體,預(yù)制物體可以保存火球的所有信息。主角攻擊功能代碼由Update 函數(shù)實(shí)現(xiàn)完成,通過Input.GetMouseButtonDown(0)函數(shù)判斷玩家是否按下鼠標(biāo)左鍵,三維向量獲取當(dāng)前物體的位置transform.postion,在當(dāng)前位置通過Instantiate 函數(shù)實(shí)例化預(yù)制件火球。
4.2.3 主角與各物體碰撞消息傳遞功能
游戲中的炸彈以及掉落的各類游戲元素不能穿破主角人物。為了達(dá)到該物理效果,場景中的物體需要添加碰撞,以便完成碰撞檢測。在Unity 中要產(chǎn)生碰撞須為游戲?qū)ο筇砑觿傮w和碰撞器,剛體可以讓物體在物理影響下運(yùn)動(dòng),碰撞器是物理組件的一類,在物理模擬中,沒有碰撞體的剛體會(huì)彼此相互穿過。Unity 中檢測碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種是利用觸發(fā)器。碰撞器和觸發(fā)器主要的區(qū)別為:碰撞器是觸發(fā)器的載體,而觸發(fā)器只是碰撞器身上的一個(gè)屬性。為prefabs 文件夾中的預(yù)制件添加Collide。通過OnTriggerEnter 函數(shù)實(shí)現(xiàn)主角物體與下落物體碰撞消息傳遞,在Unity 使用OnTriggerEnter 需將Collider 屬性中的OnTrigger 勾選。下落物體通過代碼DropObject 中的SendMessage傳遞消息給主角人物。判斷碰撞物是彩蛋、炸彈、草藥、星星、石頭,是通過識(shí)別碰撞物屬性中的“Tag”標(biāo)簽屬性實(shí)現(xiàn)[6],當(dāng)玩家與某物體發(fā)生碰撞時(shí),通過if 語句判斷與哪一物體發(fā)生碰撞,從而實(shí)現(xiàn)主角與各物體碰撞消息傳遞,根據(jù)碰撞物體計(jì)進(jìn)行積分、血量計(jì)算,將血條的變化通過OnGUI 顯示出來。
游戲最終效果如圖2所示。
圖2:游戲最終效果
本次設(shè)計(jì)通過Unity 引擎實(shí)現(xiàn)了休閑益智類游戲—恐龍吃彩蛋的設(shè)計(jì)與開發(fā)。游戲主要實(shí)現(xiàn)了主角基本操作(移動(dòng),轉(zhuǎn)身,攻擊)、游戲場景對(duì)象自動(dòng)加載、主角與游戲場景對(duì)象碰撞信息傳遞,游戲關(guān)卡數(shù)據(jù)分析等功能。游戲可在PC 端以及安卓手機(jī)端安裝且游戲交互功能正常,可流暢運(yùn)行。該游戲操作簡單,具備一定的可玩性。