APP下载

基于Unidy3D的角色扮演游戏设计与实现

2019-10-15袁科高启文闫永航

软件导刊 2019年8期
关键词:该游戏抽奖角色扮演

袁科 高启文 闫永航

摘 要:目前应用商店中的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.

(责任编辑:黄 健)

猜你喜欢

该游戏抽奖角色扮演
开学大抽奖
“角色扮演”拯救荷兰舰队
大抽奖
剖析角色扮演在初中英语会话教学中的应用
一道2014年上海高考题的探究
角色扮演教学法在营养专业人才培养中的应用