中圖分類(lèi)號(hào):TP311.5;TP317.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2025)08-0089-04
Abstract:Role-Playing Game(RPG) is favored by players because of its rich storyline,in-depth character shaping and highly fre gameplay.The“Save the Home”game uses the Unity engine for game design and development.Through the overall designof thegame,theproductionoftegame modelandtheconstructionofthescene,aswellas thedevelopmentof thegame's protagonist module,enemy module,combat module,UImodule,keymoduleandother modules,thepaperrealizes thefunctionsofcharactermovement,Acharacterpatrolavigationadattack,transmisionportalresponsesoundadlight response, camera scanning and so on. The game offers excellent fun, interactivity and diversity.
Keywords: game design; modeling; interactive function
0 引言
隨著信息技術(shù)的快速進(jìn)步和游戲產(chǎn)業(yè)的蓬勃發(fā)展,電子游戲已經(jīng)成為人們娛樂(lè)和消遣的重要方式之一[。在這個(gè)多元化的游戲市場(chǎng)中,角色扮演游戲(RPG)因其豐富的故事情節(jié)、深入的角色塑造和高度自由的游戲玩法而備受玩家青睞。基于此,本文設(shè)計(jì)與開(kāi)發(fā)了《拯救家園》這款RPG類(lèi)型的游戲。使用Unity引擎和C#編程語(yǔ)言進(jìn)行游戲開(kāi)發(fā),游戲融合了戰(zhàn)斗、解謎和迷宮三種玩法,給玩家?guī)?lái)了豐富多樣的游戲體驗(yàn)。戰(zhàn)斗模式讓玩家能夠挑戰(zhàn)不同的敵人,體驗(yàn)緊張刺激的戰(zhàn)斗樂(lè)趣;解謎需要玩家開(kāi)動(dòng)腦筋,尋找路線解決關(guān)卡給出的難題;迷宮模式則提供了一個(gè)探索未知區(qū)域的機(jī)會(huì)。
1 游戲設(shè)計(jì)
1.1 游戲設(shè)計(jì)思路
作為一款RPG類(lèi)型游戲,在保證游戲本身運(yùn)行的穩(wěn)健性之外,要想讓玩家喜歡上這款游戲并對(duì)其整體提出高評(píng)價(jià),做好游戲各方面的頂層設(shè)計(jì)是相當(dāng)必要的[2]。在《拯救家園》游戲中,主要以對(duì)話方式推動(dòng)游戲主線,玩法上創(chuàng)新融合了三種不同的元素,并將它們?nèi)谌胗螒虻娜P(guān)中。在第一關(guān)的玩法設(shè)計(jì)上采用了RPG游戲常設(shè)的戰(zhàn)斗內(nèi)容,并融入了“塔防”元素,玩家通過(guò)操縱游戲角色釋放技能與敵人進(jìn)行交戰(zhàn),同時(shí)保證保護(hù)目標(biāo)不被摧毀。而第二關(guān)的玩法設(shè)計(jì)簡(jiǎn)單融入了“解謎”元素,玩家需要在空曠復(fù)雜的地形中尋找黯淡的紅水晶并激活點(diǎn)亮,達(dá)到應(yīng)點(diǎn)亮的數(shù)量要求后則算本關(guān)完成。在第三關(guān)中,則采用了“迷宮”元素,玩家需要在錯(cuò)綜復(fù)雜的迷宮中找尋通向終點(diǎn)的道路。
要增加游戲?qū)ν婕业奈Γ粋€(gè)引人入勝的劇情是不可或缺的。好的游戲劇情可以使玩家有較強(qiáng)的沉浸感,使之與角色達(dá)到共情的狀態(tài)[3]。基于此,本游戲設(shè)計(jì)了以下劇情:豌豆小鎮(zhèn)的魔法泉水干枯了,豌豆小鎮(zhèn)的居民想了很多辦法都沒(méi)找回魔法水源。這時(shí)出現(xiàn)了一位超級(jí)英雄,她叫愛(ài)麗絲。她要通過(guò)傳送門(mén)去闖過(guò)三個(gè)關(guān)卡并拿三把金鑰匙,重新激活魔法泉水,豌豆小鎮(zhèn)尋回水源來(lái)拯救家園。
1.2 游戲總體框架設(shè)計(jì)
本游戲的功能模塊包含主角模塊、敵人模塊、攝
像機(jī)模塊、加載模塊、戰(zhàn)斗模塊、對(duì)話模塊、UI模塊、關(guān)卡管理模塊、音樂(lè)模塊、鑰匙模塊、存儲(chǔ)模塊。游戲的總體框架設(shè)計(jì)圖如圖1所示。
在整個(gè)游戲系統(tǒng)中,主要圍繞主角進(jìn)行設(shè)計(jì),場(chǎng)景中的模塊也有著各自的功能。
主角模塊:通過(guò)獲取鍵盤(pán)輸入來(lái)操縱主角移動(dòng)、角色人物動(dòng)畫(huà)播放以及技能釋放粒子效果播放,同時(shí)設(shè)置相關(guān)個(gè)人屬性數(shù)值。
敵人模塊:通過(guò)Unity導(dǎo)航系統(tǒng)完成尋路效果,遭遇主角時(shí)自動(dòng)發(fā)起攻擊,設(shè)置相關(guān)角色動(dòng)畫(huà)以及相關(guān)數(shù)值。
戰(zhàn)斗模塊:當(dāng)主角與敵人發(fā)生戰(zhàn)斗時(shí),處理相關(guān)數(shù)值的變化,如“血量”“魔法值”等。
UI模塊:制作UI面板顯示相關(guān)數(shù)據(jù)以及完成交互效果。
音樂(lè)模塊:自游戲運(yùn)行起持續(xù)播放內(nèi)置音樂(lè)。
鑰匙模塊:通過(guò)每個(gè)關(guān)卡所需的道具,添加相關(guān)游戲邏輯。
關(guān)卡管理模塊:每個(gè)關(guān)卡設(shè)置一個(gè)本關(guān)管理模塊,添加游戲邏輯腳本,管理本關(guān)各項(xiàng)調(diào)用所需的字段和方法。
攝像機(jī)模塊:以主角為目標(biāo)點(diǎn),在第三人稱視角下持續(xù)跟隨主角。
1.3 交互功能設(shè)計(jì)
在游戲開(kāi)始界面選擇“開(kāi)始游戲”一“新游戲”后則正式載入游戲。先與引導(dǎo)NPC進(jìn)行對(duì)話,初步了解游戲劇情。結(jié)束對(duì)話后顯示相關(guān)UI并進(jìn)入第一關(guān)卡,完成第一關(guān)卡任務(wù)后拿到鑰匙達(dá)成通關(guān)條件,二、三關(guān)卡以此類(lèi)推。終點(diǎn)處游戲結(jié)算時(shí)判斷是否達(dá)成游戲通關(guān)條件,若是則顯示相應(yīng)游玩數(shù)據(jù)并且顯示通關(guān)成功,如圖2所示。
2 游戲功能實(shí)現(xiàn)
游戲系統(tǒng)所用到的游戲引擎是Unity引擎。所用的編程語(yǔ)言為C#,IDE(集成開(kāi)發(fā)環(huán)境)為VisualStudio2022,采用Cinema4DR20.059來(lái)制作白模,后通過(guò)Substance3DPainter繪制并導(dǎo)出在Unity環(huán)境下可用的相關(guān)模型貼圖,游戲人物模型使用VRoidStudio軟件制作。
2.1模型制作與場(chǎng)景搭建
道路、山脈、丘陵等此類(lèi)地形通過(guò)該工具下的“RaiseorLowerTerrain”功能,以調(diào)節(jié)筆刷大小、樣式、力度的方式逐步雕刻出場(chǎng)景。樹(shù)木、石塊、地皮等則通過(guò)“PaintTrees”“PaintDetails”功能進(jìn)行完善。最終將準(zhǔn)備好的模型調(diào)整至合適位置并置入相應(yīng)位置,完成三個(gè)主場(chǎng)景的搭建。三個(gè)場(chǎng)景圖如圖3所示。
場(chǎng)景中所用建模主要運(yùn)用Cinema4D軟件制作所需的簡(jiǎn)易模型,包括“引導(dǎo)NPC星環(huán)”“金鑰匙”“守護(hù)塔”“待激活水晶”等模型。這些模型導(dǎo)出為obj格式后,導(dǎo)入至Substance3DPainter(SP)中制作合適的貼圖,最終導(dǎo)入U(xiǎn)nity備用。制作的模型最終效果如圖4所示。
2.2 游戲功能模塊實(shí)現(xiàn)
2.2.1 主角模塊
根據(jù)對(duì)主角角色的分析,本次游戲?yàn)閻?ài)麗絲設(shè)置Move、Jump、Attack、Death四種狀態(tài),分別用來(lái)控制移動(dòng)、跳躍、攻擊、死亡[4。為了讓主角“愛(ài)麗絲”能在場(chǎng)景中移動(dòng)起來(lái)并應(yīng)用適當(dāng)?shù)膭?dòng)畫(huà)片段,需要為主角配上骨骼并找尋合適的動(dòng)畫(huà)片段,統(tǒng)一設(shè)置到Animator組件的Controller字段中,并配上驅(qū)動(dòng)該動(dòng)畫(huà)的腳本。在愛(ài)麗絲角色的動(dòng)畫(huà)控制器中,在“BaseLayer”中新建一個(gè)“BlendTree”,將靜止、前進(jìn)、快速前進(jìn)、倒退、快速倒退五個(gè)動(dòng)畫(huà)片段置入混合樹(shù)中,其目的是通過(guò)一個(gè)參數(shù)快速簡(jiǎn)易控制人物行走狀態(tài)變化。在“BaseLayer”中,將其他動(dòng)畫(huà)片段如技能釋放動(dòng)作、跳躍等加入控制器中,設(shè)置合適的過(guò)渡條件及參數(shù),人物行走狀態(tài)過(guò)渡至技能釋放動(dòng)作上的“HasExitTime”全部取消勾選,保證當(dāng)獲取相應(yīng)鍵盤(pán)輸入時(shí)可以立即響應(yīng)相關(guān)動(dòng)作。具體設(shè)置如圖5所示。
設(shè)置完動(dòng)畫(huà)內(nèi)容后,添加相對(duì)應(yīng)的控制腳本。通過(guò)Input類(lèi)來(lái)實(shí)現(xiàn)鍵盤(pán)對(duì)游戲角色進(jìn)行上下左右的移動(dòng)控制[5],同時(shí)在UpdateO生命周期中判斷是否處于攻擊狀態(tài)下,否則,則執(zhí)行移動(dòng)方法。關(guān)鍵代碼如下所示:
void Update {if (isAttack = 1) { HillyMove_keyinput;} change_iaAttackO;}
void HillyMove_keyinput( {if (Input.GetKey(KeyCode.W)) {if(Input.GetKey(KeyCode.W) amp;amp; Input.
GetKey(KeyCode.LeftShift)) {anim.SetFloat(\"speed\",Mathf.Lerp(anim.
GetFloat(\"speed\"),1of,i *Time.deltaTime)); transform.Translate(O, 0, moveSpeed*3);} else{anim.SetFloat(\"speed\",Mathf.Lerp(anim.
GetFloat(\"speed\"), 5f,i * Time.deltaTime)); transform.Translate(0, 0, moveSpeed);} } if (Input.GetKey(KeyCode.S)) {if(Input.GetKey(KeyCode.S)amp;amp; Input.
GetKey(KeyCode.LeftShift)) {anim.SetFloat(\"speed\",Mathf.SmoothDamp(anim.
GetFloat(\"speed\"), -1of,ref yVelocity,0.3f)); transform.Translate(0, 0, -moveSpeed*3);}
2.2.2 敵人模塊
第一個(gè)關(guān)卡中設(shè)置了三條線路,分別會(huì)出現(xiàn)三種不同的敵人。敵人怪物的模型采用素材“MonsterUltimatePackCuteSeries”中的蝙蝠、黃鳥(niǎo)、蜜蜂三個(gè)怪物。在第一關(guān)的地圖中,敵人有守衛(wèi)和巡邏兩種狀態(tài)。在守衛(wèi)狀態(tài)下,玩家進(jìn)入敵人的攻擊范圍就會(huì)引起追擊,直到離開(kāi)攻擊范圍;在巡邏狀態(tài)下,玩家經(jīng)過(guò)敵人的攻擊范圍會(huì)引起敵人注意,導(dǎo)致攻擊,直到離開(kāi)攻擊范圍。以蝙蝠怪為例介紹敵人模塊,黃鳥(niǎo)、蜜蜂相關(guān)設(shè)置相同。在蝙蝠怪模型上添加Tag標(biāo)簽“monster”,同時(shí)添加合適大小的碰撞器,以及設(shè)置怪物攻擊、死亡、移動(dòng)動(dòng)畫(huà)片段。因敵人索敵需要用到Unity本身的導(dǎo)航系統(tǒng),因此在關(guān)卡一中將地形Bake導(dǎo)航網(wǎng)格,包括蝙蝠怪本身實(shí)例上添加NavMeshAgent組件。然后編寫(xiě)影響敵人的控制腳本,關(guān)鍵代碼如下所示:
private void Awake( {agent GetComponent(; hilly Σ= Σ GameObject.Find(\"Hilly\"); anim Σ= Σ GetComponent; hilly
ameObject.Find(\"Hilly\") GetComponent void Start( {if(SceneManager.GetActiveScene.name = = \"LevelOneScene\") {if (this.transform.GetChild(O).GetChild(O).name
蝙蝠血量\") {this.GetComponentlt;第一關(guān)蝙蝠怪計(jì)數(shù) gt;0 enabled
true}}
2.2.3 戰(zhàn)斗模塊
該模塊主要涉及在第一關(guān)中主角愛(ài)麗絲和敵人發(fā)生交戰(zhàn)時(shí)產(chǎn)生的數(shù)據(jù)變化。例如,當(dāng)愛(ài)麗絲釋放技能攻擊敵人時(shí),敵人會(huì)因受攻擊后判斷受到了什么技能的攻擊,并引用其傷害數(shù)值進(jìn)行血量計(jì)算。當(dāng)敵人血量歸零后將觸發(fā)死亡判定[。設(shè)置各技能傷害,并實(shí)時(shí)反饋后端數(shù)據(jù)至UI中。關(guān)鍵代碼如下所示:
private void OnEnable( {hpBar Σ= Σ GameObject.Find(\"血量\").GetCompone nt; mpBar GameObject.Find(\"魔法值\").GetCompon ent(; hpT Σ= Σ GameObject.Find(\"血量百分比 \").GetComponent(;
GameObject.Find(\"魔法值百分比 \").GetComponent(O}
2.2.4 UI模塊
游戲的UI界面可以使玩家更加快速直觀地了解游戲的風(fēng)格及制作水平。游戲的UI界面可以為玩家提供交互的方式,讓玩家能夠與游戲世界進(jìn)行互動(dòng),并且可以幫助玩家理解游戲規(guī)則,同時(shí)讓開(kāi)發(fā)人員接收到玩家反饋的信息[。在UI設(shè)置中,主要涉及各種情況下UI的響應(yīng)顯示,包括敵人血量條顯示、主角的UI顯示、進(jìn)入新的場(chǎng)景(關(guān)卡)時(shí)系統(tǒng)提示的UI顯示,以及主菜單各個(gè)按鈕的UI顯示響應(yīng)。游戲運(yùn)行頁(yè)面有開(kāi)始、設(shè)置、退出三個(gè)游戲按鈕。通過(guò)設(shè)置按鈕可以設(shè)置游戲的音量和背景音樂(lè)。游戲的封面頁(yè)和運(yùn)行頁(yè)如圖6、圖7所示。
2.2.5 鑰匙模塊
當(dāng)前關(guān)卡完成任務(wù)目標(biāo)后,當(dāng)確認(rèn)完成時(shí)將觸發(fā)鑰匙顯示的方法。玩家可以控制主角愛(ài)麗絲走進(jìn)鑰匙并發(fā)生碰撞,此時(shí)調(diào)用碰撞器的相關(guān)函數(shù)進(jìn)行數(shù)據(jù)統(tǒng)計(jì)[8,以此反饋至每個(gè)關(guān)卡的傳送門(mén)上。只有拾取了鑰匙后,當(dāng)玩家站在傳送門(mén)前才會(huì)顯示交互UI,擁有進(jìn)入下一關(guān)卡的資格。
2.2.6 關(guān)卡管理模塊
一個(gè)戰(zhàn)斗關(guān)卡可以包含一個(gè)或多個(gè)場(chǎng)景,而關(guān)卡運(yùn)行機(jī)制則融合了至少一個(gè)場(chǎng)景的相關(guān)元素[9-10]。該游戲中有三個(gè)關(guān)卡。第一個(gè)關(guān)卡中實(shí)現(xiàn)在前置條件下刷新三次不同波次,以及觸發(fā)相應(yīng)的對(duì)話模塊小節(jié)。第二關(guān)卡中實(shí)現(xiàn)監(jiān)測(cè)該關(guān)卡中水晶激活數(shù)量是否達(dá)到通關(guān)目標(biāo),在滿足目標(biāo)時(shí)調(diào)用系統(tǒng)相應(yīng)對(duì)話小節(jié)。第三關(guān)卡中實(shí)現(xiàn)監(jiān)測(cè)該關(guān)卡中是否在規(guī)定時(shí)間內(nèi)通過(guò)迷宮達(dá)到通關(guān)目標(biāo)。最后實(shí)現(xiàn)觸發(fā)對(duì)話小節(jié)以及終點(diǎn)觸發(fā)游戲結(jié)束進(jìn)行游戲結(jié)算。
3結(jié)論
本次設(shè)計(jì)通過(guò)使用Unity引擎和C#編程語(yǔ)言進(jìn)行游戲開(kāi)發(fā)。經(jīng)過(guò)需求分析、總體設(shè)計(jì)、各個(gè)模塊以及細(xì)節(jié)設(shè)計(jì)制作,最后完成系統(tǒng)測(cè)試。開(kāi)發(fā)了一款融合戰(zhàn)斗、解謎和迷宮三種玩法的RPG冒險(xiǎn)游戲,給玩家?guī)?lái)了豐富多樣的游戲體驗(yàn)。戰(zhàn)斗模式讓玩家能夠挑戰(zhàn)不同的敵人,體驗(yàn)緊張刺激的戰(zhàn)斗樂(lè)趣;解謎需要玩家開(kāi)動(dòng)腦筋,尋找路線解決關(guān)卡給出的難題;迷宮模式則提供了一個(gè)探索未知區(qū)域的機(jī)會(huì)。游戲界面簡(jiǎn)潔,上手簡(jiǎn)單且交互性強(qiáng),可玩性很高。
參考文獻(xiàn):
[1]殷爽,邵金俠,胡蓉,等.Unity3D引擎開(kāi)發(fā)RPG游戲“武魂之戰(zhàn)”的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代工業(yè)經(jīng)濟(jì)和信息化,2021,11(7):82-84.
[2]郭欣桐.基于Unity的飛船大戰(zhàn)游戲設(shè)計(jì)與開(kāi)發(fā)[J].科技資訊,2021,19(11):67-69.
[3]李曉蕾,王守佳,劉鈺周,等.基于Funcode平臺(tái)的《華夏寶藏》游戲設(shè)計(jì)與開(kāi)發(fā)[J].現(xiàn)代計(jì)算機(jī),2023,29(10):98-103.
[4]鄭清生,代君.基于Unity3D的初中數(shù)學(xué)教育游戲設(shè)計(jì)與開(kāi)發(fā)[J].中國(guó)教育技術(shù)裝備,2022(3):36-41.
[5]王曉芳,孟凱波,張騰飛.基于Unity3D的“神勇歸來(lái)”RPG類(lèi)游戲設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2023,7(15):16-20.
[6]徐杰,孫大洋,胡怡.基于傾斜攝影建模和Unity引擎的虛擬校園設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代信息科技,2023,7(16):39-44.
[7]馬曉萍,軒瑩瑩.基于Unity3D的電子游戲設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù),2024,53(6):75-79.
[8]楊淮敏,邱樹(shù)偉.基于Unity3D的冒險(xiǎn)游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2023,29(13):73-78.
[9]何柳青.基于Unity3D的動(dòng)作角色扮演游戲戰(zhàn)斗系統(tǒng)研究與開(kāi)發(fā)[J].現(xiàn)代信息科技,2023,7(24):1-5.
[10]任奇.《女?huà)z補(bǔ)天》數(shù)字游戲創(chuàng)作研究[D].蘭州:蘭州交通大學(xué),2023.
作者簡(jiǎn)介:鞏云飛(1981一),女,漢族,山東淄博人,副教授,碩士研究生,研究方向:數(shù)字媒體技術(shù)。