王駿
(北京江娛互動科技有限公司 北京市 100029)
本文的服務(wù)器的相關(guān)資源統(tǒng)一部署在公有云提供商的云環(huán)境上,數(shù)據(jù)存儲使用Mysql和Redis,服務(wù)器端使用Java語言在Eclipse集成環(huán)境內(nèi)開發(fā)。而客戶端采用Unity3D引擎,支持手機(jī)等移動客戶端,也支持PC(Personal Computer)端。游戲內(nèi)通過通信協(xié)議建立、UI框架設(shè)計、以及豐富的NPC應(yīng)用等,進(jìn)而滿足了玩家的娛樂需求。
游戲背景設(shè)定為末日生存的動作角色扮演游戲,其創(chuàng)作理念來源于《愛麗絲夢游仙境》,是一款經(jīng)典的通關(guān)性游戲,玩家通過穿越的方式來到不同的場景,面對各種挑戰(zhàn),以末日生存的方式拯救世界,迎接僵尸、死士等敵方的進(jìn)攻。在此游戲之中,受資源、天氣、野獸、敵國等影響,需要玩家從零開始收集物資、建設(shè)房屋、制作工具與武器、提升自身的生存能力,并與隊友一同戰(zhàn)斗。玩家在游戲之中的游戲發(fā)展線設(shè)定方面,以以設(shè)計線路圖的形式解鎖,在玩家某一關(guān)卡通關(guān)之后,會前往下一個世界,展開新的戰(zhàn)斗。
游戲功能的核心設(shè)計主要包括如下幾個部分:
(1)賬號管理系統(tǒng):新玩家首先要進(jìn)行注冊,并且可以選擇與自己的相關(guān)社交賬號,比如微信賬號、QQ賬號、微博賬號進(jìn)行綁定。這樣在下次登錄的時候可以直接選擇社交賬號登錄。玩家的注冊信息將被存儲到數(shù)據(jù)庫中,未綁定社交賬號的玩家會把玩家的客戶端設(shè)備唯一標(biāo)識與游戲內(nèi)的賬號進(jìn)行綁定映射,從而下次用該設(shè)備登錄的時候能夠直接登錄之前注冊的賬號。注冊成功后,在登錄界面輸入玩家信息進(jìn)入游戲。受我國國家法律影響,設(shè)計之中需要用戶完成實名認(rèn)證才能夠完整的體驗游戲的所有內(nèi)容。
(2)戰(zhàn)場管理系統(tǒng):玩家登錄成功后,可以看到自己賬號所屬大區(qū)內(nèi)已經(jīng)創(chuàng)建好的場景列表,然后可以通過點擊加入按鈕進(jìn)入場景。由于每個場景有自身的游戲進(jìn)度限制,若未達(dá)到相應(yīng)等級則無法解鎖,可選擇其他場景加入。反之加入成功,顯示加載進(jìn)度條,等待游戲開始。玩家可以根據(jù)自身實際情況選擇是否加入場景,是做普通的任務(wù)還是做難度較高的升級任務(wù)。
(3)NPC系統(tǒng):游戲內(nèi)除了玩家自己和其他在線玩家之外,還有很多NPC可以與玩家進(jìn)行交互、戰(zhàn)斗。這些NPC的設(shè)計有多種形態(tài),比如喪尸、僵尸、死士、怪物、幸存人類等。NPC會根據(jù)游戲劇情來觸發(fā),由程序設(shè)定,他們可能會在地圖上巡邏,與玩家對話,還可能與玩家發(fā)生戰(zhàn)斗,在戰(zhàn)斗中會攻擊、躲避、釋放技能等,從而提升游戲的真實感。戰(zhàn)場場景的進(jìn)入需在特定時間段或是特殊任務(wù)執(zhí)行之后開啟。
(4)玩家操控系統(tǒng):由于游戲支持手機(jī)移動設(shè)備和PC設(shè)備,在這兩類設(shè)備上玩家對游戲的操控是不同的。在移動設(shè)備上,游戲界面會提供虛擬十字控制鍵和按鈕控制鍵,玩家通過對應(yīng)的虛擬按鍵來對游戲人物進(jìn)行控制。在PC上,玩家操作主要是以鼠標(biāo)來控制方向,鍵盤上的按鈕來控制功能。在游戲內(nèi),玩家可以制作裝備,升級技能,并發(fā)生戰(zhàn)斗,在戰(zhàn)斗中可以通過動作控制來與敵人進(jìn)行攻防戰(zhàn),釋放角色技能,使用道具等操作。
(5)界面特效系統(tǒng):為了提升游戲的整體畫面感和沉浸感,利用了Unity3D引擎的優(yōu)勢,當(dāng)玩家遇到特殊事件、NPC,以及戰(zhàn)斗過程中都設(shè)計了大量的特效或者音效,盡量做到給玩家?guī)砩砼R其境的感覺。
游戲系統(tǒng)整體架構(gòu)主要分為客戶端和服務(wù)器端兩個部分,具體內(nèi)容包括:
(1)客戶端:數(shù)據(jù)管理系統(tǒng)、界面管理系統(tǒng)、資源管理系統(tǒng)、網(wǎng)絡(luò)管理系統(tǒng)。本游戲由于需要支持手機(jī)、平板等移動設(shè)備以及PC,僅對于手機(jī)而言,還有Android、IOS等不同手機(jī)操作系統(tǒng),因此對不同客戶端類型的兼容和界面的適配就顯得尤為重要。Unity3D引擎提供了對應(yīng)的解決方案,從而使得游戲開發(fā)變得更加輕松,并能讓游戲具備良好的實用性。相關(guān)的美術(shù)資源、模型等在集成之后導(dǎo)入到Unity3D中,從而完成游戲場景的搭建。
(2)服務(wù)器端:賬號管理系統(tǒng)、戰(zhàn)場管理系統(tǒng)、地圖系統(tǒng)、玩家數(shù)據(jù)系統(tǒng)、戰(zhàn)斗系統(tǒng)、NPC系統(tǒng)和網(wǎng)絡(luò)通信管理系統(tǒng)。各個系統(tǒng)模塊設(shè)計盡量相互獨立,低耦合,從而便于后期的維護(hù)和擴(kuò)展。
服務(wù)器端的設(shè)計是本游戲的設(shè)計難點,服務(wù)器端的架構(gòu)需要考慮游戲的穩(wěn)定性、可伸縮性和擴(kuò)展性等幾個方面。游戲的服務(wù)器資源都部署到了云環(huán)境中,這樣能大大降低運維的維護(hù)成本,業(yè)內(nèi)優(yōu)秀的云廠商的SLA(Service Level Agreement)也保證了其可以穩(wěn)定的運行,并且部署到云環(huán)境中可以讓服務(wù)器的相關(guān)資源隨時能根據(jù)游戲運營情況來動態(tài)伸縮,云環(huán)境豐富的第三方服務(wù)也有益于擴(kuò)展整個服務(wù)器的業(yè)務(wù)能力。服務(wù)器由于采用Java語言開發(fā),通過JVM(Java Virtual Machine)它可以部署到任意操作系統(tǒng)類型上,可以是Windows、Linux或者Unix等。
服務(wù)器端可以分為一個分發(fā)總控服務(wù)器和多個戰(zhàn)場服務(wù)器。分發(fā)總控服務(wù)器主要包括賬號管理系統(tǒng)和戰(zhàn)場管理系統(tǒng),其對玩家的賬號信息和戰(zhàn)場服務(wù)器進(jìn)行統(tǒng)一管理。玩家每創(chuàng)建一個戰(zhàn)場就會分配一個戰(zhàn)場服務(wù)器,戰(zhàn)場服務(wù)器就是一個游戲邏輯服,它負(fù)責(zé)當(dāng)前戰(zhàn)場內(nèi)相關(guān)數(shù)據(jù)的存儲和消息的處理與轉(zhuǎn)發(fā)。這里的戰(zhàn)場服務(wù)器是一個虛擬服務(wù)器概念,可以理解為一組虛擬服務(wù)器的資源,在云環(huán)境中它能以服務(wù)器容器的形式存在,比如每個戰(zhàn)場服務(wù)器就是一個Docker服務(wù)器容器。圖1為服務(wù)器端系統(tǒng)結(jié)構(gòu)圖。
圖1:服務(wù)器端系統(tǒng)結(jié)構(gòu)圖
圖4:NPC動畫狀態(tài)機(jī)
網(wǎng)絡(luò)通信協(xié)議是一種網(wǎng)絡(luò)通用語言,為連接不同操作系統(tǒng)和不同硬件體系結(jié)構(gòu)的互聯(lián)網(wǎng)絡(luò)來提供通信支持,是一種網(wǎng)絡(luò)通用語言。一般由語義、語法、時序三個要素組成,其中語義表示要做什么,語法表示要怎么做,時序表示做的順序。這里的通信協(xié)議主要定義的是客戶端和服務(wù)器端之間的網(wǎng)絡(luò)通信協(xié)議,由于本游戲是ARPG這種動作類的游戲,因此使用UDP(User Datagram Protocol)協(xié)議來進(jìn)行網(wǎng)絡(luò)傳輸,可以有效的降低網(wǎng)絡(luò)的延遲,保證游戲的實時性??蛻舳撕头?wù)器端的數(shù)據(jù)傳輸通過Google Protobuf將格式化的數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制的格式來傳輸,減少了格式化數(shù)據(jù)序列化和反序列化的時間消耗,并且可以加密和壓縮傳輸,提高數(shù)據(jù)傳輸效率。
在本游戲中,網(wǎng)絡(luò)通信協(xié)議中格式化的數(shù)據(jù)被定義成了兩種格式:
(1)客戶端向服務(wù)器端發(fā)送的格式化數(shù)據(jù)定義如下:
Length Type Code Data
Length:協(xié)議的長度,以字節(jié)byte為單位。
Type:請求類型,本游戲有三種請求類型,分別是賬號數(shù)據(jù)類型請求,戰(zhàn)場數(shù)據(jù)類型請求和游戲邏輯數(shù)據(jù)類型請求。
Code:每個編碼對應(yīng)于服務(wù)器端定義的一個功能接口編號,服務(wù)器端通過編碼映射關(guān)系來找到具體的功能實現(xiàn)。
Data:客戶端調(diào)用服務(wù)器端功能接口的具體參數(shù)數(shù)據(jù),可以是JSON(JavaScript Object Notation)格式的字符串然后加密轉(zhuǎn)換的字符串格式。
(2)服務(wù)器端向客戶端發(fā)送的格式化數(shù)據(jù)定義如下:
Length Code Data
Length:協(xié)議的長度,以字節(jié)byte為單位。
Code:請求接口編碼。
Data:服務(wù)器端返回給客戶端的結(jié)果,可以直接是JSON字符串,也可以選擇加密轉(zhuǎn)換。
比如,客戶端向服務(wù)器端發(fā)起一個玩家登錄游戲的協(xié)議請求,其中Type是賬號數(shù)據(jù)類型1,Code是登錄協(xié)議101,Data為玩家的賬號信息,比如設(shè)備信息以及包含綁定的第三方社交賬號的相關(guān)信息等。當(dāng)服務(wù)器端接收到該請求后,解析Data中的相關(guān)信息然后查詢存儲在數(shù)據(jù)庫中的賬號系統(tǒng)數(shù)據(jù),如果找到匹配數(shù)據(jù)后,就返回Success給客戶端,否則返回Fail表示登錄失敗。客戶端接收到服務(wù)器端的返回結(jié)果,如果從返回數(shù)據(jù)中解析到的是Success,則表示登錄成功,進(jìn)入到戰(zhàn)場選擇界面,否則彈出登錄失敗的提示。其時序圖如圖2所示。
圖2:登錄請求的客戶端與服務(wù)器的通信時序圖
UI框架設(shè)計主要包括內(nèi)容為:人機(jī)交互、玩家操控系統(tǒng)、界面設(shè)計。
高質(zhì)量的UI設(shè)計可以提升游戲的可玩性,使游戲變得更加有趣,玩家的黏性也能有效提升,且受眾也會因為其操作的靈活度、爽點等來主動下載。因此,一個優(yōu)秀的UI設(shè)計,不僅會讓玩家的體驗感獲得提升,也能充分地表達(dá)設(shè)計者的游戲設(shè)計思路,其就像一個大綱一樣,使游戲設(shè)計內(nèi)容及思路能固定在一條線上,承擔(dān)起游戲設(shè)計的中心點。
本游戲的UI框架設(shè)計方案主要為:
(1)每個界面定義成一個面板,每個面板對應(yīng)一個Panel類來實現(xiàn)面板的具體功能。每個面板通過動態(tài)加載資源,然后進(jìn)行實例化。
(2)所有的Panel類都繼承一個面板基類BasePanel,在這個面板基類中定義了path和layer這兩個成員變量,以及onInit、onShow和onClose這三個方法。path變量表示該面板的資源路徑,系統(tǒng)會根據(jù)該路徑動態(tài)加載資源管理系統(tǒng)內(nèi)的相應(yīng)界面資源。layer變量代表該面板的層級,通過設(shè)置優(yōu)先級來確定各面板的上下級關(guān)系。onInit和onShow這兩個方法主要是做一些初始化的操作,比如添加按鈕事件監(jiān)聽、網(wǎng)絡(luò)消息監(jiān)聽等。例如登錄面板的onShow方法就會初始化登錄按鈕組件,之后添加登錄按鈕的事件監(jiān)聽,當(dāng)玩家點擊登錄按鈕時,向服務(wù)器發(fā)送登錄協(xié)議請求。onClose方法是在面板被關(guān)閉的時候被執(zhí)行,該方法會對界面資源進(jìn)行釋放,取消網(wǎng)絡(luò)監(jiān)聽等。
(3)面板管理器PanelManager類來控制界面的顯示和關(guān)閉,其中open和close為兩個最主要的方法。當(dāng)PanelManager的open方法被調(diào)用時,其會依次調(diào)用對應(yīng)panel類的onInit和onShow方法。當(dāng)close方法被調(diào)用時,其會依次調(diào)用對應(yīng)penel類的onClose方法。除此之外,PannelManager類中的panels成員變量是一個Map數(shù)據(jù)結(jié)構(gòu),用來保存已經(jīng)打開的panel對象列表,當(dāng)打開一個界面中的面板時,如果之前已經(jīng)打開過該面板會在panels中找到該panel對象,如果沒有找到,則創(chuàng)建新的panel對象并添加到panels中,一個界面被關(guān)閉銷毀之后也需要將其從penels中移除。PanelManager類的layers成員變量是維護(hù)每個panel的層級列表。圖3為面板相關(guān)類圖。
圖3:面板相關(guān)類圖
NPC是游戲設(shè)計之中必不可少的部分,其存在可以有效提升玩家的刺激性心理,激發(fā)出玩家的挑戰(zhàn)欲望。目前游戲之中設(shè)計了兩種攻擊類的NPC,分別是普通喪尸Zombie和怪物頭目Boss,其二者在動畫狀態(tài)機(jī)的設(shè)計上一致的,只是在屬性的強(qiáng)弱,動畫表現(xiàn)的復(fù)雜度等有所差異。
游戲是否成功與特效有著緊密地聯(lián)系,華麗炫酷的特效對于游戲情景的營造有著重要影響,其具體包含場景特效與人物技能特效。每種特效都是由多個特效效果組合而成的。本游戲利用Unity3D引擎來制作了大量的特效,比如場景特效中的火焰、煙霧,人物技能特效中的爆破、掃射等特效。
本游戲的客戶端可以在PC和移動設(shè)備上運行,總體來說對處理器和內(nèi)存的要求不算太高,但是由于設(shè)計了很多特效,對GPU的硬件有一定的要求。
(1)PC端的運行需求如表1所示。
表1:PC端游戲運行需求
(2)而對于移動設(shè)備而言,游戲運行需求如表2所示。
表2:手機(jī)端游戲運行最低需求
游戲的操作在PC端和移動端也有所差異:
(3)PC端:鼠標(biāo)控制方向,鍵盤上的W、A、S、D是控制的通用鍵,Q、R、T 是人物技能鍵,B為背包鍵。
(4)移動端:在界面上提供虛擬十字鍵盤和虛擬按鈕來操控
綜上所述,本文主要針對Unity引擎下多人在線網(wǎng)絡(luò)游戲設(shè)計及開發(fā)展開研究,主要研究內(nèi)容為游戲功能、系統(tǒng)整體架構(gòu)、游戲設(shè)計難點、關(guān)鍵技術(shù)及系統(tǒng)實現(xiàn)等方面內(nèi)容。同時在基礎(chǔ)的系統(tǒng)設(shè)計之中保證設(shè)計內(nèi)容和優(yōu)化游戲顯示效果,從而提升玩家的游戲體驗感、情景感等。