劉夢穎 馬宏琳



摘 要:目前,數字游戲產業已經成為數字經濟不可或缺的一部分。本文以Unity平臺為基礎,圍繞冒險游戲的設計目標,闡述了游戲開發的整個過程。玩家可以通過計算機客戶端進行聯機對戰,操控機器人發射激光射線進行大賽比拼。同時,設計了雪天特效,并根據玩家數量的不同,動態擴容校園場景地圖。經驗證,系統運行時網絡資源和設備資源占用率低,實現效果良好。
關鍵詞:Unity;Photon Engine;網絡游戲
中圖分類號:TP317文獻標識碼: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
計算機游戲歷經幾十年的發展,由最初使用FORTRAN程序編寫躲避遮擋物場景游戲開始,逐漸衍生出多人對戰、扮演角色(RPG)、卡牌休閑、放置養成、橫板闖關等各式各樣的游戲;從平面2D游戲到立體生動的3D游戲,在玩法創意、游戲畫面設計以及開發技術方面的發展水平都令人觸目興嘆[1]。其中,多人冒險網絡游戲是通過互聯網將大量玩家即時聯系起來,在虛擬世界中進行冒險。它不僅能帶給用戶身臨其境的游戲體驗,也更注重游戲的互動性與趣味性。
1 Unity與Photon引擎結合開發冒險游戲
PUN(Photon Unity Networking)是一個Unity多人游戲插件包。它提供了身份驗證選項,并能夠快速、可靠地通過Photon后端實現游戲內部通信。PUN可以輸出幾乎所有Unity支持的平臺,它提供了兩個C#接口IPunCallbacks和IPunObservable,可以在類中實現[2]。
本游戲軟件采用Unity進行開發,分為客戶端和服務器端。客戶端包含接口、數據、界面、資源、網絡、房間和戰斗管理系統等;服務器端處理游戲運行時產生的數據,包括玩家數據、房間數據和戰場數據等,同時對網絡通信進行管理。游戲支持個人計算機(PC)運行終端,并且具有良好的自適應性[3]。
2 游戲設計與實現
2.1 游戲總體設計
針對冒險游戲的特點,采用Unity客戶端與Photon服務器相結合的架構進行設計,通過Unity客戶端之間的信息傳遞,實現同時多人在線游戲。游戲整體框架設計如圖1所示,游戲流程設計如圖2所示。在游戲功能的總體設計中,分別設計客戶端功能與服務器端功能,主要的功能模塊可劃分為四大模塊,即戰斗模塊、界面模塊、場景模塊和網絡模塊。游戲模塊設計如圖3所示。對于多人在線的網絡同步,采用玩家輸入請求,然后通過客戶端向服務器提交請求的方式來實現。
2.2 游戲詳細設計
基于游戲的總體設計,進行游戲各部分的詳細設計,主要包括玩家模型、游戲場景、游戲天氣、游戲界面、游戲管理器和關卡、玩家生命值、網絡同步等功能。
2.2.1 玩家模型設計。在Blender軟件中建造好機器人模型后導入Unity,使其成為一個無須連接PUN就可以正常工作的預制體。
2.2.2 游戲場景設計。該游戲擁有4個場景,根據玩家人數的不同分別加載不同的游戲競技場景,不僅節省網絡資源和硬件資源,而且滿足不同玩家人數的場景設置需要。當只有一名玩家時,進入等待大廳的游戲場景。超過兩人時,玩家進入多人競技場場景,該場景設計仿照河南工業大學校園的一角,運用草地、云朵、小山、樹木、小橋等多組模型搭建而成。當玩家人數為三人或四人時,場景模型數量和場景架構也隨之變化[4]。
2.2.3 游戲天氣設計。利用Unity中的Particle System組件模擬了雪天等特效。
2.2.4 游戲界面設計。利用Canvas和Button等組件創建界面和按鈕,并使用PlayerPrefs插件記住玩家名字,創建Player UI界面動態展示玩家生命值狀態。
2.2.5 游戲管理器和關卡設計。設計LoadArena()方法,將基于所在房間的PlayerCount屬性加載至適當的房間。利用GameManager腳本監聽連接及斷開連接的玩家情況。
2.2.6 游戲玩家設計。獲取Animator組件,編寫玩家對于角色的控制,使玩家能夠使用輸入設備來操作該角色,完成行走、跑、跳躍、開火等多種動作互動[5]。
2.2.7 玩家生命值設計。當玩家被光束撞擊時,整個光束撞擊過程要實時顯示生命值的減少過程。另外,當對戰時玩家的生命值降為0,系統將判定其游戲失敗并退出房間。進行代碼設計時,先在GameManager腳本中創建一個離開房間的方法,然后在玩家腳本的Update方法中添加一個if (Health <= 0f)判定方法,再通過調用GameManager腳本中的LeaveRoom()方法退出房間。
2.2.8 戰斗系統設計。游戲設計從機器人眼里發射出的激光作為戰斗系統的武器,將激光束與機器人的頭部綁定,玩家按下開火鍵時,激光束將從機器人眼里發射出來。
2.2.9 玩家相機設計。根據增加的偏移量來計算所需的相機位置,達到跟隨玩家的效果。使用距離參數反映水平偏移,使用高度參數反映垂直偏移,然后使用Lerping平滑運動以趕上所需的位置,最后使用簡單的LookAt使相機始終指向播放器。
2.2.10 服務器端運行。本游戲在運行客戶端時必須連接Photon服務器,提前架設服務器端。服務器引擎封裝了一系列網絡通信方法,通過調用這些方法,可以實現網絡通信和網絡同步。
2.2.11 網絡同步設計。通過Unity提供的Photon Transform View組件和Photon Animator View組件進行基礎的同步。因為激光武器只有在photonView.IsMine為真時才需要工作,為此在PlayerManager腳本中繼承IPunObservable接口來手動同步IsFiring布爾值。在IPunObservable.OnPhotonSerializeView方法中,獲得一個變量流,判定玩家是本地玩家(即photonView.IsMine == true)時才能使用stream.SendNext()將IsFiring值附加到數據流中寫入,否則只能使用stream.ReceiveNext()閱讀。另外,生命值的網絡同步方法和激光武器類似,同樣使用變量流進行同步設計。
2.3 游戲實現效果
圖4至圖7展示了多名玩家登錄、連接游戲客戶端、等待到進行多人對戰的整個過程。實踐證明,游戲運行效果良好。
3 結語
本文以Unity平臺為基礎,結合Photon引擎技術與Blender模型設計,采用C#語言進行開發和技術研究,實現了以機器人為主視角的網絡對戰冒險游戲。實踐證明,Unity與Photon技術相結合可以高效地進行網絡冒險游戲的開發,游戲運行狀態和可操作性良好。
參考文獻:
[1]呂學琴,蘇閏,陳彥軍.基于Unity引擎制作塔防游戲[J].智能計算機與應用,2018(5):95-99.
[2]龔高強.基于Unity引擎的3D游戲客戶端系統設計與實現[D].武漢:華中科技大學,2016:20-24.
[3]翟濤.基于Unity3D的游戲智能行為體的研究與設計[D].沈陽:沈陽師范大學,2018:17-20.
[4]王海嘯.基于Unity3D游戲引擎的三維動畫虛擬攝像機的設計與實現[D].北京:北京大學,2014:18-19.
[5]邱競峰,王洪源,陳慕羿.Unity3D引擎實現游戲人物的基本操控[J].中國新技術新產品,2016(19):24-25.