劉夢穎 馬宏琳
摘 要:目前,數(shù)字游戲產(chǎn)業(yè)已經(jīng)成為數(shù)字經(jīng)濟(jì)不可或缺的一部分。本文以Unity平臺為基礎(chǔ),圍繞冒險游戲的設(shè)計目標(biāo),闡述了游戲開發(fā)的整個過程。玩家可以通過計算機(jī)客戶端進(jìn)行聯(lián)機(jī)對戰(zhàn),操控機(jī)器人發(fā)射激光射線進(jìn)行大賽比拼。同時,設(shè)計了雪天特效,并根據(jù)玩家數(shù)量的不同,動態(tài)擴(kuò)容校園場景地圖。經(jīng)驗證,系統(tǒng)運行時網(wǎng)絡(luò)資源和設(shè)備資源占用率低,實現(xiàn)效果良好。
關(guān)鍵詞:Unity;Photon Engine;網(wǎng)絡(luò)游戲
中圖分類號:TP317文獻(xiàn)標(biāo)識碼:A文章編號:1003-5168(2021)17-0030-03
Design and Implementation of Adventure Game Based on Unity
LIU Mengying MA Honglin
(School of Information Science and Engineering, Henan University of Technology,Zhengzhou Henan 450001)
Abstract: At present, the digital game industry has become an indispensable part of the digital economy. Based on the Unity platform, the entire process of game development is explained around the design goals of adventure games in this paper. Players can conduct online battles through the computer client, and control robots to emit laser rays for competition. At the same time, special effects in snow are designed, and the campus scene map is dynamically expanded according to the number of players. It has been verified that the network resource and equipment resource occupancy rate is low when the system is running, and the implementation effect is good.
Keywords: unity;photon engine;online games
計算機(jī)游戲歷經(jīng)幾十年的發(fā)展,由最初使用FORTRAN程序編寫躲避遮擋物場景游戲開始,逐漸衍生出多人對戰(zhàn)、扮演角色(RPG)、卡牌休閑、放置養(yǎng)成、橫板闖關(guān)等各式各樣的游戲;從平面2D游戲到立體生動的3D游戲,在玩法創(chuàng)意、游戲畫面設(shè)計以及開發(fā)技術(shù)方面的發(fā)展水平都令人觸目興嘆[1]。其中,多人冒險網(wǎng)絡(luò)游戲是通過互聯(lián)網(wǎng)將大量玩家即時聯(lián)系起來,在虛擬世界中進(jìn)行冒險。它不僅能帶給用戶身臨其境的游戲體驗,也更注重游戲的互動性與趣味性。
1 Unity與Photon引擎結(jié)合開發(fā)冒險游戲
PUN(Photon Unity Networking)是一個Unity多人游戲插件包。它提供了身份驗證選項,并能夠快速、可靠地通過Photon后端實現(xiàn)游戲內(nèi)部通信。PUN可以輸出幾乎所有Unity支持的平臺,它提供了兩個C#接口IPunCallbacks和IPunObservable,可以在類中實現(xiàn)[2]。
本游戲軟件采用Unity進(jìn)行開發(fā),分為客戶端和服務(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ò)通信進(jìn)行管理。游戲支持個人計算機(jī)(PC)運行終端,并且具有良好的自適應(yīng)性[3]。
2 游戲設(shè)計與實現(xiàn)
2.1 游戲總體設(shè)計
針對冒險游戲的特點,采用Unity客戶端與Photon服務(wù)器相結(jié)合的架構(gòu)進(jìn)行設(shè)計,通過Unity客戶端之間的信息傳遞,實現(xiàn)同時多人在線游戲。游戲整體框架設(shè)計如圖1所示,游戲流程設(shè)計如圖2所示。在游戲功能的總體設(shè)計中,分別設(shè)計客戶端功能與服務(wù)器端功能,主要的功能模塊可劃分為四大模塊,即戰(zhàn)斗模塊、界面模塊、場景模塊和網(wǎng)絡(luò)模塊。游戲模塊設(shè)計如圖3所示。對于多人在線的網(wǎng)絡(luò)同步,采用玩家輸入請求,然后通過客戶端向服務(wù)器提交請求的方式來實現(xiàn)。
2.2 游戲詳細(xì)設(shè)計
基于游戲的總體設(shè)計,進(jìn)行游戲各部分的詳細(xì)設(shè)計,主要包括玩家模型、游戲場景、游戲天氣、游戲界面、游戲管理器和關(guān)卡、玩家生命值、網(wǎng)絡(luò)同步等功能。
2.2.1 玩家模型設(shè)計。在Blender軟件中建造好機(jī)器人模型后導(dǎo)入Unity,使其成為一個無須連接PUN就可以正常工作的預(yù)制體。
2.2.2 游戲場景設(shè)計。該游戲擁有4個場景,根據(jù)玩家人數(shù)的不同分別加載不同的游戲競技場景,不僅節(jié)省網(wǎng)絡(luò)資源和硬件資源,而且滿足不同玩家人數(shù)的場景設(shè)置需要。當(dāng)只有一名玩家時,進(jìn)入等待大廳的游戲場景。超過兩人時,玩家進(jìn)入多人競技場場景,該場景設(shè)計仿照河南工業(yè)大學(xué)校園的一角,運用草地、云朵、小山、樹木、小橋等多組模型搭建而成。當(dāng)玩家人數(shù)為三人或四人時,場景模型數(shù)量和場景架構(gòu)也隨之變化[4]。
2.2.3 游戲天氣設(shè)計。利用Unity中的Particle System組件模擬了雪天等特效。
2.2.4 游戲界面設(shè)計。利用Canvas和Button等組件創(chuàng)建界面和按鈕,并使用PlayerPrefs插件記住玩家名字,創(chuàng)建Player UI界面動態(tài)展示玩家生命值狀態(tài)。
2.2.5 游戲管理器和關(guān)卡設(shè)計。設(shè)計LoadArena()方法,將基于所在房間的PlayerCount屬性加載至適當(dāng)?shù)姆块g。利用GameManager腳本監(jiān)聽連接及斷開連接的玩家情況。
2.2.6 游戲玩家設(shè)計。獲取Animator組件,編寫玩家對于角色的控制,使玩家能夠使用輸入設(shè)備來操作該角色,完成行走、跑、跳躍、開火等多種動作互動[5]。
2.2.7 玩家生命值設(shè)計。當(dāng)玩家被光束撞擊時,整個光束撞擊過程要實時顯示生命值的減少過程。另外,當(dāng)對戰(zhàn)時玩家的生命值降為0,系統(tǒng)將判定其游戲失敗并退出房間。進(jìn)行代碼設(shè)計時,先在GameManager腳本中創(chuàng)建一個離開房間的方法,然后在玩家腳本的Update方法中添加一個if (Health <= 0f)判定方法,再通過調(diào)用GameManager腳本中的LeaveRoom()方法退出房間。
2.2.8 戰(zhàn)斗系統(tǒng)設(shè)計。游戲設(shè)計從機(jī)器人眼里發(fā)射出的激光作為戰(zhàn)斗系統(tǒng)的武器,將激光束與機(jī)器人的頭部綁定,玩家按下開火鍵時,激光束將從機(jī)器人眼里發(fā)射出來。
2.2.9 玩家相機(jī)設(shè)計。根據(jù)增加的偏移量來計算所需的相機(jī)位置,達(dá)到跟隨玩家的效果。使用距離參數(shù)反映水平偏移,使用高度參數(shù)反映垂直偏移,然后使用Lerping平滑運動以趕上所需的位置,最后使用簡單的LookAt使相機(jī)始終指向播放器。
2.2.10 服務(wù)器端運行。本游戲在運行客戶端時必須連接Photon服務(wù)器,提前架設(shè)服務(wù)器端。服務(wù)器引擎封裝了一系列網(wǎng)絡(luò)通信方法,通過調(diào)用這些方法,可以實現(xiàn)網(wǎng)絡(luò)通信和網(wǎng)絡(luò)同步。
2.2.11 網(wǎng)絡(luò)同步設(shè)計。通過Unity提供的Photon Transform View組件和Photon Animator View組件進(jìn)行基礎(chǔ)的同步。因為激光武器只有在photonView.IsMine為真時才需要工作,為此在PlayerManager腳本中繼承IPunObservable接口來手動同步IsFiring布爾值。在IPunObservable.OnPhotonSerializeView方法中,獲得一個變量流,判定玩家是本地玩家(即photonView.IsMine == true)時才能使用stream.SendNext()將IsFiring值附加到數(shù)據(jù)流中寫入,否則只能使用stream.ReceiveNext()閱讀。另外,生命值的網(wǎng)絡(luò)同步方法和激光武器類似,同樣使用變量流進(jìn)行同步設(shè)計。
2.3 游戲?qū)崿F(xiàn)效果
圖4至圖7展示了多名玩家登錄、連接游戲客戶端、等待到進(jìn)行多人對戰(zhàn)的整個過程。實踐證明,游戲運行效果良好。
3 結(jié)語
本文以Unity平臺為基礎(chǔ),結(jié)合Photon引擎技術(shù)與Blender模型設(shè)計,采用C#語言進(jìn)行開發(fā)和技術(shù)研究,實現(xiàn)了以機(jī)器人為主視角的網(wǎng)絡(luò)對戰(zhàn)冒險游戲。實踐證明,Unity與Photon技術(shù)相結(jié)合可以高效地進(jìn)行網(wǎng)絡(luò)冒險游戲的開發(fā),游戲運行狀態(tài)和可操作性良好。
參考文獻(xiàn):
[1]呂學(xué)琴,蘇閏,陳彥軍.基于Unity引擎制作塔防游戲[J].智能計算機(jī)與應(yīng)用,2018(5):95-99.
[2]龔高強(qiáng).基于Unity引擎的3D游戲客戶端系統(tǒng)設(shè)計與實現(xiàn)[D].武漢:華中科技大學(xué),2016:20-24.
[3]翟濤.基于Unity3D的游戲智能行為體的研究與設(shè)計[D].沈陽:沈陽師范大學(xué),2018:17-20.
[4]王海嘯.基于Unity3D游戲引擎的三維動畫虛擬攝像機(jī)的設(shè)計與實現(xiàn)[D].北京:北京大學(xué),2014:18-19.
[5]邱競峰,王洪源,陳慕羿.Unity3D引擎實現(xiàn)游戲人物的基本操控[J].中國新技術(shù)新產(chǎn)品,2016(19):24-25.