版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于unity3d的休闲游戏TOP的设计与实现Design and Implementation of Casual Game TOP Based on Unity3d摘 要模拟经营游戏是模拟游戏的一种。而模拟经营游戏就是由玩家去充当特定的角色,在这个虚拟的游戏世界进行自我发挥的经营。这个游戏世界可以是团体、公司、城市、国家、甚至是整个世界。模拟经营类的游戏游戏通常都会仿照现实中的模式,游戏的玩法跟人物的模型想法等都可以按照自己的需求定制或随机定制。一般来说,常见的模拟经营游戏的游戏主题无非是收集游戏资源,最后实现一家独大的成就;或者发展到一定程度(例如大富翁玩家资产处于第一位或遥遥领先)。模
2、拟经营游戏最核心的是游戏玩法。值得一提的是模拟经营的游戏玩法越新颖,其受众用户群体越大,吸引的玩家也越多。一款出色的游戏想要被大众所接纳与喜爱,其本身就必须拥有闪光点,而这就要跟游戏的理念所挂勾。模拟经营游戏也包括仅能离线(Offline)进行的类型,这是脱离线上玩家条件下的单机模拟经营,玩家需达到最后的游戏目标,运用自身或游戏内各种能力来获取胜利。模拟经营游戏跟角色扮演游戏不一样,并不是非常注重游戏中的剧情故事、以及游戏中人物的塑造;相同的是都直接模拟出游戏中所描绘的虚拟世界。餐厅模拟游戏便是其中的分支,玩家利用先用的资源通过自身的能力去塑造出无限的可能,玩家能在游戏中体验创业的乐趣,享受担
3、任港式茶餐厅boss所带来前所未有的体验。关键词: Unity3D 模拟游戏 餐厅模拟AbstractThe simulation management game is a kind of simulation game. Players play the role of managers to manage the virtual real world in the game. It can be a city, a country, a world, a company, or another group. Virtual business games generally simulate
4、 real-world models, and the characters ideas are randomly customized according to rules. Many simulation business games end with the word Tycoon. The goal of common games is to completely control all resources that can be controlled in the game and achieve monopoly; or to a certain extent (for examp
5、le, enough technology to lead citizens out of the earth). The core of the simulation management game is gameplay. In gameplay, players play or control a character in a realistic or fictional world. The player is responsible for playing this role and developing the role played by some actions under a
6、 structured rule. The players success and failure in this process depends on a formal system of rules or guidelines. Simulated business games also include types that can only be played offline (offline). Players control a person or a team to complete the game goals, and use various abilities to achi
7、eve victory. The simulation management game is different from the role-playing game. It does not pay much attention to the story in the game, the scenery of the virtual world, and the shaping of the characters played; the same is that they directly simulate the virtual world depicted in the game.The
8、 restaurant simulation game is a branch of it. Players use the first-hand resources to create unlimited possibilities through their own capabilities. Players can experience the fun of entrepreneurship in the game and enjoy the unprecedented experience of being a Hong Kong-style tea restaurant boss.K
9、eywords: Unity3D Simulation game Restaurant simulation目 录第一章 绪论11.1 开发意义及其发展前景11.2国内外的发展状况1第二章 开发技术22.1Unity3D相关介绍22.1.1 Unity脚本生命周期22.1.2 Unity跨平台技术32.2物理引擎42.2.1Unity概念解释4第三章 游戏需求分析63.1 系统可行性分析63.1.1 技术可行性分析63.1.2 经济可行性分析63.1.3 法律可行性分析63.2系统功能需求分析63.2.1游戏功能划分63.2.2游戏功能描述73.3系统性能需求分析73.3.1精确度73.3.2
10、时间特性83.3.3适用性8第四章 游戏系统设计94.1游戏系统总体设计94.2游戏系统模块设计94.3数据模型设计104.3.1人物订单104.3.2关卡数据类型。104.3.3商品数据类型。11第五章 游戏系统实现125.1UI设计模块实现125.1.1 UI设计简介125.1.2 开始界面UI设计125.1.3菜单界面UI设计135.2数据管理管理模块实现155.2.1静态数据管理165.3服务员寻路模块实现175.3.1寻路网格设置175.3.2服务员寻路导航核心代码185.4音效模块模块实现195.5 地形实现模块实现195.5.1 创建地形组件195.6订单完成模块模块实现205.
11、7 场景切换模块实现21第六章 游戏测试246.1 测试目的246.2 黑盒测试246.3 游戏测试用例25第七章 总结与展望297.1项目总结297.2展望29参 考 文 献30致 谢31广东东软学院本科毕业设计(论文)第一章 绪论1.1 开发意义及其发展前景本课题的意义是设计并实现一个模拟经营类游戏,基于港式茶餐厅的风格及其经营方式打造出一款新颖的餐馆经营游戏,同时从现实出发,为用户呈现出当今茶餐厅的经营方式、经营理念本课题的主要目标是设计与开发出一个基于Unity3D的模拟经营类游戏”TOP”,在单机游戏模式下用户将独自经营一家港式茶餐厅。以 Unity3D作为开发游戏的工具,使用符合港
12、式风的模型,构建符合港式茶餐厅主题的游戏场景,使用Unity3D自带的插件并且编写脚本代码,经历一个游戏开发周期,实现玩家可对游戏进行操作。构思独特的港式风游戏剧情,设计港式风UI界面,同时加入游戏外部文件等大量的游戏设计必要内容如柠檬茶、奶茶等港风理念令游戏的信息增大,并且随着游戏的进行,游戏中关键词港式茶档的理念,通过游戏内容展现出来。最终完成一款功能完善、实现了一定可玩性的主题类模拟经营游戏。1.2 国内外的发展状况时至今日,在国内3D游戏的研究已经非常普遍,甚至连许多高校都有教授游戏方向的专业。因为国内3D游戏开发技术引进时间比较晚,所以导致了在技术方面上我们与国外有很大的差距,其次,
13、在游戏的开发与制作时,我国基本没有独立研发的游戏引擎,现阶段我国许多游戏公司开发时的选择是国外所开发的游戏引擎诸如寒霜引擎,同时国内开发游戏并不能排上一级游戏行列,价值也不高,这也是国内游戏一直被人诟病的主要原因。如今, Android和IOS是两种主流的手机操作系统,成为主流的原因,是在这两个操作系统基础上开发出大量的应用。因此,安卓系统与苹果系统现在已经占据了整个手机市场,为了使软件能够在两个平台同时兼容,于是出现了能够跨平台的软件移植,但是,跨平台的应用移植会出现很多难题以及bug需要修复,如开发语言不同,移植代价高等,但是游戏开发的圈子,Unity3D游戏引擎却必不会出现这些问题,在U
14、nity3D中运用到虚拟机技术,独立于平台执行的游戏编译结果也是一个亮点。对于3D引擎的研究,我们国内还处于摸索阶段,需要足够的时间去发展,学习优秀的游戏引擎,吸收这些优秀的特点为己利用,对于我们将来无论是开发游戏还是开发游戏引擎都有很大帮助。第二章 开发技术2.1 Unity3D相关介绍Unity3D是由Unity Technologies公司开发的一个专业游戏引擎。值得一提的是Unity3D被高占比使用的原因在于使用Unity3D能够轻松的开发一款游戏,Unity3D能做到的事情非常之多,例如高帧率的三维动画、三维视频游戏、极其逼真地虚拟现实游戏等,最关键的是Unity3D实现了多个平台开
15、发如安卓、PC、iOS等,这也令其深受游戏开发人员的重用。随着游戏产业发展越来越迅速,快速开发高质量游戏的需求已经逐渐占据重要地位,而Unity3D不仅可以提高开发效率,游戏渲染质量也属于中等偏上,在手游产业更是不可被取代,并且由于Unity3D的版权费比其他主流3D游戏引擎便宜很多,使得在国内越来越多游戏开发者使用该引擎进行商业化开发。在Unity3D中,将支持C#语言、JavaScript、Boo这3种语言来编写游戏脚本。并支持Shader的编写,本设计采用的编程语言为C#语言。2.1.1 Unity脚本生命周期Unity程序脚本有一套比较完善的生命周期,在这个从唤醒函数到销毁函数都的生命
16、周期中,有着一定的制约,那便是在开发过程中遵从自身的Unity MONO生命周期规则。下列是在Unity的生命周期中由系统内自身调用很重要的方法:(1)void Awake():脚本初始化的启动,将脚本唤醒,其后进行初始化工作,在 Mono库中这是系统执行的第一个方法,并且只被执行一次在脚本的生命周期中。(2)void OnEnable():启用,物体启用时被调用。(3)void Start():开始处理,开始逻辑,关于这个方法的详细讲解指是在OnEnanle Awake()方法之后、Update()方法之前执行,而且只能够执行一次这个方法。(4)void Update():这个方法是正常更新
17、逻辑,在游戏中的每帧都会被进行处理。而这个逻辑处理只能调用一次。(5)void LateUpdate():这个方法是推迟更新,执行时系统中会调用每一帧,但必须在Update()方法执行完后,此方法才能由系统去调用。(6)void FixedUpdate():固定更新,和帧频无关,和时间有关系。固定更新常用于移动模型等操作。(7)void OnGUI():此方法用于绘制界面系统,任何时候都在调用绘制界面,用于绘制系统的界面,处理按钮。(8)void OnDisable():禁用时候调用,和Active(false),物体被禁用时调用。(9)void OnDestroy():销毁,和OnDestr
18、oy(gameobject)调用,调用的条件是脚本被销毁时。根据Unity3D脚本中的生命周期,当在调用方法时,首先初始化的顺序,其次建立出Unity脚本生命周期方法调用过程顺序图如图2-1 所示。图2-1 Unity脚本生命周期方法调用过程顺序图2.1.2 Unity跨平台技术Unity3D几乎是市场上最流行的游戏开发引擎了,由Unity Technology(以下简称UT)公司开发,它可用于Windows和Mac OS X系统(Linux系统实验版已发布)。最重要的是,它几乎可以导出到任意平台。Unity是一个优秀的游戏引擎。Unity中对各平台编译指令如表2-1 Unity跨平台技术编译
19、指令所示:表2-1 Unity跨平台技术编译指令名称说明UNITY_EDITOR定义从游戏代码调用Unity编辑器脚本UNITY_ANDROID为Android平台的平台定义脚本UNITY_IPHONE为Iphone平台编译/执行的代码的平台定义脚本UNITY_STANDALONE_WIN为Windows独立的应用程序编译/执行代码时使用的脚本UNITY_STANDALONE_OSX专门用于MacOS(包括Universal、PPC and Intel架构)编译或执行的代码的平台2.2 物理引擎在3D游戏这种综合类应用当中,除了逼真的模拟出真实3D世界的环境效果,物理引擎也是必不可少的环境功能
20、。在真实3D世界当中,物体与物体之间是存在相互作用与物理规律的。而在游戏环境中,在模拟刚体的前提下,如果是简单的物理运动,例如是游戏中简单的移动、加速等,这是可以通过一般的游戏引擎然后进行编程或编写脚本去实现功能。当开发游戏需要模拟复杂的物理规律,如弹起、滑动、碰撞、爆炸等效果时,比如编译底层算法会使得工程延误,这就与软件工程的思想产生矛盾。在3D游戏环境中,成熟的物理引擎将支持更复杂更真实的3D环境物理模拟。物理引擎的基本架构分为两个模块,碰撞检测与物理学世界。如图2-1所示。物理学世界模块物理引擎系统碰撞检测模块图2-1 物理引擎结构示意图渲染引擎当3D场景各物体的位置信息以及场景本身的各
21、种信息通过外界调用模块,输入到物理引擎中被接受,物理引擎即产生相应回馈从而产生物理效果。因调用模块的不同,输出的计算结果也不相同,但计算的方式是相同的:碰撞发生的地点、发生碰撞后物体的地点、物体与物体和物体与场景之间是否有碰撞发生。最后将通过计算得出结果再发送给已经调用的模块。物理引擎功能示意图如图2.3所示。位置信息物理引擎网络传输图2-2 物理引擎功能示意图2.2.1 Unity概念解释(1) Scene场景,我们可以把它当作一部电影,储存了各种不同的资源,储存后的资源文件的后缀名都是Unity。编写的脚本中使用Scene类来表示。(2) Game Object游戏对象,可以把其视为电影中
22、的景物、道具、角色等等能够看见的物件。代码中使用GameObject类来表示。(3) Light灯光,可以视作电影的灯光调节器,使用其可以任意调节整个虚拟世界的明暗。代码中用Light类表示,Light继承自Component,同样其身份为游戏对象的组件。(4) Prefab预制件是对与自定义的一组游戏对象,开发者会预先配置,设置预制体相互位置,预制体的层级关系等等,然后把它们存储为模板形成一个整体。后续使用这个整体模板,进行的操作就是构建出一份游戏对象的拷贝。 (5) Asset资源,Unity中有很多资源, GameObject、Component其实都是资源,但很多时候,我们开发者说的资
23、源指的是:网格、动画、贴图、材质、音频片段、字体等等。如果出现的游戏资源类型很多,那么对应的类也不同如表2-2名称文件格式网格:Meshfbx、obj等动画:Animationanim等贴图:Texturepsd、tif、png、jpeg等材质:Materialmat音频:AudioClipogg、wav、mp3等字体:Fontttf、fnt等在开发过程中,UnityEngine命名空间下方的Object类都会被资源类所继承,注意与CSharp默认空间中的Object不同。第三章 游戏需求分析3.1 系统可行性分析3.1.1 技术可行性分析本游戏是一款基于港式茶餐厅的风格及其经营方式的模拟经营
24、类游戏,从现实出发,希望能够借此为用户呈现出当今茶餐厅的经营方式、经营理念。游戏平台面向是Windows,通过我自行对游戏内容的数据分析以及需求,同时我也考虑了开发环境、运行环境、设备要求,在技术上确定使用Unity3D能够开发出这款模拟经营游戏,在功能需求上可以通过现有的知识及自身需学习的知识去实现游戏功能。并且采用市面上模拟经营类的游戏大众化操作,能够大幅度降低对自身的游戏开发技术要求,让玩家在享受策略类游戏带来的乐趣 。3.1.2 经济可行性分析本游戏基于Unity3D开发的模拟经营游戏不需要任何经费成本,游戏中的模型场景皆是网络免费开源,因此在忽略成本的条件下能够最大限度的开发此游戏。
25、同时本游戏所需资源皆是网络收集,游戏完成后不实现经济效益,即利用该游戏获取经济利益,所以从经济上开发此游戏是可行的。3.1.3 法律可行性分析 本游戏纯属个人开发并没有任何商业用途、没有开展商业活动、没有获取经济效益,因此,在利用网络上的素材基础的条件下开发此款游戏没有侵犯他人利益,即不存在不合法行为。在法律上开发此游戏是可行的。3.2 系统功能需求分析3.2.1 游戏功能划分根据模拟经营游戏TOP的设计需求与游戏的玩法,将整个游戏功能划分4个部分,分别是角色控制、商店功能、关卡功能、订单功能如图3-1游戏功能模块图所示。图3-1 游戏功能模块划分3.2.2 游戏功能描述角色控制功能:玩家开始
26、进入游戏后,能够使用鼠标操控服务员进行移动完成订单的出餐。使用鼠标操作简单易上手,注重玩家游戏体验。商店功能:在游戏商店中我增添了道具系统使得游戏性大大提高,丰富了游戏的玩法,道具分别有移速加成(即加快服务员的移动速度),订单立即完成(即随机立即完成订单)、服务员招募(即增加服务员数量)。金币系统的设置是为了商店系统能够顺利实现,在游戏中每完成一个订单,则增加10金币,金币可用于商店道具的购买。关卡功能:游戏中一共有三个关卡,越往后订单需求完成量越高难度越大,玩家在规定时间内完成任务则闯关成功可进入下一关,否则视为闯关失败。订单功能:订单是胜负判定、奖励的关键,游戏中订单事件会随机生成(订单菜
27、单与港式茶餐厅有关,即奶茶、柠檬茶、西多士、碟头饭四种),一个外卖员对应一个订单,服务员出餐满足订单需求并成功送给外卖员订单才算完成。3.3 系统性能需求分析3.3.1 精确度保证游戏进行中的玩家数据操作精准,保证配置文件准确性与公平性,对游戏战斗结束的判定进行严谨的监控。3.3.2 时间特性游戏中的界面切换的响应时间在0.1-0.3秒内,加载页面的加载动画的响应时间在0.5-1秒内,点击效果与角色接触消失效果的响应时间在0.2-0.5秒内。3.3.3 适用性游戏适用于各大品牌的PC系统电脑,能够安全稳定运行,出现游戏闪退的几率较少。第四章 游戏系统设计4.1游戏系统总体设计本游戏系统是基于P
28、C平台运行的3D第三人称模拟经营类游戏,游戏参照QQ餐厅开发,因此,游戏实现的功能在这两款游戏基础上进行扩展。根据这种情况,经初步的需求分析得出来表4-1所示整个游戏系统说明。 表4-1 游戏各系统说明名称说明主菜单系统用户对开始新游戏、游戏选项设置、查看游戏介绍、退出商店系统管理游戏中所有道具的生成胜负判定系统挑战管卡结束胜负判断,并产生奖励奖励系统用户可以通过完成订单的订单数量,领取相应的奖励4.2 游戏系统模块设计由于经营类游戏TOP需实现的功能较多,包括场景加载,读取和存取相关的数据,查看功能、设置等等。因此,为了提高开发该游戏的效率和方便管理游戏工程项目与游戏功能,游戏系统将采用设计
29、原理模块化的设计原理,即把游戏系统按照不同功能进行分块。根据游戏需求分析,在满足游戏基本功能的需求基础上,为了使游戏符合软件开发的高内聚,低耦合原则,即提高各个模块之间的独立性,各模块之间功能又密切相关。根据游戏系统用例建模,设计该游戏的目标系统,以玩家进入游戏为例。游戏用例图如 图4-1 图4-1 游戏用例图4.3 数据模型设计4.3.1 人物订单人物订单分析,当这一关需要的数据超过我们想要的数据时候,就将其通过这关人物完成。这样设计可以将所有的订单数据集合在我们的核心脚本中,可以判断这关的所有情况。表 4-2任务订单表数据类型数据名字实现的操作floatLevelTime/这一关用到的时间
30、;floatLevelNeedPeopleNum/这一关需要完成的数量;floatLevelproducePeopleTime/产生人物的时间。floatLevelSHOPTime/商品时间4.3.2 关卡数据类型。关卡数据总共有三关每关根据不同的数量,进行不同的派单,让其有更多的丰富性。可以自行组装。这样设计可以将所有的关卡内需要的数据集合脚本中,判断这关的所有情况。表 4-3 关卡数据表数据类型数据名字实现的操作floatCurrentTime/这一关用到的时间;floatNeedPeopleNum/这一关需要完成的数量;floatCurrentproducePeopleTime/产生人物
31、的时间。4.3.3 商品数据类型。在Core 中,存储有核心的MHaveItem 结构体,可以将他的所有商品加载在内存中。商品价格填写在脚本中,可以进行购买。做成类型核心控制的脚本,可以将所有的关键核心词放在我们的脚本中,方便操作。表 4-4 商品数据表数据类型数据名字实现的操作 int CurrentGold/当前金币 int ItemSpeed/加速道具 int ItemOver/立即完成订单道具 int ItemAddNum/增加服务员道具 int CurrentNpcNum/当前NPC的数量第五章 游戏系统实现5.1 UI设计模块实现5.1.1 UI设计简介UI设计是指对在与软件进行交
32、互的界面的整体设计。在人机交互、按钮界面的UI设计是重点关注。当我们制作一个游戏,需要游戏独特、有辨别性,游戏的操作能够符合用户群体的需求,满足其需求的条件下同时充分体现一个游戏的定位和特点,就需要优秀的UI设计。关于UI,Unity中自带UGUI可用于UI的设计,但根据游戏系统用例建模分析游戏功能模块涉及到UI较多,而且拥有完整的UI动画设计特效。本游戏在界面设计上采用了层次化的思想,把整个游戏中的全部界面独立开来,利用UGUI进行可视化界面设计,可即时查看到界面设计,对整个界面及时进行调整,不需要在程序调试时才可以看到游戏界面,大大提高了开发效率和维护成本。美观符合游戏主题的界面能够吸引用
33、户,并且当使用UI实现了游戏操作方便,更容易上手体验。同时还能够避免用户在体验时出现太大的不适感,视觉上的效果越好便越利于用户的理解和使用。通常情况下,UI界面设计时能够反映用户的需求,并不是开发人员特意为之。所有的操作的设计都是以用户体验为出发点,因为所有的用户都拥有自己的理解和使用方法。界面整洁美观,游戏整体风格与产品级别便越高。5.1.2 开始界面UI设计创建UGUI中2D UI组件,在Hierarchy视图下UI Root中Camera创建子对象面板Canvas、Canvas,Canvas面板用于存储开始游戏按钮,声音调节按钮和设置按钮;Panel2面板为玩家信息操作面板,在此面板上,
34、玩家可以对玩家信息进行读取、删除、新建操作。点击开始游戏按钮,触发按钮事件,从Panel面板切换至Panel2面板,代码实现如下: public StartUI m_StartUI;System.Serializablepublic struct StartUIpublic Button DesGameBtn;public Button StartGameBtn;public Button QuitGameBtn;public GameObject DesObj;public Button DesQuitBtn;private void Start()m_StartUI.DesGameBtn.
35、onClick.AddListener(delegate m_StartUI.DesObj.gameObject.SetActive(true); );m_StartUI.DesQuitBtn.onClick.AddListener(delegate m_StartUI.DesObj.gameObject.SetActive(false); );if (Core.Instance)m_StartUI.StartGameBtn.onClick.AddListener(delegate Core.Instance.LoadScene(02); );m_StartUI.QuitGameBtn.onC
36、lick.AddListener(delegate Application.Quit(); );图 4-1 开始界面菜单点击开始游戏,通过异步加载,从场景Start加载到场景Menu。加载菜单Menu场景代码实现如下:Application.LoadLevel(“Menu”);5.1.3菜单界面UI设计菜单界面各功能UI设计可以归为两类:1.游戏简介,开始游戏和退出游戏,这三个系统的显示都需要按序按位置排列,并调用配置文件对每个对象属性进行赋值;2.关卡系统与其他功能,关卡系统设计方式是将所有关卡按钮名称统一格式命名,在点击某个按钮时,传入按钮名称,触发对应按钮事件。选择商店系统中UI商品物品
37、Item和关卡系统选关UI加以详细描述,其余就不一赘述了。UGUI实现等大等距排序显示运用到的组件:Scroll View组件和Grid组件。Scroll View组件作用是设置一块可视区域,在Grid组件下的子对象超过其可视区域就无法在界面中显示,并可以实现子对象从左到右排列。考虑后续维护和拓展的简便,将UI商品物品Item展示模型制作成预制体,通过代码加载到Grid组件下作为子对象,并加载配置文件数据。如图4-1菜单面板设计如图4-2。数据管理加载如图4-3。图4-1 菜单界面图4-2 菜单面板设计图4-3 数据管理加载在场景加载中,存储着这些人物属性道具,以及道具数据等等。5.2 数据管
38、理管理模块实现在模拟经营游戏中,数据的读取与存储是最为重要的,游戏中数据包括静态数据和动态数据,静态数据即为游戏中固定的某些数值,如地图关卡数据,服务员属性数据,外卖员属性数据等;动态数据也称为玩家数据,包含玩家花钱购买的游戏币(金币),关卡的解锁和玩家获得的星级等。5.2.1 静态数据管理关于静态数据,Unity3D工程中使用配置文件一般使用Txt、Xml、Json、Db(数据库),四种格式文件对比如下:Txt: 开发人员必须设定格式、封装读取的方式。设定与封装因人而异,重点是只能够读取。Xml:标签语言,已规定格式,系统中提供读取和修改等相关API,操作方便。Json:采用键值对的方式去进
39、行数据的存储,可在任何平台下使用,普遍被客户端与服务端通讯采用,存储相等数据信息下文件要比Xml文件小,还可以只进行值存储(不需要键),更加缩小了文件的体积,适合在移动端进行联网游戏的通信操作。db: 适合复杂数据和敏感数据,增删该查非常方便。根据本设计的需求,选用了Xml格式作为配置文件格式,方便信息数据和地图数据的加载。Xml格式的配置文件一般放在由Untiy自主管理模式的Resources文件夹中,在此文件夹下当需要读取资源可通过Resources.Load()读取。通常所有资源都可读取。Unity读取Xml文件的步骤如下:(1) 新建一个TextAsset类型的成员MapXml,调用R
40、esources.Load()方法从Resources文件夹下读取相应的Xml文件的数据。例如:MapXml = Resources.Load(XML/Map);(2) 创建XmlDocument新对象xmlDoc,关联并解析MapXml.text。(3) 获取列表数值,获取子节点。例如: mapList = xmlDoc.SelectSingleNode(MapConfig/Map).ChildNodes; 如图 4-4图4-4 数据管理5.3 服务员寻路模块实现5.3.1 寻路网格设置1. NavMesh(导航网格)是Unity3D自带的一种自动寻路技术,可以在开发的虚拟游戏世界中实现动态
41、物体自动寻路,该寻论技术能够将游戏中复杂的结构组织关系转化成带有一定信息的网格,在这些网格的基础上系统计算后得出最优路线,以此来实现自动寻路。简单来说就是为需要的物体添加NavMeshAgent组件,并设置适当的参数。一般需要设置物体的半径、高度、速度、加速度、距离目标的停止距离。当需要这个物体进行导航移动时,我们需要给导航物体添加一个条件,即挂载导航组件,这个导航物体将会自动寻路他计算出最合适的路线,并沿该线路到达我们设定的目标点。2. 点击进行寻路的物体,并添加在Unity3D右侧的导航栏选中ComponentNavigationNav Mesh Agent组件,然后在导航栏打开Windo
42、wNavigation窗口,在Navigation窗口选择Bake,选择后我们需要再次选择右下角的Bake。3. 在每一个服务员身上挂载NavMeshAgent进行烘培场景,让AI可以自动寻路。如图4-8所示:图4-8 NavMesh属性表5.3.2 服务员寻路导航核心代码using UnityEngine;using UnityEngine.UI;public void OverShop()gameObject.GetComponent().destination = StartVector3;public void Setdestination(PeopleNpc peopleNpc)ga
43、meObject.GetComponent().destination=peopleNpc.transform.position;5.4 音效模块模块实现该功能的作用是玩家设置背景音乐以及音效。当我们需实现背景音乐与音效功能时,玩家可以在音效设置界面下进行背景音乐的选择与音效的音量大小控制。表2-1游戏设置用例描述用例编号201用例名称游戏设置用例概述调整背景音乐与音效的音量以及关闭菜单和退出游戏参与者玩家前置条件玩家启动系统:想要对游戏进行设置后置条件游戏属性被改变基本事件流步骤活动1在主界面点击“游戏设置”按钮以此进入游戏“设置界面”2在游戏设置界面中,并在“音乐设置”模块下,点击“播放音
44、效”以此进行音效的设置3调整音量大小或静音规则与约束点击按钮可以得到对应的响应事件核心切换音乐代码分析:public string SetAudioSourceClip()AudioIndex+;AudioIndex = AudioIndex = AudioClips.Length ? 0 : AudioIndex;AudioSource.clip = AudioClipsAudioIndex;AudioSource.Play();return musicNamestrAudioIndex;5.5 地形实现模块实现5.5.1 创建地形组件当我们开发一款游戏搭建场景需要在Unity3D创建地形时
45、,可以选择使用用Terrain部件。我创建的方法是在Unity3D右侧的菜单栏中选择GameObject-3D Object-Terrain。在本次开发游戏时创造的物体默认id是Terrain.然后我对其进行了简单的编写。其次在Herarchy框中选用,在Inspector里面能够看到这个部件的每一个附属。也就能找到Terrain组件了。接下来的步骤,首先创造地形时点击画笔图案按钮,选择下拉菜单,同时在下拉菜单中能够使用升降地面的功能,。值得注意的是在下拉菜单里Texture使用地面的贴图。4.6.2编辑Terrain地形组件1.在hierarchy中选中地形“Terrain”,Inspect
46、or 里面,点add componet ,输入“Terrain Collider”,点击就有了。2.还是选中地形,在菜单栏里,选Component-physics-Terrain Collider. 5.6订单完成模块模块实现 订单完成判断依据就是,当服务员和外卖NPC的碰撞盒进行碰撞时,将触发订单完成的判断依据,在FightManager.cs 中,进行计算添加完成的商品,然后将Npc消除。核心代码分析 如下:public void RemovePeopleNpc(GameObject obj, bool isShopOver)CurrentPeopleNpcs.Remove(obj.Get
47、Component();obj.GetComponent().DestroyPeopleNpc();if (isShopOver)m_CurrentLevel.NeedPeopleNum+;Core.Instance.MHaveItem.CurrentGold += 10;elseCore.Instance.MHaveItem.CurrentGold -= 10;在完成订单时,m_CurrentLevel.NeedPeopleNum +1 。Update ()中,会一直判断,当m_CurrentLevel.NeedPeopleNum 大于我们这一关所需要的完成订单时,就顺利通关这一关。5.7
48、场景切换模块实现 在游戏过程中,某种特定情况下会进行场景切换,例如:玩家在开始界面创建新游戏或读取存档后需要切换到菜单场景、玩家选择关卡挑战后需要进入战斗(地图)场景、挑战关卡结束后选择返回菜单或者主界面等,这一系列操作都需要场景资源加载。但加载资源的过程会引起游戏界面的卡顿,特别是加载资源过大时,会造成游戏一段时间处于卡死状态,这会引起玩家的不满,甚至反感。为了解决这类问题,让游戏保持良好的交互性,在需要场景加载时,使用异步加载。所谓的异步加载,就是当加载的场景或者资源较大时,先加载一个极小的场景,在小场景运行同时加载大场景资源,等大场景资源加载完毕后,跳转到需要的场景。例如:A场景到B场景
49、,加载过程如图4.5所示:图4.5异步加载过程图实现代码如下:public UISprite LoadingSlider; /加载条public UILabel LoadingLabel; /loading预制体private float targetValue; /滑动条显示数值private AsyncOperation async; /加载资源进度private float loadingSpeed = 0.3f; /滑动条加载速度void Start()StartCoroutine(loadScene();LoadingSlider.fillAmount = 0;IEnumerator
50、 loadScene()async = Application.LoadLevelAsync(PlayerInfo.Instance.Scenes);/阻止当加载完成自动切换async.allowSceneActivation = false;yield return async;void Update()targetValue = gress;if (gress = 0.9f)/gress的值最大为0.9targetValue = 1.0f;if (targetValue != LoadingSlider.fillAmount)/
51、插值运算LoadingSlider.fillAmount = Mathf.Lerp(LoadingSlider.fillAmount, targetValue, Time.deltaTime * loadingSpeed);if (Mathf.Abs(LoadingSlider.fillAmount - targetValue) 0.01f)LoadingSlider.fillAmount = targetValue;LoadingLabel.text = 已加载:+(int)(LoadingSlider.fillAmount * 100).ToString() + %;if (int)(Lo
52、adingSlider.fillAmount * 100) = 100 )/允许异步加载完毕后自动切换场景async.allowSceneActivation = true;通过异步加载,在玩家在开始界面创建游戏或者读取存档的之后加载菜单界面时,跳转到已制作好的Loading界面,在 Loading界面观看一些设计好的加载动画、图片或者文字,消磨加载资源等待的时间,从而达到游戏流畅效果。在本设计中,异步加载不仅仅用于开始界面与菜单界面的切换,也用于关卡选择后切换于战斗界面等。第六章 游戏测试6.1 测试目的游戏测试的目的是比较游戏需求的定义,在不影响功能的条件下,发现与游戏初期定义不一致或与之
53、矛盾的地方,发现尽可能多的缺陷,以此来验证游戏的功能和性能等满足其规约所指定的要求。设计中出现BUG是不可避免的,经过严格的测试,将其完善。通过对本设计的测试,将尽可能的发现游戏中的存在的错误或者不足,加以完善。6.2 黑盒测试黑盒测试,被称作为功能测试。它测试以确定功能是否可以正常使用,专业的测试人员在整个测试过程中,同时在对程序内部结构和内部特性不进行考虑的情况下,并且测试人员会把程序看作一个完全封闭并且不能打开的黑盒子,需要严谨认真负责进行对程序的多个接口测试。按照我的理解,黑盒测试内容时只会检查程序功能有无正常使用,有无按照需求规格说明书的规定,程序又是否有无正确地接收输入数据并最终产
54、生出正确的输出信息。 10下面使用黑盒测试中的等价类划分法对具有代表作用的类型进行测试,根据游戏设计过程难易度判断,列出以下4种代表性的类型:1.点击商店按钮2.选择关卡3.点击开始游戏4.关卡挑战胜负,划分等价类并对其进行编号,如表6-1等价类设计用例表表6-1等价类设计输入数据有效等价类无效等价类点击商店按钮点击商店按钮点击商店按钮选择关卡3选择关卡3点击关卡2点击开始游戏点击开始游戏点击点击开始游戏条件以外的部分关卡挑战胜负关卡挑战胜负关卡挑战负以上是等价类设计的数据。6.3 游戏测试用例本小节将在Unity3D进行游戏的构造指令,并将游戏发布到本地,测试各个功能模块的运行情况,保证每个游戏功能能够正常运行,保证游戏的完整性和可玩性。游戏测试用例如下表6-2 游戏测试用例页面 表 6-2 游戏测试用例页面测试模块前置条件操作步骤预期结果实际结果备注菜单界面UI进入游戏点击主菜单按钮,对所有按钮进行测试主菜单按钮响应正常触发所有事件,功能正常使用结果如预期一致检测成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 柳州市国昌地源热泵有限公司市场营销战略:基于清洁能源视角的深度剖析
- 柚子籽油:营养剖析与微胶囊制备工艺及应用探索
- 染料与农药废水处理方法的对比实验研究:效果、机理与优化策略
- 某型液体有机过氧化物安全性的深度剖析与防控策略
- 枯草芽孢杆菌HF1:特性、培养及抗真菌脂肽的分离纯化研究
- 林州食管癌早诊早治项目:卫生经济学视角下的评估与政策探索
- 2026四川绵阳市河湖保护中心招聘5人备考题库及参考答案详解(b卷)
- 2026吴忠赛马新型建材有限公司技术管理岗位招聘2人备考题库附参考答案详解(考试直接用)
- 2026春季新疆克拉玛依市面向高校毕业生招聘事业单位人员120人备考题库附参考答案详解(巩固)
- 2026浙江深泓水利工程有限公司招聘第一批项目制用工人员6人备考题库带答案详解(精练)
- 饲料生产粉尘清扫制度
- 考研材料化学题库及答案
- 初中化学课题申报书
- 子宫内膜息肉诊治课件
- 成都职业技术学院2025年四季度编制外公开(考试)招聘23名工作人员笔试考试参考试题及答案解析
- 《航空航天概论》总复习课件
- 全品 高考古诗文背诵篇目(60篇)
- 广东省广州市2025年中考道德与法治真题(含答案)
- 第三腰椎横突综合征-课件
- 2025年高校辅导员考试题库及答案
- 健康按摩服务合同范本与风险提示
评论
0/150
提交评论