袁科 高啟文 閆永航



摘 要:目前應用商店中的PRG類游戲有很多種,但往往存在人物單一等問題。針對該問題,旨在開發一款既包含其它PRG類游戲元素,又不缺乏多樣性的PRG類游戲。基于Unity3D游戲引擎組件與腳本、怪物智能導航及AssetBundle加載技術等,采用SQLite輕量級數據庫,在Visual Studio2017開發平臺上設計并實現了一款角色扮演游戲。首先進行功能與性能需求分析,然后給出游戲背景故事與游戲流程,闡述了游戲界面與游戲場景設計思想,最后詳述了游戲關鍵開發技術,并展示了游戲實現效果。
關鍵詞:Unity3D;Asset Bundle加載;SQLite輕量級數據庫;角色扮演游戲
DOI:10. 11907/rjdk. 191239 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP319 文獻標識碼:A 文章編號:1672-7800(2019)008-0075-05
The Design and Implementation of Role Play Game Based on Unity3D
YUAN Ke,GAO Qi-wen,YAN Yong-hang
(School of Computer and Information Engineering, Henan University, Kaifeng 475004, China)
Abstract: At present, there are various kinds of PRG games in application stores, but there are many problems such as single characters. Aiming at this problem, this paper aims to develop a PRG game which contains other PRG elements and does not lack diversity. Based on Unity3D game engine components and scripting technology, monster intelligent navigation, AssetBundle loading technology, this paper designs and implements a role-playing game on Visual Studio 2017 development platform using SQLite lightweight database. Firstly, the functional and performance requirements are analyzed. Then, the background story and the game flow are given, and the design idea of the game interface and scene is elaborated. Finally, the key development technologies of the game are described in detail, and the effect of the game implementation is shown.
Key Words: Unity3D; AssetBundle loading; lightweight database of the sqlite; role-playing game
基金項目:國家自然科學基金項目(61802111);河南省高等學校重點科研項目基礎研究計劃項目(18A413004)
作者簡介:袁科(1982-),男,博士,河南大學計算機與信息工程學院副教授、碩士生導師,研究方向為密碼學與信息安全;高啟文(1995-),男,河南大學計算機與信息工程學院學生,研究方向為軟件工程;閆永航(1981-),男,博士,河南大學計算機與信息工程學院副教授、碩士生導師,研究方向為網絡安全。本文通訊作者:閆永航。
0 引言
角色扮演游戲(Role-playing Game,PRG)是網絡游戲類型之一[1],在游戲中,用戶負責扮演特定角色在一個寫實或虛構世界中活動。目前,國內外諸多研發人員開展了關于PRG的研究與開發工作,如朱道真等[2]開發了基于DirectX的PRG類游戲;佟振明等[3]開展了大型多人在線角色扮演游戲的下一地點預測研究;高少文[4]研究了大型多人在線角色扮演游戲特定玩家類別抽取問題;Dickey[5]針對大量在線角色扮演游戲如何培養內在動機問題進行推測分析;Mcconville等[6]利用角色扮演游戲進行工程教育研究;Billings[7]研究如何利用角色扮演模擬游戲促進系統性思考。
根據第一手游網2019年1月中國手游曝光度數據報告,該月百強手游曝光度排名Top 1的為PRG類游戲;在Top100游戲中,PRG類游戲占50%;在1月份新游戲中,PRG類游戲占68.75%[8],可見PRG類游戲在網絡游戲中的重要地位。目前PRG游戲開發商有很多,國內有騰訊、網易等,國外有拳頭、藍洞、任天堂等,社會上也存在著規模不同的開發團隊,因此PRG游戲的風格和質量也參差不齊。有些游戲質量較高,但存在操作復雜的問題,有些游戲趣味性十足,玩法卻過于單一。
隨著第四代移動網絡技術的逐漸成熟與虛擬現實技術的快速發展,出現了很多新型網絡游戲開發技術,如近幾年熱門的Unity3D等[9]。Unity3D是由Unity Technologies開發的一個可讓用戶輕松創建如三維視頻游戲與實時三維動畫等類型互動內容的多平臺綜合型專業游戲引擎[10]。目前,國內外諸多研發人員開展了基于Unity3D平臺的研究與開發工作。如張陽等[11]基于Unity3D技術與VR頭盔開發了虛擬現實體感游戲;吳晶晶等[9]基于Unity3D技術進行多人在線網絡游戲設計與開發;劉桂元等[12]基于Unity3D技術開發了教育類游戲;董春俠等[13]基于Unity3D技術開發了一款虛擬校園APP;潘俊浩等[14]提出一種基于Unity3D的工業機器人示教系統設計方法;杜猛等[15]基于Unity3D技術開發了斷路器教學系統;Guo等[16]研究了基于Unity3D的虛擬博物館展示模型;Wang[17]在可視化環境中通過Unity 3D進行游戲化學習研究;Othman等[18]利用Unity3D引擎開發了基于反射的智能體。
雖然目前應用商店中的PRG類游戲種類很多,但一般都存在人物單一等問題。針對該問題,本文采用C#語言,基于Unity3D技術與Visual Studio2017平臺開發了一款PRG類游戲。該游戲既包含其它PRG類游戲元素,又不缺乏多樣性,可實現人物升級、副本通關、裝備購買、抽獎等功能。
1 需求分析
1.1 功能需求分析
該游戲功能需求包括:
(1)角色選擇與登錄:用戶在運行游戲時首先選擇自己想要玩的角色(3個角色),然后進入游戲。
(2)人物移動與技能釋放:用戶在游戲中可以控制角色移動,通過按下技能鍵可以釋放若干不同技能。
(3)怪物巡邏與人工智能(Artificial Intelligence,AI)化:怪物在用戶未進入視野時可以自行巡邏,在用戶進入視野或受到用戶傷害時可對用戶進行攻擊。
(4)用戶界面(User Interface,UI)邏輯:包含商品買入與賣出、裝備使用與棄用、藥物使用、抽獎及聲音控制。
(5)游戲控制類:人物過關與否判定,怪物生成及死亡。
(6)非玩家控制角色(Non-Player Character,NPC)交互:用戶可通過觸發場景中的NPC進行操作,包括打開關卡、選擇界面等。
1.2 性能需求分析
該游戲性能需求包括:
(1)運行需求分析:要求游戲運行流暢,不會出現閃退或電腦內存占用過大等現象。
(2)最終生成游戲大小:1G以內。
(3)魯棒性:針對不同分辨率的屏幕,UI界面都應能夠適配,不能出現UI界面消失甚至變形等對用戶不友好的現象。
(4)場景跳轉相應時間需求:配合進度條,游戲場景加載完成后,2s內應完成跳轉。
2 游戲背景與流程設計
2.1 游戲背景故事設計
《九州百靈傳》是一個由同名小說改編的冒險類RPG。游戲背景故事如下:天變地異,遠古邪靈再度降臨,手持弓箭的少年為拯救大陸與同伴一起踏上修行旅程。修行中,古怪精靈的她,和心中的他究竟會有怎樣的結局?劍之道,迷惘的他又能否找回持劍的理由?生或死,他又將作何抉擇?此刻前往屬于你的冒險世界一探究竟吧!
2.2 游戲整體流程
該游戲整體流程包含游戲用戶選擇人物、進入場景,以及與NPC交互,如圖1所示。其具體流程為:①用戶選擇人物,完成選擇后則進入用戶出生城鎮;②出生地有兩個NPC:關卡NPC和當鋪NPC,用戶可以在出生城鎮隨意走動,選擇是否觸發NPC;③用戶如果觸發NPC進入關卡,則彈出選關界面。如果確認進入則進入游戲副本,否則選關界面關閉,用戶待在原地;④用戶如果觸發NPC進入當鋪,則彈出出售界面,確認后可將裝備出售,否則出售界面關閉,用戶待在原地;⑤所有界面都有退出按鈕,用戶可在任意時刻退出并結束游戲。
圖1 游戲整體流程
3 游戲界面與場景設計
3.1 游戲界面設計
該游戲界面設計主要包括6個方面:設置界面、背包界面、商城面板界面、抽獎界面、商品出售界面、副本NPC界面。
(1)設置界面。系統設置界面包括音效增減按鈕、結束游戲按鈕與返回按鈕。其中音效增減按鈕包括系統與游戲音效增減按鈕,分別用于控制系統與游戲音效,結束游戲按鈕用于提前結束游戲,返回按鈕用于關閉設置界面。
(2)背包界面。背包界面中,用戶可看到已購買的物品與使用這些物品(藥品或裝備)時用戶屬性值的變化。用戶可通過點擊右鍵使用裝備或藥品,也可在裝備欄上點擊右鍵脫掉裝備。
(3)商城面板界面。用戶可在商城中購買需要的裝備和物品,以強化自身屬性。在商城面板界面中,用戶點擊購買按鈕進行物品購買,當用戶鼠標指向對應物品時會顯示物品基本信息(包括用途和屬性);用戶點擊購買時會對用戶金幣數量進行判定,若金幣不足,則提示購買失敗,反之提示購買成功,并將物品放入用戶背包;點擊左上角返回按鈕即可退出商城。
(4)抽獎界面。抽獎界面中,如果用戶點擊抽獎按鈕,則首先對用戶金幣數量進行判定,若不足則提示用戶不能抽獎;抽獎時先更新獎池(包括對上一輪抽獎結果重置),之后隨機給出初始獎品位置(即抽獎是從哪一個獎品開始)和輪盤輪詢結束時間;抽獎結束后,會根據抽獎結果將獎品放入用戶背包;抽獎過程中將取消按鈕的各種交互,直到抽獎結束,之后用戶可根據需要選擇繼續抽獎或離開。
(5)商品出售界面。靠近NPC(當鋪)按下空格鍵后出現當鋪面板,用戶用左鍵點擊裝備后,當鋪中會出現將要出售的裝備,輸入出售數量、點擊出售按鈕后會返還用戶一半的金幣。若此時用戶輸入數量大于用戶擁有該物品的最大數量,系統會自動修改為該物品最大數量。
(6)副本NPC界面。靠近NPC(副本或游戲關卡)按下空格鍵后出現關卡選擇界面,用戶可按照自己等級選擇想要玩的關卡(每五級開一個關卡),點擊確定進入相應關卡。
3.2 游戲主要場景設計
該游戲主要場景設計包括4個方面:人物選擇場景、資源加載場景、主場景與副本場景。
(1)人物選擇場景。在人物選擇場景中,用戶可通過點擊角色姓名選擇想要玩的角色,點擊顯示人物后會出現選擇詳情。用戶可以給英雄命名,若沒有輸入名字,游戲會使用系統默認命名。點擊右下角對號則進入游戲主場景。
(2)資源加載場景。游戲運行過程中場景跳轉不可或缺,此時游戲需要準備一些資源,用戶無法進行相關操作,這對用戶來說是十分不友好的。為解決該問題,游戲中設計了資源加載場景。資源加載場景由背景圖和進度條組成,并引入強制內存釋放方法,以減輕用戶電腦負擔。本場景中用戶不需要進行任何操作,只需等待加載完成即可。
(3)主場景。用戶在經過短暫等待后會進入游戲主場景。主場景中包括英雄屬性、功能面板、技能面板、小地圖、背包、商城、設置,以及用戶在角色選擇場景選擇的角色等。
(4)副本場景。該場景是用戶進行游戲的主要場景。在游戲過程中,用戶可以控制人物移動、釋放技能,并使用裝備和藥品;怪物會自動巡邏,其受到攻擊后也會對用戶進行追蹤和打擊。另外,用戶需要考慮戰場形式并作出有利于自己的判斷,也可以根據自身狀態更換裝備,以滿足不同需求。
4 關鍵技術與游戲實現
4.1 游戲開發關鍵技術
游戲涉及的關鍵開發技術包括:Unity3D游戲引擎組件與腳本技術、怪物智能導航、AssetBundle加載技術等。
4.1.1 Unity3D游戲引擎組件與腳本技術
Unity3D是目前市面上一款較為主流的游戲開發引擎,可以讓開發者輕松創建游戲,并使游戲在一定程度上具有可視化性開發引擎。其可以便捷地創建游戲場景,并通過Bundle使游戲資源和游戲運行程序分離,從而減少運行程序體積。Unity3D可提供諸如資源導入、場景創建、系統開發及發布等一系列流程,用戶使用起來非常方便。該游戲涉及的Unity3D游戲引擎技術包括組件、腳本及其生命周期。
(1)Unity3D組件技術。Unity3D與傳統面向對象編程與面向過程編程不同的是,Unity3D會為開發者帶來一種全新編程思想——面向組件編程。在面向組件編程過程中,游戲中的物體包括人物、UI界面、敵人、圖片等都可看作游戲世界中的物體,其位置、大小與旋轉度等信息都是通過組件控制的。例如控制游戲物體位置、旋轉度及大小的Transform組件如圖2所示。
圖2 Transform組件
除Transform組件外,還會用到其它組件,其中最重要的是UI組件。UI組件主要包括Image組件、Button組件、Text組件、InputField輸入組件、Slider滑動條組件等。Image組件是在UI搭建中用于展示圖片的組件,可以通SourceImage屬性選擇開發者想要使用的圖片,Color可以更改圖片顏色,Fill將圖片按照各種方式進行填充,Material是組件材質,ImageType可設置圖片填充方式等信息;Button組件即按鈕組件,是用于與玩家交互的組件。Button組件中的Interactable屬性用于設置其交互性,不勾選則會失去與用戶的交互。TargetGraphic用于更改按鈕按下時的圖片顯示,onClick可以設置按鈕被點擊時的事件。其它屬性包括設置按鈕正常顏色、被點擊時顏色、不可點擊時顏色,以及淡入淡出時間等;Text組件是游戲中用于顯示文本的組件。在Text屬性中輸入要顯示的值可更改其顯示內容,Character可更改其設置以滿足人們需求,Paragraph可用來設置對齊方式、擺放位置等信息,Color可用來更改顏色,BestFit可使當前輸入的文字默認變為適應當前輸入框,RaycastTarget 用于設置其交互性(即用戶是否可點擊);InputField組件是玩家用于輸入的組件,用于游戲登錄;Slider滑動條組件用于顯示加載進度,也可用于制作怪物血量、人物血量、人物經驗值、人物生命值和人物魔法值,還可以進行用戶交互,也具有onValueChanged事件,在玩家改變其Value時可進行Slider長度變換。
(2)Unity3D腳本技術。腳本與組件一樣可通過掛載方式添加到游戲對象身上,但與組件不同的是,組件中的值可以修改,但結構不可修改,因此限制了其使用范圍。鑒于此,本文通過腳本技術,對游戲對象實現了組件無法提供的細粒度控制。另外,腳本繼承了MonoBehavior類,其有自己的生命周期,由9大回調方法組成:Start方法(腳本開始時執行)、Update方法(每一幀執行)、Awake方法(腳本喚醒時執行)、OnEnable方法(物體由不激活轉到激活狀態時執行)、FixedUpdate方法(固定幀速率執行)、LateUpdate方法(在update之后執行)、OnGUI方法(每一幀執行兩次)、OnDisable方法(物體不激活時執行)、OnDestory方法(物體銷毀時執行)。通過以上9大回調方法可以幫助開發者操作游戲對象,使其滿足游戲設計需求。
4.1.2 怪物智能導航技術
該游戲中怪物巡邏是基于Unity3D的Navigation導航系統實現的,當用戶進入游戲場景,觸發某一觸發器,會吸引附近怪物對玩家進行追蹤與攻擊。怪物智能導航算法偽代碼如下:
該游戲資源加載采用AssetBundle方式,而未采用Resourse加載方式。Resourse加載是一種以犧牲產品可維護性為代價的方式,雖然較為方便,且有時是必要的,但一味將資源打包進安裝包是不可取的。Unity3D官方雖然提供了Resources加載方式,但并不推薦開發者使用,而是推薦使用AssetBundle加載這種具有較高可維護性的方式。以加載資源“scene04”為例,AssetBundle加載流程為:①確定包的依賴信息:public string manifestAssetBundleName = “Window”;②添加要加載的AssetBundle名稱:public string assetbundleName = “scene04”;③加載包含依賴關系的AssetBundle:AssetBundle manifestAssetBundle = wwwmanifestAssetBundle.assetBundle;④從bundle中提取.manifest文件,以獲得所有bundle的依賴信息:AssetBundleManifest manifest = (AssetBundleManifest)manifestAssetBundle.LoadAsset(“AssetBundleManifest”);⑤獲取依賴關系列表:manifestAssetBundle.Unload(false);⑥獲取“scene04”bundle 的依賴并返回string[]數組:string[] dependAssetBundles = manifest.GetAllDependencies(“scene04”);⑦加載所有依賴;⑧加載目標bundle:WW www2 = WWW.LoadFromCacheOrDownload(assetbundlePath + “scene04”, 0)。
4.1.4 SQLite輕量級數據庫
SQLite是一款輕量級嵌入式數據庫,體量較小,占用資源較少,并且支持Windows/Linux/Unix/Android等一系列主流操作系統。其處理數據快且支持C#、PHP、Java等多種語言,也同樣具有ODBC接口,使用比較方便。鑒于SQLite數據庫的特點,本游戲數據庫選用SQLite,并將玩家信息諸如金幣、經驗、裝備等存入SQLite輕量級數據庫中。基于C#語言使用SQLite數據庫的具體方式為:①使用System.Data.SQLite.DLL語句添加引用;②使用SQLiteConnection.CreateFile(fileName)語句創建數據庫文件;③使用var connection = new SQLiteConnection(connectionString)語句連接數據庫;④從數據庫中讀取數據,讀取語句為:Database(SQLite) -> DataAdapter -> DataSet -> DataGridView,寫入語句為:Database(SQLite) <- DataAdapter <- DataSet <- DataGridView。
4.2 游戲開發運行環境及實現效果
該游戲開發使用的操作系統:Windows 10 64位,內存4GB;游戲開發語言:C#;游戲開發工具:Unity3D 2017-3.1與Visual Studio2017;游戲運行環境需求:無特殊配置需求。游戲實現效果如圖3所示。
(a) 系統設置界面? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (b)? 背包界面
(c)? 商城面板界面? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (d)? 抽獎界面
(e) 商品出售界面? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (f) 副本NPC界面
(g) 資源加載場景? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (h) 游戲主場景
(i) 游戲場景
圖3 游戲實現效果
5 結語
本文基于Unity3D游戲引擎組件與腳本、怪物智能導航、AssetBundle加載技術等,采用SQLite輕量級數據庫,在Visual Studio2017開發平臺上開發了一款PRG類游戲。該游戲對玩家全面開放,且具備RPG游戲的基本元素。該游戲內部包含了打怪、升級、抽獎、商城等多種玩法,游戲UI界面美觀大方,場景華麗優美,為用戶提供了較好的游戲體驗。
雖然本游戲實現了最初確定的項目需求,但也存在一些問題,比如有些角色能力過于強大,但有些技能偏弱等,在一定程度上影響了游戲的公平性和趣味性,因此本游戲在該方面還有較大改進空間。
參考文獻:
[1] 田野. 角色扮演類游戲中的游戲系統與游戲參與研究[J]. 文化創新比較研究,2018(5):132-133.
[2] 朱道真,彭緒山,宋揚,等. 基于DirectX的角色扮演類游戲設計與應用[J]. 軟件導刊,2014,13(11):100-104.
[3] 佟振明,劉志鵬. 大型多人在線角色扮演游戲的下一地點預測[J].? 計算機科學,2018,45(z2):453-457.
[4] 高少文. 大型多人在線角色扮演游戲特定玩家類別抽取問題研究[D]. 杭州:浙江大學,2018.
[5] DICKEY M D. Game design and learning: a conjectural analysis of how massively multiple online role-playing games (MMORPGs) foster intrinsic motivation[J].? Educational Technology Research & Development, 2007,55(3):253-273.
[6] MCCONVILLE J R,RAUCH S,HELGEGREN I,et al. Using role-playing games to broaden engineering education[J].? International Journal of Sustainability in Higher Education,2017,18(4):594-607.
[7] BILLINGS D M,KOWALSKI K,YOUNG J. Using a role-play simulation game to promote systems thinking[J].? The Journal of Continuing Education in Nursing, 2018, 49(1):10-11.
[8] 第一手游網. 第一手游網2019年1月手游曝光度數據報告 騰訊五款游戲進入百強Top10[EB/OL]. http://3g.163.com/news/article_cambrian/E835O0MS05269VS7.html.
[9] 吳晶晶, 戴智超. 基于Unity3D的多人在線網絡游戲設計與開發[J]. 計算機系統應用, 2017(10):133-138.
[10] 百度百科. Unity3D [EB/OL]. https://baike.baidu.com/item/Unity3D/3064002?fr=aladdin.
[11] 張陽,楊長強,鄭慧平. 基于Unity3D與VR頭盔的虛擬現實體感游戲開發[J]. 軟件導刊,2017(8):123-126.
[12] 劉桂元,曾志遠,楊書新. 基于Unity3d引擎的教育類游戲設計與實現[J]. 軟件導刊,2017(1):50-53.
[13] 董春俠,司占軍. 基于Unity3D的虛擬校園App設計與開發[J]. 軟件導刊,2017,16(2):94-96.
[14] 潘俊浩,卓勇,侯亮,等. 一種基于Unity3d的工業機器人示教系統設計方法[J]. 組合機床與自動化加工技術,2017(7):110-115.
[15] 杜猛,王大虎. 基于Unity3D的斷路器教學系統設計與實現[J/OL]. 軟件導刊:1-4[2019-03-19]. http://kns.cnki.net/kcms/detail/42.1671.TP.20190125.1414.032.html.
[16] GUO D,SHANG S Y,CENTER C I. Research on exhibition model of virtual museum based on Unity3D[J]. Journal of Beijing Institute of Clothing Technology, 2017, 37(2):63-68.
[17] WANG D. Gamified learning through unity 3D in visualizing environments[J]. Neural Computing & Applications, 2017, 29(2):1-6.
[18] OTHMAN M N M, HASAN H, HARON H. Developing reflex-based agent with Unity3D game engine[J]. Advanced Science Letters, 2018, 24(2):1071-1075.
(責任編輯:黃 健)