王艷 華唯辰
摘要:目前人們生活節(jié)奏快碎片化時(shí)間多,多數(shù)人更愿意利用碎片化時(shí)間玩一些不易沉迷的游戲。為了迎合現(xiàn)代人對(duì)游戲的需求,旨在開(kāi)發(fā)一款不易讓人沉迷、鍛煉玩家快速反應(yīng)能力的三維ARPG類(lèi)游戲?;赨nity3D游戲開(kāi)發(fā)技術(shù)在Visu-aIStudi02019平臺(tái)、使用C#開(kāi)發(fā)語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)了這款名為劍圣的三維ARPG游戲。首先分析選題背景,然后描述游戲開(kāi)發(fā)的目的、玩法以及包含的功能模塊,接著詳細(xì)闡述游戲中關(guān)鍵技術(shù)的開(kāi)發(fā)思路,最后展示了游戲的實(shí)現(xiàn)效果圖。
關(guān)鍵詞:Unity3D;ARPC;游戲;碰撞檢測(cè);人物交互
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)29-0199-03
1 概述
ARPG( Action Role-playing Game)即動(dòng)作類(lèi)角色扮演游戲,有很大一部分是單機(jī)游戲。在這類(lèi)游戲中,用戶(hù)控制某個(gè)角色并執(zhí)行相應(yīng)的動(dòng)作(尤其是攻擊動(dòng)作)在特定環(huán)境中活動(dòng),AR-PC融合了動(dòng)作游戲和傳統(tǒng)RPG游戲的元素,將激烈的打斗場(chǎng)面融人其中,大大加快了游戲的節(jié)奏感和緊張感,更加容易調(diào)動(dòng)用戶(hù)的參與感,它增強(qiáng)了RPG游戲的交互性和動(dòng)作感[1],也使得ARPG類(lèi)游戲在中國(guó)受到越來(lái)越多人喜歡。
Unity3D作為目前主流的3D游戲開(kāi)發(fā)引擎,集圖形、音頻、物理和網(wǎng)絡(luò)等多功能為一體[2j,可以編輯地形、搭建3D場(chǎng)景、并通過(guò)腳本編寫(xiě)對(duì)角色進(jìn)行控制,尤其他強(qiáng)大的物理引擎還能模擬出更加逼真的場(chǎng)景,使游戲更加真實(shí)[3]。所以本文基于Uni-ty3D技術(shù)和Visual Studi02019平臺(tái)、使用C#語(yǔ)言開(kāi)發(fā)一款A(yù)R-PG游戲系統(tǒng)。
當(dāng)今社會(huì)發(fā)展飛速,人們生活節(jié)奏快碎片化時(shí)間比較多,多數(shù)人更愿意選擇玩一些簡(jiǎn)單易操作又不易沉迷的游戲來(lái)休息與放松,所以本文開(kāi)發(fā)的是一款只有刀光劍影、沒(méi)有讓人沉迷的故事情節(jié)、旨在鍛煉玩家快速反應(yīng)能力的ARPG類(lèi)游戲。
2 游戲設(shè)計(jì)
2.1 游戲開(kāi)發(fā)目的
本游戲旨在實(shí)現(xiàn)一個(gè)3D的ARPG單機(jī)闖關(guān)游戲。本游戲中人人都是劍圣,沒(méi)有花里胡哨的法術(shù),也沒(méi)有一招必勝的絕招,有的只是以刀劍去會(huì)武林各路高手的豪邁、勇猛,主要考驗(yàn)玩家在極短時(shí)間內(nèi)做出反應(yīng)操作的能力,可以鍛煉玩家的快速反應(yīng)能力。
2.2 游戲玩法
本游戲共有2種角色:劍客和敵人,共4個(gè)關(guān)卡。玩家在進(jìn)入游戲后,可以選擇“開(kāi)始新游戲”“繼續(xù)游戲”和“退出游戲”。如果是新游戲,先是挑戰(zhàn)一個(gè)教學(xué)關(guān)卡,成功后繼續(xù)挑戰(zhàn)剩下三個(gè)打斗關(guān)卡;如果是繼續(xù)游戲,則繼續(xù)使用上一次游戲退出時(shí)劍客的屬性,比如體力值、攻擊力等,跳過(guò)教學(xué)關(guān)卡,直接挑戰(zhàn)三個(gè)打斗關(guān)卡。所有角色只有體力值沒(méi)有生命值,角色一旦受到傷害只會(huì)削減體力值,劍客體力值為零則挑戰(zhàn)失敗,以武會(huì)友不傷性命。敵人被擊敗后會(huì)掉落增加劍客技能和攻擊力的寶物。
2.3 游戲功能模塊設(shè)計(jì)
本游戲包括三個(gè)功能模塊:場(chǎng)景設(shè)計(jì)模塊、人物功能模塊、游戲功能模塊,如圖1所示。
1)場(chǎng)景模塊包括了場(chǎng)景環(huán)境的搭建以及界面UI的顯示,本游戲系統(tǒng)設(shè)計(jì)了四個(gè)場(chǎng)景:教學(xué)場(chǎng)景和三個(gè)打斗場(chǎng)景,和六個(gè)界面:開(kāi)始界面、設(shè)置界面、劍客信息界面、勝利界面、失敗界面、通關(guān)界面。
2)人物功能模塊包括對(duì)劍客和敵人的控制功能模塊。
劍客:劍客由玩家操控,在體力值大于0時(shí),可以前后左右移動(dòng);在防御時(shí),可以通過(guò)翻滾、格擋進(jìn)行閃避,當(dāng)劍客進(jìn)行格擋時(shí),敵人的普通攻擊不會(huì)對(duì)其造成傷害,并且格擋在特定情況下會(huì)對(duì)敵人彈反,彈反成功會(huì)對(duì)敵人造成硬直;劍客在攻擊時(shí),在精力值不為0時(shí),可進(jìn)行普通攻擊、連擊和技能攻擊;劍客受到傷害時(shí)會(huì)硬直,體力值會(huì)減少,當(dāng)體力值變?yōu)?時(shí),玩家挑戰(zhàn)失敗,游戲重新開(kāi)始。
敵人:本游戲包含3種敵人:小怪、精英怪物和boss,具有追逐、自動(dòng)躲避障礙、防御、進(jìn)攻和反擊等邏輯,敵人對(duì)劍客進(jìn)行攻擊,其中精英怪物和Boss能夠?qū)偷倪B續(xù)攻擊和技能攻擊進(jìn)行格擋,如果敵人一直被劍客攻擊會(huì)有一定概率的反擊操作,如果劍客一直格擋敵人會(huì)看破。
3)游戲功能模塊是本游戲系統(tǒng)的主體部分,包括音效管理、公共方法封裝、流程控制、點(diǎn)擊事件、傳送邏輯、底層數(shù)據(jù)管理,該模塊采用MVC框架進(jìn)行設(shè)計(jì)[4]。
3 游戲關(guān)鍵技術(shù)
3.1 場(chǎng)景實(shí)現(xiàn)
由于場(chǎng)景建模不是本系統(tǒng)的重點(diǎn)內(nèi)容,所以場(chǎng)景中的地圖環(huán)境素材來(lái)源于網(wǎng)上的開(kāi)源素材,導(dǎo)人到Unity3D項(xiàng)目的Assert文件夾中,將基本的素材(石頭、青苔、樹(shù)木、葉子、木板等)組合成一個(gè)prefab預(yù)制體(山體、樹(shù)木、房屋),在場(chǎng)景中添加物體以及人物,并為場(chǎng)景中的物體、人物加載碰撞器( BoxColider)組件和剛體(RigidBody)組件,方便后續(xù)實(shí)現(xiàn)重力、碰撞等物理效果,最后烘焙場(chǎng)景光源和可到達(dá)區(qū)域[5]。
3.2 人物碰撞檢測(cè)
本游戲系統(tǒng)主要涉及劍客與敵人間的攻擊,為了呈現(xiàn)攻擊碰撞時(shí)的真實(shí)性和準(zhǔn)確性,需要為劍客和敵人設(shè)置碰撞檢測(cè)。本系統(tǒng)采用Unity提供的BoxColider碰撞器組件、觸發(fā)器進(jìn)行碰撞檢測(cè)[6]。
3.2.1劍客的攻擊碰撞檢測(cè)
劍客的攻擊碰撞檢測(cè),是將BoxColider組件和PlayerSward-Attack腳本掛載到劍客人物模型的右手的劍上,并勾選Is Trig-ger屬性[7-8]。當(dāng)劍碰撞器接觸到敵人軀體碰撞器時(shí),物理上看劍會(huì)穿過(guò)敵人,在PlayerSwardAttack腳本中進(jìn)入OnTriggerEnter方法,首先實(shí)例化劍客的攻擊特效,并設(shè)置一個(gè)攻擊參數(shù)is—CanAttack,判斷玩家操控劍客時(shí)是否按下攻擊鍵(即劍客是否正在攻擊),如果沒(méi)在攻擊,比如人物移動(dòng)時(shí)劍只是碰到敵人并沒(méi)有攻擊敵人,則直接退出方法,物理上沒(méi)有任何效果,如果正在攻擊,敵人則受到傷害,播放受傷動(dòng)畫(huà)并減少血量,同時(shí)獲取敵人,將敵人掛載的enemySwardAttack腳本中的攻擊參數(shù)設(shè)置為false,這樣可以保證敵人在被攻擊時(shí)自身的攻擊碰撞器失效,避免攻擊邏輯上的混亂。
3.2.2 敵人的攻擊碰撞檢測(cè)
敵人攻擊碰撞器的實(shí)現(xiàn)原理與劍客攻擊碰撞器的相同,只是組件和腳本被掛載到了一個(gè)透明的、立方體形狀的游戲物體上,如圖2所示,若劍客在這個(gè)碰撞器范圍內(nèi),敵人便隔一定時(shí)間調(diào)用攻擊方法,若不在碰撞器范圍內(nèi),敵人根據(jù)距離來(lái)判斷是否追蹤劍客。
在敵人攻擊劍客時(shí),激活其攻擊碰撞器,并實(shí)例化劍客被攻擊的特效,重置攻擊時(shí)間間隔attackTimer。因?yàn)閯鸵恢痹诠襞鲎财鞣秶鷥?nèi),所以先設(shè)置碰撞器關(guān)閉,當(dāng)攻擊間隔at-tackTimer到時(shí)才激活碰撞器對(duì)劍客進(jìn)行攻擊,這樣不會(huì)一直對(duì)劍客造成傷害.實(shí)現(xiàn)敵人的間隔攻擊。
3.2.3 敵人和劍客的軀體碰撞檢測(cè)
在劍客和敵人的軀體模型上掛載BoxColider碰撞器組件,但均不勾選IsTrigger這個(gè)觸發(fā)器屬性,在游戲中稱(chēng)為“碰撞體積”,不勾選觸發(fā)器屬性的效果就如同現(xiàn)實(shí)生活中兩個(gè)人面對(duì)面移動(dòng)不可能直接穿過(guò)去而是會(huì)撞在一起一樣,在游戲中劍客同樣不能從一堆敵人中穿過(guò)去,而是會(huì)被包圍。
3.3 人物間交互
在Unity3D中,實(shí)現(xiàn)虛擬交互的方式是編寫(xiě)能夠?qū)崿F(xiàn)交互功能的腳本,并將相應(yīng)腳本掛載到相應(yīng)的3D物體上。本游戲系統(tǒng)關(guān)鍵交互技術(shù)為:敵人智能追蹤、劍客彈反和劍客連擊。
3.3.1敵人智能追蹤
敵人智能追蹤是使用Navigation導(dǎo)航系統(tǒng)實(shí)現(xiàn)的[9],在Nav-igation系統(tǒng)中先烘焙地圖上的導(dǎo)航網(wǎng)格確定哪些地方是可達(dá)到的(Walkable),再使用NavMeshAgent組件控制角色的移動(dòng)。敵人具有轉(zhuǎn)身速度、仇恨距離、攻擊距離、攻擊間隔等屬性,在敵人這個(gè)G ameObject上掛載的EnemyController腳本中實(shí)例化導(dǎo)航系統(tǒng),在A(yíng)wake方法中調(diào)用NavMeshAgent里的API獲取劍客的實(shí)時(shí)位置坐標(biāo),并得出劍客與敵人的距離,若該距離在敵人的仇恨距離內(nèi)追擊玩家,當(dāng)進(jìn)入攻擊距離后開(kāi)始根據(jù)攻擊間隔攻擊玩家。
3.3.2 劍客彈反
敵人攻擊的同時(shí)若玩家能在指定之間內(nèi)按下空格鍵便可進(jìn)行彈反。在敵人的碰撞器腳本中,當(dāng)敵人進(jìn)行攻擊時(shí),將彈反機(jī)會(huì)參數(shù)isCanOpenPlayProtect設(shè)置為true,進(jìn)入彈反判斷,計(jì)算玩家按下空格鍵的反應(yīng)時(shí)間,設(shè)置控制玩家彈反的判定時(shí)間(例如1s),此時(shí)考驗(yàn)和鍛煉玩家反應(yīng)速度的時(shí)候到了,當(dāng)玩家反應(yīng)時(shí)間大于判定時(shí)間時(shí)則彈反失敗,劍客受到傷害;若玩家反應(yīng)時(shí)間小于判定時(shí)間則彈反成功,效果如圖3所示,調(diào)用Tools單例中取消敵人傷害的方法,并實(shí)例化彈反的特效,播放彈刀的音效,并重置敵人的攻擊時(shí)間,播放敵人受傷動(dòng)畫(huà),即敵人產(chǎn)生硬直,效果如圖4。
3.3.3 劍客連擊
劍客攻擊時(shí)會(huì)消耗精力值,在調(diào)用攻擊方法前,先判斷劍客當(dāng)前的精力值是否大于攻擊消耗的精力,若大于則調(diào)用攻擊方法、播放攻擊動(dòng)畫(huà)、AudioController設(shè)置攻擊音效,并進(jìn)行是否連擊的判斷。若玩家本次與上一次的攻擊間隔小于系統(tǒng)設(shè)定的攻擊間隔attackTimer則認(rèn)為是連擊,再根據(jù)連擊次數(shù)thi-sAttacklndex獲取連擊進(jìn)度,再依據(jù)連擊進(jìn)度播放不同的攻擊動(dòng)畫(huà)和音效。
4 游戲?qū)崿F(xiàn)
部分游戲?qū)崿F(xiàn)效果,如圖5所示。
5 結(jié)語(yǔ)
本文基于Unity3D技術(shù)和VisualStudi02019平臺(tái)、使用C#開(kāi)發(fā)語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)了這款A(yù)RPG游戲。游戲只有劍客與敵人間的對(duì)戰(zhàn),不易讓人沉迷其中,尤其是彈反系統(tǒng)的設(shè)計(jì),更好的考驗(yàn)、鍛煉了玩家的反應(yīng)能力,但游戲場(chǎng)景不夠華麗、界面也不夠美觀(guān),在這個(gè)方面還有很大提升空間。
參考文獻(xiàn):
[1]鄧增強(qiáng),基于Unity3D的輕量級(jí)ARPG手機(jī)游戲系統(tǒng)研究與應(yīng)用[D].廣州:廣東工業(yè)大學(xué),2017.
[2]尹大偉,張熙若,李歡歡,等,基于Unity3D的虛擬校園漫游系統(tǒng)及其關(guān)鍵技術(shù)研究[J].軟件工程,2019,22(9):17-19.
[3]朱晴.Unity3D開(kāi)發(fā)工具在3D游戲開(kāi)發(fā)中的應(yīng)用[Jl,電子技術(shù)與軟件工程,2019(22):58-59.
[4]馬春江,張明禎.Unity3d游戲開(kāi)發(fā)中的面向組件思想和MVC框架[J].信息與電腦,2017(18):70-72.
[5]張策.基于Unity3D的三維游戲場(chǎng)景設(shè)計(jì)與實(shí)踐[D].合肥:合肥工業(yè)大學(xué),2016.
[6]俞磊,韓春香.基于Unity3D和3DSMax的虛擬醫(yī)院漫游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].長(zhǎng)春大學(xué)學(xué)報(bào),2020,30(4):40-44.
[7]朱喜基,馮振輝,基于Unity3D虛擬校園漫游碰撞檢測(cè)的研究[J].江蘇科技信息,2018(11):66-68.
[8]武桐,王曉雨.Unity3D中碰撞檢測(cè)問(wèn)題的研究[J].電子測(cè)試,2018(1):83-84.
[9]袁科,高啟文,閆永航.基于Unidy3D的角色扮演游戲設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2019。18(8):75-79.
【通聯(lián)編輯:梁書(shū)】
作者簡(jiǎn)介:王艷(1985-),江蘇徐州人,研究生,助理實(shí)驗(yàn)師,研究方向:軟件工程;華唯辰(1997-),江蘇蘇州人,本科。