• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Unity引擎下多人在線網(wǎng)絡(luò)游戲的設(shè)計與開發(fā)①

      2020-05-22 04:46:02劉賢梅
      計算機系統(tǒng)應(yīng)用 2020年5期
      關(guān)鍵詞:面板客戶端服務(wù)器

      劉賢梅,劉 俊,賈 迪

      (東北石油大學(xué) 計算機與信息技術(shù)學(xué)院,大慶 163311)

      隨著虛擬現(xiàn)實技術(shù)和數(shù)字媒體技術(shù)的不斷發(fā)展,游戲產(chǎn)業(yè)的關(guān)注度也越來越高,數(shù)字游戲經(jīng)濟在整體經(jīng)濟中正占據(jù)著一定的比重.目前開發(fā)游戲的引擎平臺很多,而Unity 因其所具有的跨平臺性、易操作性、性能優(yōu)良等特點受到了市場的青睞[1].本文利用Unity3D 游戲開發(fā)引擎設(shè)計了一款多人在線對戰(zhàn)游戲.其中包括行走控制、人工智能系統(tǒng)、界面系統(tǒng)、服務(wù)端框架、客戶端框架、房間系統(tǒng)、戰(zhàn)場系統(tǒng)等多項內(nèi)容.多個玩家可以通過在線注冊、在線登錄、房間選擇等流程進入游戲,最終體驗在線3D 網(wǎng)絡(luò)游戲的娛樂.

      目前,游戲產(chǎn)業(yè)正從傳統(tǒng)的2D/2.5D 游戲、單機游戲向新興的3D 游戲和在線網(wǎng)絡(luò)游戲發(fā)展.而3D 游戲和網(wǎng)絡(luò)游戲的興起就伴隨著技術(shù)和算法的改變.傳統(tǒng)的2D 路徑搜索方式已經(jīng)不能適用于3D 場景,因此需要改變或重新設(shè)計相應(yīng)的尋路算法.游戲中的界面系統(tǒng)在游戲中占據(jù)了重要的地位,目前的UI 設(shè)計與交互費時費力,影響游戲的開發(fā)進度,急需設(shè)計出一種UI 框架來減少界面系統(tǒng)的開發(fā)周期.對于網(wǎng)絡(luò)游戲而言,最重要的就是玩家場景的一致性和實時性.一致性就需要建立對應(yīng)的網(wǎng)絡(luò)通信協(xié)議,而實時性就要減少網(wǎng)絡(luò)傳書中的延遲誤差.

      針對上述問題,本文使用Visual Studio 2017 開發(fā)平臺搭建服務(wù)器,實時進行數(shù)據(jù)傳輸與交換;采用Unity 引擎完成客戶端的開發(fā),使用MySQL 數(shù)據(jù)庫存儲用戶數(shù)據(jù).通過通信協(xié)議的搭建、UI 框架的設(shè)計、預(yù)測式位置同步方法的創(chuàng)建、NPC 的應(yīng)用等完成了整個游戲的開發(fā),滿足了玩家的娛樂心理.

      1 游戲設(shè)計

      1.1 游戲背景

      本游戲是一款西式魔幻風(fēng)格的動作角色扮演游戲(ARPG),主要以傳說系列、伊蘇系列等經(jīng)典 RPG 游戲的感覺和理念而創(chuàng)作.游戲故事主要講述的是兩個部落的種族人民為了各自的利益,尋找陸地資源,在泰雷諾亞大陸上拼殺、搶奪資源的故事.

      1.2 游戲功能

      為了能夠滿足玩家的娛樂心理,同時也使游戲充滿趣味性,所以設(shè)計了如下功能:

      1)注冊登錄:玩家首先需要進行玩家注冊,錄入玩家信息后系統(tǒng)會自動將信息添加到數(shù)據(jù)庫中.注冊成功后,在登錄界面輸入玩家信息進入游戲.

      2)房間創(chuàng)建和加入:玩家登錄成功后,可以加入已經(jīng)創(chuàng)建的房間中,通過點擊加入按鈕加入,若房間人數(shù)已滿,則加入失敗;反之加入成功,等待游戲開始.玩家也可以自己創(chuàng)建房間,等待其他玩家的加入.

      3)游戲運行:游戲運行的過程中,場景里除了玩家之外,還加入了怪物NPC.NPC 會有自身的一套行為,它們會在固定的路線上進行巡邏、攻擊、躲避等行為,增強游戲的樂趣.

      4)玩家控制:玩家在游戲中通過鼠標控制角色的移動,或者通過鼠標點擊的方式讓角色自動尋路.在漫游的過程中撿取補給、增添裝備、強化技能.當遇見敵方玩家或者怪物時,釋放不同的角色技能來消滅對方.

      5)特效、音效:玩家攻擊、釋放技能、死亡時,系統(tǒng)會給出相應(yīng)的特效或者音效,使游戲的畫面感和浸入感增強.

      1.3 系統(tǒng)整體架構(gòu)

      圖1描述了本文所提出的游戲系統(tǒng)結(jié)構(gòu),多人在線網(wǎng)絡(luò)游戲系統(tǒng)包含客戶端和服務(wù)器端,客戶端包含接口、數(shù)據(jù)、界面、資源、網(wǎng)絡(luò)、房間和戰(zhàn)斗管理系統(tǒng).服務(wù)器端處理游戲運行時產(chǎn)生的數(shù)據(jù),包括玩家數(shù)據(jù)、房間數(shù)據(jù)和戰(zhàn)場數(shù)據(jù)等,同時對網(wǎng)絡(luò)通信進行管理.游戲支持手機、PC 等多種運行終端,并且具有良好的自適應(yīng)性.

      圖1 游戲系統(tǒng)結(jié)構(gòu)圖

      系統(tǒng)經(jīng)過人物建模和場景建模后進行場景集成,將集成好的場景文件導(dǎo)入到Unity3D 中,完成游戲場景的搭建.之后完成數(shù)據(jù)庫的設(shè)計,服務(wù)器、客戶端的制作.各個模塊相互獨立、耦合度低,便于后期的維護,能夠提升軟件開發(fā)的效率.

      1.4 游戲設(shè)計難點

      本文在線網(wǎng)絡(luò)游戲設(shè)計的難點在于游戲服務(wù)器端的設(shè)計,服務(wù)器系統(tǒng)架構(gòu)圖如圖2所示.服務(wù)器端包含一個總服務(wù)器和多個分組服務(wù)器,系統(tǒng)為每一個創(chuàng)建的游戲房間分配一個分組服務(wù)器,它負責(zé)當前房間的消息處理和轉(zhuǎn)發(fā).總服務(wù)器負責(zé)玩家的登錄注冊以及分組服務(wù)器的管理.

      圖2 服務(wù)器系統(tǒng)結(jié)構(gòu)圖

      2 關(guān)鍵技術(shù)及系統(tǒng)實現(xiàn)

      2.1 網(wǎng)絡(luò)通信協(xié)議構(gòu)建

      通信協(xié)議是指雙方實體完成通信或服務(wù)所必須遵循的規(guī)則和約定.通過通信信道和設(shè)備互連起來的多個不同地理位置的數(shù)據(jù)通信系統(tǒng),要使其能協(xié)同工作實現(xiàn)信息交換和資源共享,它們之間必須具有共同的語言.交流什么、怎樣交流及何時交流,都必須遵循某種互相都能接受的規(guī)則.通信協(xié)議的構(gòu)建可以讓通信雙方通過制定好的規(guī)則來進行數(shù)據(jù)的傳輸.在網(wǎng)絡(luò)游戲的設(shè)計中,網(wǎng)絡(luò)協(xié)議是最重要的,是整個游戲的核心.客戶端之間、客戶端與服務(wù)器之間通過協(xié)議完成消息的傳輸,保證游戲場景的一致性.

      為了提高開發(fā)效率及控制成本,設(shè)計一種便捷、清晰、高效的協(xié)議格式.本文設(shè)計了兩種通信協(xié)議格式,圖3是客戶端向服務(wù)器發(fā)送的協(xié)議格式,圖4是服務(wù)器向客戶端發(fā)送的協(xié)議格式.

      圖3 客戶端向服務(wù)器發(fā)送的協(xié)議格式

      圖4 服務(wù)器向客戶端發(fā)送的協(xié)議格式

      協(xié)議設(shè)計的思想是按照游戲中客戶端的請求類型進行設(shè)計的.游戲中大致有3 種請求類型:用戶類型、房間類型和戰(zhàn)斗類型,也就是協(xié)議格式中的RequestCode,根據(jù)請求類型細分成具體的請求方式,也就是格式中的ActionCode.Length 和Data 分別代表協(xié)議長度和協(xié)議內(nèi)容.這種協(xié)議的設(shè)計簡明清晰,數(shù)據(jù)小、解析快,服務(wù)器端可快速解析并轉(zhuǎn)發(fā),從而提升游戲運行速率.

      當客戶端向服務(wù)器發(fā)送請求時,協(xié)議格式如圖3所示.例如當進行登錄請求時,需要將玩家的用戶名(id)和密碼(password)傳送至服務(wù)器,服務(wù)器接收后以此作為憑據(jù)查詢數(shù)據(jù)庫檢查用戶名和密碼是否存在.

      當服務(wù)器向客戶端返回請求結(jié)果時,協(xié)議格式如圖4所示,ActionCode 與之前客戶端發(fā)送請求中的ActionCode 相對應(yīng),例如之前的登錄請求,服務(wù)器首先解析協(xié)議,然后查詢數(shù)據(jù)庫,若能匹配到請求中的用戶名和密碼,則返回string 類型的字符串Success,表示成功,否則返回Fail 表示失敗.客戶端收到服務(wù)器的返回結(jié)果時,首先解析協(xié)議,解析出協(xié)議中的各個字段,當解析到的結(jié)果為Success 時,表示登錄成功,進入到房間界面.否則,系統(tǒng)給出提示:登錄失敗.

      系統(tǒng)是基于Socket 的通信方式,協(xié)議的發(fā)送是調(diào)用Socket 中的Send 函數(shù).圖5是服務(wù)器和客戶端通信的時序圖.

      圖5 服務(wù)器與客戶端的通信時序圖

      2.2 UI 框架設(shè)計

      UI 設(shè)計包括對游戲的人機交互、操作邏輯、界面美觀的整體設(shè)計.好的UI 設(shè)計不僅讓游戲變得更有樂趣、更有品味,更讓游戲的操作變得舒適簡單、愉悅自由.因此設(shè)計出一種通用的UI 框架對于提升游戲的開發(fā)進度有著很大的作用.本文的UI 框架設(shè)計方案是:首先,每一個界面對應(yīng)一個面板(Panel),每一個面板對應(yīng)一個類.在這個類中編寫面板的功能,再設(shè)計一個界面管理器,用它來控制界面的顯示和關(guān)閉.界面管理器中有兩個基本方法:分別是Open 和Close.

      所有的面板類繼承一個面板基類,面板基類中有OnInit、OnShow、OnClose 等3 個固定的方法.

      當調(diào)用界面管理器中的Open 方法時,界面管理器會依次調(diào)用對應(yīng)面板中的OnInit 和OnShow.在這兩個函數(shù)中可以添加一些初始化方法,包括按鈕事件監(jiān)聽、網(wǎng)絡(luò)消息監(jiān)聽等.在調(diào)用的Close 方法時,界面管理器會調(diào)用面板類的OnClose 方法,在OnClose 可以添加一些資源釋放的功能,例如取消網(wǎng)絡(luò)消息監(jiān)聽.在OnInit 方法中設(shè)置skinPath 和layer,skinPath 代表皮膚路徑,系統(tǒng)會根據(jù)該路徑動態(tài)加載Resourses 中的界面資源.layer 代表層級,可以設(shè)置面板的優(yōu)先級,確定面板的上下層級關(guān)系.例如提示面板會顯示在其他功能面板之上,應(yīng)該設(shè)置為最高優(yōu)先級.

      界面管理器PanelManager 和面板基類的邏輯結(jié)構(gòu)如圖6和圖7所示.

      圖6 界面管理器邏輯結(jié)構(gòu)圖

      圖7 界面基類邏輯結(jié)構(gòu)圖

      界面管理器中的panels 是一個字典,它會保存所有已經(jīng)打開的面板,以便阻止重復(fù)打開,方便實現(xiàn)關(guān)閉功能.layers 是層級列表,維護每個面板的層級.

      每個面板通過動態(tài)加載資源,然后進行實例化.每個面板都有自己單獨的面板類,繼承自面板基類,面板基類如圖7所示.在OnShow()方法中進行組件的初始化,例如找到登錄面板上的登錄按鈕組件,之后添加登錄按鈕的事件監(jiān)聽,當玩家點擊登錄按鈕時,向服務(wù)器發(fā)送登錄協(xié)議.

      2.3 NPC 設(shè)計

      NPC 的加入可以使游戲更加具有刺激性,使玩家能夠產(chǎn)生興趣[2].本文的NPC 設(shè)計采用的是動畫狀態(tài)機.目前游戲中加入了兩種怪物,為此系統(tǒng)根據(jù)怪物的特點,攻擊力的強弱,屬性值的差異、技能的多少設(shè)計了兩種動畫狀態(tài)機.

      圖8表示的是一般怪物—哥布林動畫狀態(tài)機,因其能力較弱,所以加入了較少的動畫和攻擊技能.圖9展示的是Boss 怪物的狀態(tài)機,由于屬性強,給其加入了多種攻擊技能和多種狀態(tài)動畫.

      圖8 哥布林動畫狀態(tài)機圖

      圖9 Boss 動畫狀態(tài)機圖

      系統(tǒng)設(shè)計的怪物有3 種狀態(tài):巡邏,追趕玩家和戰(zhàn)斗,如圖中的Walk、Run 和Attack.當怪物距離玩家較遠時,怪物在固定的幾個點來回緩慢行走(Walk),同時實時觀察自己周圍是否有玩家進入;當怪物法線有玩家進入周圍時,進入追趕玩家狀態(tài),朝著玩家的方向奔跑(Run);在追趕狀態(tài),當玩家跑遠了,怪物發(fā)現(xiàn)玩家已經(jīng)不在自己范圍內(nèi)時則返回巡邏狀態(tài);反之當追趕上玩家,即玩家在自己攻擊范圍內(nèi)時則進入攻擊狀態(tài),此時不再移動,而是朝向玩家播放攻擊動畫.

      2.4 系統(tǒng)特效

      一個比較成功的游戲中往往會有許多華麗炫酷的特效,包括場景特效和人物技能特效.本文的游戲中也加入了相應(yīng)的特效設(shè)計.場景特效包括火焰、煙霧特效等,人物技能特效包括閃電光特效、刀光特效、煙霧魔法特效等.每一個特效都是由多種效果組合完成.圖10展示的是游戲中的特效效果.

      圖10 特效效果圖

      2.5 游戲運行及操作控制

      本文設(shè)計的游戲內(nèi)存和內(nèi)核的使用率低,對于GPU 硬件的要求較高.基本運行和最高運行時的需求如表1.

      表1 游戲運行需求

      玩家可通過鼠標和鍵盤的方式控制角色,行走時可使用鼠標點擊地面或者按WASD 鍵控制人物在場景中的走動.同時,Q、R、T 按鍵為人物技能鍵,B 為背包鍵.

      3 關(guān)鍵算法

      3.1 導(dǎo)航網(wǎng)格尋路算法

      在游戲?qū)?zhàn)的過程中,玩家角色需要在游戲場景中行走,因此需要解決角色的尋路問題.當玩家點擊地面時,角色會自動走向點擊的位置.由于Unity3D 自帶的尋路方式精確度不夠,不能很好的滿足玩家的心理.所以本文在此基礎(chǔ)上進行改進,使之能夠玩家的需求.

      3.1.1 三角導(dǎo)航網(wǎng)格的生成

      導(dǎo)航網(wǎng)格是一個凸多邊形的集合,凸多邊形指其內(nèi)部任意兩點的連線都在其內(nèi)部,每個單元在路徑搜索的過程中高度獨立.本文首先利用建模工具對地圖進行處理,剔除障礙物所在區(qū)域,生成可行走區(qū)域的多邊形網(wǎng)格地圖.然后對多邊形網(wǎng)格進行三角剖分,使尋路算法能夠運用于多邊形網(wǎng)格.本文的多邊形網(wǎng)格地圖三角剖分采用的是一種快速約束Delaunay 三角剖分算法[3].算法如下:

      輸入:navmesh 多邊形導(dǎo)航網(wǎng)格數(shù)據(jù)輸出:Delaunay 三角網(wǎng)格1.讀取網(wǎng)格信息,保存邊界和頂點信息;2.遍歷邊界邊,作為起始約束邊;3.如果頂點不為空;4.判斷可見點;5.創(chuàng)建三角形外接圓和外接圓的包圍盒;6.遍歷外接圓包圍盒的所有頂點;7.判斷DT 點;8.連接兩點之間的線;9.返回三角形,返回第3 步.

      三角剖分的前后效果如圖11所示.

      圖11 三角剖分效果圖

      3.1.2 網(wǎng)格尋路

      本文基于改進A*算法[4]的3D 場景的自動尋路.網(wǎng)格尋路的效果如圖12所示,藍色區(qū)域為可行走區(qū)域,其他為不可行走區(qū)域.

      3.2 預(yù)測式位置同步算法

      由于存在網(wǎng)絡(luò)延遲,很難做到實時的、精確的位置同步,只能通過各種方法來盡量減少誤差[5].傳統(tǒng)的有瞬移式位置同步算法和移動式位置同步算法,但是游戲體驗不好,誤差比較大,實時性較差.所以本文采用預(yù)測式位置同步來提升用戶的體驗,減少誤差.

      在某些有規(guī)律可循的條件下,比如玩家勻速或者勻加速運動,我們能夠預(yù)測玩家在接下來某個時間點的位置,讓玩家提前走到預(yù)測的位置上去,這就是預(yù)測算法.

      圖12 路徑生成

      假設(shè)玩家的移動速度保持不變,同步時間不變,玩家2 可以預(yù)測玩家1 的后續(xù)同步位置.如圖13所示.玩家1 經(jīng)過B 點時發(fā)送同步信息,玩家2 根據(jù)s=vt計算得出下一次同步時玩家1 應(yīng)移動到C點,然后以速度v向C點移動.此時的距離誤差為v·t(延遲).

      圖13 剛剛同步位置的距離誤差

      如圖14所示,玩家2 始終保持著速度v向預(yù)測位置靠近,距離誤差一直是v·t(延遲).若忽略網(wǎng)絡(luò)延遲時間,則誤差為0.

      圖14 同步位置后的距離誤差

      玩家1 不可能一直保持恒定的速度(包括速度的大小和方向).玩家2 雖然可以計算最近兩次同步信息的差值來獲取較為準確的移動速度,但是誤差還是存在.但總體上這種誤差在可接受范圍之內(nèi),平均誤差依然為0.

      4 系統(tǒng)優(yōu)化

      游戲制作完成后,需要對系統(tǒng)進行優(yōu)化以此來提升游戲運行的流暢度和玩家的游戲體驗.為此,本文采用了以下幾個技術(shù)來優(yōu)化系統(tǒng).

      (1)LOD (Level Of Detail)技術(shù)

      LOD 是對模型建立了一個模型金字塔,根據(jù)攝像機距離對象的遠近,選擇使用不同精度的模型.它的好處是可以在適當?shù)臅r候大量減少需要繪制的頂點數(shù)目[6].圖15展示了使用LOD 技術(shù)后油桶從一個完整網(wǎng)格到簡化網(wǎng)格,最后完全被剔除的例子.當距離攝像機較近的情況下使用LOD0 層級的模型,即高精度模型;較遠的情況下使用LOD2 層級,即低精度模型.

      圖15 使用LOD 技術(shù)效果圖

      (2)遮擋剔除技術(shù)

      遮擋剔除是當一個物體被其他物體遮擋住而不在攝像機的可視范圍內(nèi)時不對其進行渲染.遮擋剔除前后的效果如圖16所示.使用該技術(shù)后,系統(tǒng)會自動剔除相機視野中被遮擋的物體.

      圖16 使用遮擋剔除技術(shù)效果圖

      (3)Lightmaps 技術(shù)

      主要用于場景中整體的光照效果.這種技術(shù)主要是提前把場景中的光照信息存儲在一張光照紋理中,然后在運行時刻只需要根據(jù)紋理采樣得到光照信息即可.與之配合的還有Light Probes 技術(shù).

      5 結(jié)語

      本文實現(xiàn)了多人在線網(wǎng)絡(luò)游戲系統(tǒng),其中包括行走控制、人工智能系統(tǒng)、界面系統(tǒng)、服務(wù)端框架、客戶端框架、房間系統(tǒng)、戰(zhàn)場系統(tǒng)等多項內(nèi)容.游戲操作簡易,界面美觀,畫面感強,在后期的體驗中整體上滿足玩家的需求.

      后期的工作是在游戲中添加更多的功能模塊,為游戲增加不同場景的地圖和不同游戲角色,使玩家有更多的選擇.

      猜你喜歡
      面板客戶端服務(wù)器
      面板燈設(shè)計開發(fā)與應(yīng)用
      通信控制服務(wù)器(CCS)維護終端的設(shè)計與實現(xiàn)
      MasterCAM在面板類零件造型及加工中的應(yīng)用
      模具制造(2019年4期)2019-06-24 03:36:50
      縣級臺在突發(fā)事件報道中如何應(yīng)用手機客戶端
      傳媒評論(2018年4期)2018-06-27 08:20:24
      孵化垂直頻道:新聞客戶端新策略
      傳媒評論(2018年4期)2018-06-27 08:20:16
      基于Vanconnect的智能家居瘦客戶端的設(shè)計與實現(xiàn)
      電子測試(2018年10期)2018-06-26 05:53:34
      Photoshop CC圖庫面板的正確打開方法
      得形忘意的服務(wù)器標準
      計算機網(wǎng)絡(luò)安全服務(wù)器入侵與防御
      高世代TFT-LCD面板生產(chǎn)線的產(chǎn)能評估
      镇原县| 诸暨市| 祁阳县| 长垣县| 调兵山市| 根河市| 铜鼓县| 荥经县| 册亨县| 革吉县| 融水| 盐山县| 麻阳| 嘉义县| 吉木萨尔县| 武鸣县| 花莲市| 大化| 宜丰县| 共和县| 汉中市| 普定县| 罗山县| 古丈县| 津市市| 樟树市| 和硕县| 同心县| 象州县| 石门县| 望城县| 汉川市| 云龙县| 鄄城县| 屏南县| 达日县| 平舆县| 九台市| 上饶市| 苏尼特右旗| 察隅县|