彭偉國 劉玉坤
摘要:隨著人們的生活節(jié)奏加快,工作壓力不斷增大,越來越多的玩家通過RPG游戲釋放壓力;《地獄天使》RPG游戲開發(fā)框架包含功能視圖層、功能模塊層、功能底層,是一款支持多人在線的角色扮演類游戲。
關(guān)鍵詞:Unity3D;RPG;對(duì)象池;事件分發(fā)
中圖分類號(hào):TP37 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)35-0070-02
1 背景
角色扮演游戲(Role-playing Game,PRG)是網(wǎng)絡(luò)游戲類型之一,用戶在游戲中負(fù)責(zé)扮演特定角色在一個(gè)寫實(shí)或虛構(gòu)世界中活動(dòng)[1]。根據(jù)第一手游網(wǎng)10月17日開服情況來看,手游開服193組,其中PRG游戲就有112組,可見PRG游戲的受歡迎程度。游戲的開發(fā)過程一般都經(jīng)過游戲策劃、游戲美工設(shè)計(jì)、游戲功能實(shí)現(xiàn)、游戲測試等重要環(huán)節(jié)。
2 游戲策劃
2.1游戲故事背景
突然有一天,來自地獄的怪物統(tǒng)治了虛擬角色所在的小鎮(zhèn),危機(jī)前所未有,小鎮(zhèn)里的人們向游戲主角發(fā)起了求助,期望出現(xiàn)一個(gè)戰(zhàn)斗天使,帶領(lǐng)小鎮(zhèn)的人們走出地獄,回歸正常生活。
2.2游戲規(guī)則
首先,玩家只有注冊(cè)賬號(hào)并且登錄游戲才能繼續(xù)進(jìn)行游戲,游戲中的兩大模塊為闖關(guān)模式和網(wǎng)絡(luò)對(duì)戰(zhàn)模式。玩家想要變強(qiáng),要通過闖關(guān)模式,擊殺關(guān)卡里的所有怪物,來獲得關(guān)卡獎(jiǎng)勵(lì),獎(jiǎng)勵(lì)會(huì)有裝備獎(jiǎng)勵(lì),玩家裝備更高等級(jí)的裝備使自己變得更強(qiáng)大。玩家強(qiáng)大之后,可以參加網(wǎng)絡(luò)對(duì)戰(zhàn)模式,和其他玩家戰(zhàn)斗,誰的血量先變?yōu)?,則另外一方獲得勝利,獲得勝利的一方,會(huì)增加相應(yīng)的競技分?jǐn)?shù)。
2.3游戲功能需求
經(jīng)過對(duì)游戲玩法的分析,該游戲中需要有以下功能:注冊(cè)與登錄功能、角色選擇功能、游戲關(guān)卡功能、資源管理功能、角色控制功能、技能管理功能、任務(wù)管理功能、裝備管理功能和網(wǎng)絡(luò)對(duì)戰(zhàn)功能。
3 RPG游戲開發(fā)架構(gòu)
本游戲遵循“高內(nèi)聚低耦合”的開發(fā)思想,借鑒王異帆[2]手機(jī)游戲框架分層,提出RPG游戲開發(fā)框架應(yīng)包含功能視圖層、功能模塊層、功能底層,如圖1所示。該三層架構(gòu)的業(yè)務(wù)流程如下:
1)功能視圖層根據(jù)用戶的操作發(fā)送指令給功能模塊層;
2)功能模塊層收到功能視圖層發(fā)出的指令,對(duì)操作的合法性的信息進(jìn)行驗(yàn)證,然后向功能底層發(fā)出對(duì)數(shù)據(jù)訪問的操作;
3)功能底層收到功能模塊層發(fā)出的指令后對(duì)數(shù)據(jù)做驗(yàn)證,并且將結(jié)果返回給功能模塊層;
4)功能模塊層對(duì)收到的數(shù)據(jù)進(jìn)行驗(yàn)證,驗(yàn)證完成后將結(jié)果發(fā)送給功能視圖層。
功能視圖層主要是展現(xiàn)給用戶的游戲交互界面,也就是客戶端的顯示,該層主要包含UI事件分發(fā)管理、輸入管理、場景管理、界面管理、角色管理等。
功能模塊層主要是游戲中一些業(yè)務(wù)邏輯,是功能視圖層和功能底層之間的橋梁。針對(duì)功能視圖層的請(qǐng)求,對(duì)數(shù)據(jù)進(jìn)行處理然后返回給功能視圖層顯示。
功能底層是對(duì)數(shù)據(jù)的操作,主要與數(shù)據(jù)庫打交道。將存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)提交給功能模塊層,同時(shí)將功能模塊層處理的數(shù)據(jù)保存到數(shù)據(jù)庫。
4 游戲美工設(shè)計(jì)
游戲美工設(shè)計(jì)主要包含游戲UI設(shè)計(jì)、角色設(shè)計(jì)和游戲場景設(shè)計(jì),對(duì)應(yīng)于三層開發(fā)框架的功能視圖層。4.1游戲UI設(shè)計(jì)
UI設(shè)計(jì)是通過NGUI插件在Unity游戲引擎中實(shí)現(xiàn)的,包含資源加載界面、注冊(cè)登錄界面、選擇服務(wù)界面、選擇角色界面、游戲主界面、游戲關(guān)卡界面、競技界面、任務(wù)界面、裝備界面、戰(zhàn)斗界面。
首先需要先創(chuàng)建UI管理類,對(duì)游戲中的所有UI進(jìn)行統(tǒng)一的管理,創(chuàng)建UIManager類,首先在該類中創(chuàng)建LoadAllWindows方法,該方法加載Resources/UI路徑下的所有UI面板預(yù)制體,然后在該類中創(chuàng)建ShowWindows方法,該方法根據(jù)傳遞的面板名字,顯示相對(duì)應(yīng)的UI面板;最后創(chuàng)建HideWindowsByName方法,該方法根據(jù)傳遞面板名字,隱藏對(duì)應(yīng)的UI面板。
各個(gè)UI界面寬高比統(tǒng)一設(shè)置為1280*720像素。每一個(gè)UI界面的實(shí)現(xiàn),其Unity層級(jí)面板中包含的控件元素不同,按照UI設(shè)計(jì)實(shí)現(xiàn)效果組合并設(shè)置控件的屬性和參數(shù)。比如,裝備UI界面就包含有UIPanel、UISprite、UILabel、UISprite、UIButton等控件,最終UI實(shí)現(xiàn)效果如圖2所示。
4.2游戲場景設(shè)計(jì)
本游戲中有四個(gè)場景,每個(gè)場景關(guān)卡中都擁有樹木、房屋、花草等物品,樹木與花草等模型使用外置資源包,房屋模型建筑使用Maya軟件制作。先通過Unity自帶的Terrain地形工具先搭建地形輪廓,然后對(duì)地形做一些細(xì)節(jié)的調(diào)整,然后種植一些樹木,并將房屋等裝飾擺放到場景中。
各個(gè)場景之間會(huì)進(jìn)行相互的跳轉(zhuǎn),為了方便統(tǒng)一的管理使用了場景管理類,創(chuàng)建SceneManager類,首先在該類中創(chuàng)建LoadScene方法,在該方法中,根據(jù)傳遞的場景名字找到Scenes路徑下對(duì)應(yīng)場景文件,然后顯示加載界面UI,再使用LoadAsync方法,異步加載場景,并且在加載界面中顯示出加載進(jìn)度。
5 功能模塊設(shè)計(jì)
本游戲采用模塊化的設(shè)計(jì)思想對(duì)功能進(jìn)行拆分,用戶可以通過控制角色進(jìn)行闖關(guān)和網(wǎng)絡(luò)對(duì)戰(zhàn);用對(duì)象池技術(shù),降低游戲性能的消耗;開發(fā)過程中采用單例設(shè)計(jì)模式和觀察者設(shè)計(jì)模式,使其滿足“高內(nèi)聚、低耦合”的需求。實(shí)現(xiàn)的游戲功能包括注冊(cè)與登錄、游戲關(guān)卡、資源管理、角色選擇、角色控制、技能管理、任務(wù)管理、裝備管理、網(wǎng)絡(luò)對(duì)戰(zhàn)等。下面僅以技能管理功能的設(shè)計(jì)與實(shí)現(xiàn)為例進(jìn)行介紹。
技能管理作為基礎(chǔ)功能,將與戰(zhàn)斗、裝備三大系統(tǒng)為角色戰(zhàn)斗提供全部邏輯功能。技能管理本質(zhì)上是,提取“技能配置數(shù)據(jù)”,執(zhí)行“技能執(zhí)行邏輯”,得到“技能效果”,循環(huán)“技能效果”,修改目標(biāo)角色屬性或調(diào)用相應(yīng)API。游戲技能以配置表的方式將技能抽象出來,在實(shí)際的戰(zhàn)斗過程中,根據(jù)配置表進(jìn)行一些數(shù)值的計(jì)算、界面的顯示和動(dòng)畫的播放。
技能管理功能的實(shí)現(xiàn)上,編寫SkillBar腳本,并且注冊(cè)O(shè)n-ButtonPress和OnButtonClick事件到普攻和技能按鈕上。OnBut-tonPress用于實(shí)現(xiàn)普攻消息分發(fā),OnButtonClick用于玩家點(diǎn)擊釋放技能。SkillBar腳本中的Update方法內(nèi)實(shí)現(xiàn)技能冷卻。在滿足釋放條件之后,調(diào)用GfxSkillSystem類的StartSkill方法,施放技能,并將角色的狀態(tài)發(fā)送給服務(wù)器。服務(wù)器通過網(wǎng)絡(luò)協(xié)議收到客戶端的發(fā)來的數(shù)據(jù)時(shí),判斷此時(shí)玩家是否可以釋放技能。
6 功能底層設(shè)計(jì)
6.1服務(wù)器管理設(shè)計(jì)
服務(wù)器管理設(shè)計(jì)主要是對(duì)服務(wù)器邏輯的管理,采用不同的進(jìn)程進(jìn)行邏輯的處理,分為網(wǎng)關(guān)服務(wù)器、數(shù)據(jù)存儲(chǔ)服務(wù)器、邏輯服務(wù)器、房間管理服務(wù)器和登錄服務(wù)器,不同的服務(wù)器通過進(jìn)程間的通訊進(jìn)行訪問,客戶端直接與網(wǎng)關(guān)服務(wù)器和登錄服務(wù)器交互,客戶端的其他操作由網(wǎng)關(guān)服務(wù)器進(jìn)行轉(zhuǎn)發(fā),從而使服務(wù)器之間的各個(gè)模塊獨(dú)立化,客戶端與各個(gè)服務(wù)器之間的交互如下圖4所示:
6.2日志管理設(shè)計(jì)
在開發(fā)的過程中會(huì)出現(xiàn)各種未知的錯(cuò)誤或者警告;隨著項(xiàng)目開發(fā)的越來越大,后期修BUG是非常困難的,所以在正常的開發(fā)中要經(jīng)常打印一些關(guān)鍵的日志,為以后查找問題提供便捷。在設(shè)計(jì)日志管理的時(shí)候,將打印的日志進(jìn)行分類,有不同的等級(jí),方便后期進(jìn)行篩選,而且在打印日志時(shí),要詳細(xì)說明做了什么操作,這對(duì)監(jiān)控我們整個(gè)項(xiàng)目的運(yùn)行起著非常重要的作用。
6.3數(shù)據(jù)庫設(shè)計(jì)
本游戲采用Mysql數(shù)據(jù)庫進(jìn)行開發(fā)。經(jīng)過對(duì)此游戲中數(shù)據(jù)的分析和對(duì)角色信息進(jìn)行抽象,本游戲需要四張數(shù)據(jù)表才能實(shí)現(xiàn)相應(yīng)的功能,分別為:賬號(hào)數(shù)據(jù)表、角色數(shù)據(jù)表、裝備數(shù)據(jù)表和技能數(shù)據(jù)表,然后根據(jù)具體的功能需求,設(shè)計(jì)數(shù)據(jù)表中相應(yīng)的字段。
7 游戲測試
界面是游戲的“臉面”,玩家的所有交互行為幾乎都與界面有關(guān),界面好壞是玩家對(duì)游戲評(píng)價(jià)最重要的標(biāo)準(zhǔn)之一。另外,還要檢測游戲中各個(gè)UI界面是否正常適配。功能測試通常也叫作黑盒測試或數(shù)據(jù)驅(qū)動(dòng)測試,對(duì)各個(gè)功能模塊進(jìn)行測試。表1列舉了網(wǎng)絡(luò)對(duì)戰(zhàn)功能測試信息。
8 結(jié)束語
本游戲具有網(wǎng)絡(luò)實(shí)時(shí)交互的特點(diǎn),玩家之間可以進(jìn)行實(shí)時(shí)戰(zhàn)斗,是一款支持多人在線的角色扮演類游戲。在游戲制作過程中,對(duì)服務(wù)器模塊進(jìn)行拆分,提高服務(wù)器的運(yùn)行效率;采用事件分發(fā)機(jī)制降低代碼的耦合性等。
參考文獻(xiàn):
[1]袁科,高啟文,閆永航.基于Unidy3D的角色扮演游戲設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2019,8(8):75-78.
[2]王異帆.基于Cocos2d_x游戲引擎的塔防類手機(jī)游戲框架設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中師范大學(xué),2015.
【通聯(lián)編輯:謝媛媛】
收稿日期:2019-10-19
作者簡介:彭偉國(1983-),男,河南宜陽人,講師,碩士,研究方向?yàn)閿?shù)字媒體技術(shù)應(yīng)用;劉玉坤(1978-),男,河南通許人,講師,碩士研究生,研究方向?yàn)樾畔踩?、?jì)算機(jī)應(yīng)用。