基于Unity的3D ARPG游戏—杀戮地牢毕业论文_第1页
基于Unity的3D ARPG游戏—杀戮地牢毕业论文_第2页
基于Unity的3D ARPG游戏—杀戮地牢毕业论文_第3页
基于Unity的3D ARPG游戏—杀戮地牢毕业论文_第4页
基于Unity的3D ARPG游戏—杀戮地牢毕业论文_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕 业 设 计毕业设计题目:基于Unity的3D ARPG闯关游戏:杀戮地牢 专业 : 软件工程 基于Unity的3D ARPG游戏杀戮地牢摘要“杀戮地牢”是基于Unity3D游戏引擎所实现的一款跨平台的ARPG游戏,玩家可以用手机和PC进行游戏的游玩。玩家控制英雄进入随机生成的迷宫进行探索,当玩家进入一个未探索的房间的时候,怪物就会出现,玩家需要利用英雄的各种攻击技能和迷宫内生成的怪物进行战斗,待消灭了所有怪物之后房间的门才会打开,玩家才能进入新的房间,直到找到有出口所在的房间。玩家可以通过装备不同的武器和防具来提升英雄的数值,也可以通过打怪来提高英雄等级,还可以通过商城来购买血瓶蓝瓶来帮助自己通关。本文介绍了游戏开发的思路,从相关知识介绍、游戏设计、游戏实现和游戏测试。关键词 Unity3D、ARPG游戏、地牢游戏、3D AbstractDungeon Fighter is a cross platform ARPG game based on Unity3D game engine. Players can play games with smart phones and PC. The player controls the hero into a randomly generated maze. When the player enters an unexplored room, the monster will appear, and the player needs to fight with the various attack skills of the hero and the monsters generated in the maze. After all the monsters are eliminated, the door will open and the player can get into the new. The room until you find a room with an exit. Players can improve the heros value by equipping different weapons and armor. They can also improve the heros class by playing the monster. They can also buy blood bottles and blue bottles through the mall to help them to pass the customs. This article introduces the idea of game development, from related knowledge introduction, game design, game implementation and game testing. Keywords:Unity3D,ARPG,3D, Dungeon目 录第一章 绪论11.1 课题背景与研究意义11.2 国内外相关游戏现状和分析11.3 本课题的主要任务11.4 本课题的主要组织结构1第二章 可行性分析22.1 经济可行性分析22.2 技术分析2第三章 需求分析43.1 ARPG游戏概况43.2 ARPG游戏需求43.2.1 游戏功能需求43.2.2 游戏性能需求63.2.3 游戏开发环境和运行环境规定7第四章 游戏设计与实现84.1 本游戏主流程控制84.2 本游戏项目文件结构94.3 游戏主要功能的设计与实现104.3.1 MVC架构整体设计104.3.2 开始场景124.3.3 角色展示界面134.3.4 场景异步加载功能134.3.5角色控制以及战斗系统134.3.6 后台日志系统174.3.7 对话系统174.3.8 新手引导204.3.9 商城224.3.10 背包-装备系统234.3.11 副本设计与实现264.3.12对象持久化技术(存档读档)284.4 游戏性能优化的实现284.4.1 场景静态光照284.4.2 Meterial优化294.4.3 对象缓冲池技术294.4.4 遮挡剔除294.4.5 层消隐技术29第五章 游戏调试与测试分析305.1 功能测试305.2 游戏运行的结果32第六章 总结心得41参考文献41第一章 绪论1.1 课题背景与研究意义游戏是目前地球上维度最多的表现形式。它相比于其他艺术形式(小说、漫画、动画、电影)没有减少故事、声音、画面三个维度,增加了交互这一维度。作为第九艺术,游戏可以使人们在游玩的时候进行学习,在游戏中思考人生,逐渐形成应对人生各种坎坷的坚强意志。一款优秀的游戏,并不仅仅是给予玩家感官的刺激,更加是陶冶情操,深刻思想,获得知识的良好辅助。因为游戏本身的娱乐性质,可以大大地激发玩家的兴趣,而兴趣是学习的不二法门,因此,设计优秀的、富于教育意义的游戏,是十分有意义的。 1.2 国内外相关游戏现状和分析Unity3D是由Unity Technologies开发的一款能够创建三维视频游戏和建筑可视化以及实时三维动画等类型互动内容的综合型创作工具,这是一款全面整合的专业游戏引擎。Unity3D使用交互的图形化开发环境,其编译器在Windows和Mac OS X下,能够发布游戏到Windows、Mac、Web、XBox360、iPhone、Android等诸多平台。从游戏及动画的发展来看,实现效果从2D向3D转变,而在众多的3D游戏引擎中,Unity3D备受瞩目,由于其跨平台性强大,脚本语言简单,价格合理,支持各种插件,文档齐全等众多优点,现在正在成为众多厂商的第一选择。1.3 本课题的主要任务需实现的游戏是基于Unity实现的一款3D ARPG闯关游戏,采用标准MVC、模块化插件式架构作为核心开发架构以C#作为开发脚本,主要功能包括:战斗系统、关卡系统、音效系统、双输入系统、自定义对话插件、新手引导系统、背包/装备系统、玩家信息、技能面板、商城系统、存盘系统、日志调试系统、游戏优化系统。需完成的工作:开题报告,游戏策划案,3D模型、UI素材、粒子特效收集或制作,架构设计、系统的代码编写工作,系统模块的单元测试、集成测试和系统测试、游戏的真机性能测试。1.4 本课题的主要组织结构本文分为六个章节,主要内容安排如下:绪论,该部分主要是对本课题的背景与研究意义进行综合阐述,介绍分析了Unity3D游戏引擎的背景和主要优势,介绍了本课题完成的主要工作内容。相关原理与技术分析,该部分对本文所涉及的相关算法原理进行描述,对相关技术进行简要概述与分析。需求分析。该部分主要介绍了ARPG地牢游戏的需求。游戏的设计与实现,该部分根据第三部分所定义的需求体系,实现游戏的功能。游戏的测试与分析,该部分对第四章所设计的游戏进行游戏调试,即将在Window、Android以及ios平台进行跨平台部署调试,并有这对的设计游戏测试方案,查看是否符合预想功能。总结心得,该部分对课题进行总结。第二章 可行性分析可行性分析是在调查的基础上,对项目的技术可行性经济可行性、操作可行性和法律可行性进行科学的分析,从中得出综合的结果,确定项目的可行性,为项目的决策提供依据。2.1 经济可行性分析传统的有游戏开发需要花费大量的时间研发和搭建底层的图形渲染、物理表现、声音处理等代码,而且对开发人员技术要求非常高,对于不同的发布平台要进行不同的处理,也同样需要花费大量的时间。而相反在游戏开发的时候应用市场上成熟的游戏引擎,如Unity3D,引擎已经把底层代码处理好,且拥有强大的跨平台能力,同样的代码多平台发布,这样就可以省下大量的研发时间,而且Unity3D的AssetStore也提供了大量的插件,可以大大提升游戏开发效率。而因为Unity3D是成熟商业引起,所以开发所需要的相关资料都可以通过网上进行采集。因此,开发成本是很低的,从经济的角度来看,该游戏可行。2.2 技术分析Unity3D的是一个屡获殊荣的工具。该引擎包含的软件组件实现了在游戏的研究与开发中最常见的基础功能和经常性的任务。所涵盖的主题包括声音,图形,物理和网络功能。该引擎支持C#,Boo,和JavaScript脚本编程。它可以部署在Windows,Mac OSX,Web浏览器,Wii游戏机,iPhone,iPad的,Android的,微软Xbox 360和PlayStation 3。它甚至在未来计划增加闪存和Linux部署。UI方面可以利用Unity3D提供的UGUI来实现UI交互上的功能。游戏中的人物动作则可以利用Unity3D提供的Mecanim动画系统来实现。流血、烟雾、技能光效等东西则可以利用ParticleSystem来进行制作和调整。Unity3D已经提供了大量基础组件和工具,所以开发者只需要专注于游戏逻辑脚本的开发即可。脚本生命周期:图2.1 Unity3D脚本生命周期在游戏开发时常用的脚本生命周期函数如下:Awake:脚本实例化的时候调用OnEnable:脚本激活的时候调用Start:在Update函数第一次调用前调用FixedUpdate:在游戏每一帧进行物理处理的时候调用Update:游戏每一帧都会进行调用,执行顺序比FixedUpdate后LateUpdate:游戏每一帧都会调用,执行顺序比Update后OnDisable:脚本失效的时候调用OnDestroy:脚本销毁的时候调用第三章 需求分析本章主要对ARPG游戏进行需求分析,提出构建ARPG类游戏的通用需求体系。3.1 ARPG游戏概况ARPG游戏就是玩家需要扮演一位角色,并且通过控制这名角色在战斗中利用各种技能动作来跟怪物进行周旋战斗。最后打败所有怪物闯关成功。主要特点有:1.玩家扮演一位角色,通过打怪来进行升级,来提升角色能力数值。2.玩家通过移动、跳跃和释放各种技能来躲避或者攻击怪物,体现游戏的动作性;3.游戏的爽快感体现在各种动作技能的打击感已经绚丽的粒子特效;3.2 ARPG游戏需求3.2.1 游戏的所有功能需求表3.1 功能性模块需求和说明功能模块功能点功能说明备注MVC架构整体设计MVC架构整体设计搭建包含MVC在内的多层架构设计体系,充分预留系统扩充延伸空间,展现强大灵活性、低耦合性。开始场景进入游戏UI界面开发UGUI技术实现开始游戏按钮、继续游戏按钮、点击处理等。3D场景与UI融合技术游戏场景中常用的多摄像机融合技术,使得各个部分各司其职,最大限度降低系统耦合性。3D场景气氛渲染3D场景的淡入淡出效果。3D场景中UI粒子特效处理。角色创建与展现角色展示角色预设(Prefab)制作与创建。角色名称读取通过文本输入框读取用户输入的角色名称场景加载场景异步加载UGUI技术实现加载进度条开发,检测场景加载的百分比进度。实现异步加载和预加载场景预加载原型开发之MVC控制层角色控制多输入机制开发原理基本战斗系统开发键盘控制。键盘控制主角的移动以及跳跃。键盘响应主角各种攻击技能。使用EasyTouch插件控制(虚拟按键)。EasyTouch插件开发。EasyTouch插件检测触摸事件,使用ET控制主角的移动以及跳跃。EasyTouch插件响应主角各种攻击技能。游戏AI设计敌人的AI开发敌人的属性与动作设计战斗系统一、使用Meacanim动画系统,开发“连招”动作:1、普通攻击三连招,2、多重分身技能。3、AOE大招。4、瞬身。5、扭曲爆破二、敌我朝向检测与自动朝向算法三、“敌我伤害检测”实现算法四、对摄像机进行逐帧控制来实现技能释放时候的摄像机的缩放和抖动来增强打击感原型开发之MVC模型层 模型层主角技能核心/重要数值平衡设计模型层主角技能核心数值“健康数值” 、“魔法数值”、“攻击力”、“防御力”、“敏捷度”计算,以及计算公式。模型层主角技能重要数值“经验数值” 、“等级数值”、“杀敌数量”、“金币”、“钻石” 计算,以及计算公式。技能数值平衡设计玩家等级提升(“升级”)核心算法。玩家“升级”算法,可以直接定义,也可以采用配置文件方式更灵活处理各项数值。模型层中常见设计模式观察者模式、代理模式的运用 原型开发之MVC视图层主角技能数值展示UI界面开发重点展现主角“健康数值” 、“魔法数值”、“攻击力”、“防御力”、“敏捷度”等数值UI界面。人物技能展现设计观察者模式在Model-View 层的运用主角技能数值在Model 层中使用自定义事件方式,实现观察者模式。从而实现一对多的显示方式。(数值在多UI界面展现)玩家“升级功能实现:UI界面数值变化。通过前面ModelViewControl 层的配合处理,演示主角数值贯穿三个层的具体应用。敌人“血条”实现。通过实时的把3D“敌人”世界坐标转换为UI世界坐标方式,显示敌人实时血条情况。“墙遮挡”特技实现。使用WallVesionOutLine 插件实现“墙遮挡”效果处理。后台高级“日志系统”模块开发开发后台Log.cs 日志系统使用TXT格式文件,在PC段/移动端写出持久化文件,记录调试输出数据。日志管理开发日志系统的“部署模式”与“重要等级”等核心参数。目的是为了适应灵活、大批量的Log 日志信息展现、重点信息输出、仅警告与错误输出、无输出等多种情况的调试与配置部署要求。开发XML配置文件,实现后台日志系统的“可配置化”。后台“日志系统”,可以通过XML配置文件的方式,动态调整当前“日志系统”的输出模型或部署模式。“对话系统”模块以及“新手指南”模块开发“对话系统管理器”开发。开发核心的“对话系统管理器”脚本插件。实现多种对话模式的封装。对话系统“事件触发监听器”(EventTriggerListener.cs)的开发开发“事件触发监听器”脚本插件,实现UI界面的任意注册事件触发,大大简化“委托事件”机制的使用难度。游戏“新手指南引导”界面开发。游戏中不可或缺的“新手指南”功能模块。目的是引导用户无压力掌握游戏核心玩法。视图层详细构建商店(内购)系统开发游戏UI层各种常用窗体界面开发背包系统开发。背包系统的UI界面开发背包系统拖拽功能实现。背包系统穿戴功能实现。背包系统与主角技能数值的整合实现。副本与战斗系统进一步开发副本场景的搭建副本开发副本场景的优化副本场景的烘焙副本迷宫随机生成利用不同房间预设和迷宫随机生成算法来实现对象持久化技术开发玩家核心数值对象、重要数值对象的序列化使用XML技术,直接操作游戏对象。实现C# 类对象与XML文件的直接双向序列化与反序列化操作。实现游戏中海量数据的本地持久化方案。对象持久化开发玩家全局数值对象序列化。实现“游戏存盘”、“继续游戏”功能。使用对象序列化技术,完成游戏中典型应用:“游戏存盘”、“继续游戏”等典型功能。3.2.2 游戏性能需求游戏的性能需求11如下:1.游戏运行稳定流畅,不出现卡顿,具有一定的稳定流畅性。2.对于一些游戏操作简洁,游戏信息显示流畅。3.游戏界面美观简洁,能够简单操作任何一个功能,具有一定的客观性。4.用户操作体验舒适,游戏响应灵敏。表3.2 3D优化技术和说明3D优化技术静态光照将场景中大量的光照设置为静态并进行烘培Material优化把海量的图片打包成一个图集,一个图相当于一个setpass call,打包成一个图集就会只剩下一个setpass call,大大降低了渲染负担对象缓冲池避免频繁的创建和销毁对象造成CPU负担过重和卡顿遮挡剔除把触发器绑定到场景的不同模型块上,实现仅激活主角附近的粒子系统、场景模型。增加游戏流畅度层消隐技术以摄像机为圆心,只有距离摄像机比较近的地方才把小型物品的模型显示出来,减少setpass call的数目,从而增加游戏流畅度3.2.3 游戏开发环境和运行环境规定一、开发环境: 1.硬件及其他设备个人计算机一台,安卓智能手机一部。个人计算机用来进行游戏软件开发,通过wifi可以使个人计算机连接在安卓智能手机上运行的游戏,从而进行性能观察和调试。2.游戏开发环境和需要用到的软件 Unity3D引擎,VS2015、Photoshop、Autodesk Maya3.显示语言 中文。4.编程语言 C# 二、游戏运行环境:个人计算机操作系统Windows;安卓智能手机系统4.6以上版本;苹果手机。第四章 游戏设计与实现4.1 本游戏主流程控制按照Unity3D游戏引擎提供的以场景(Scene)为主的游戏组织方式,可将本游戏的主要场景分为:开始场景,异步加载场景,英雄展示场景,新手教程场景,主城场景等。以上场景构成了整个游戏功能应用层的框架,对这些场景的流程控制如图4.1所示。图4.1 游戏场景转换流程图4.2 本游戏项目文件结构图4.2 项目文件结构图1、Animation文件夹存放所有用到的动画,如UI动画、英雄模型动画,怪物模型动画、NPC动画等 2、Editor 存放不需要打包进游戏安装包的文件3、Plugin 存放各种插件和AssetStore上的粒子特效4、Resourses 存放游戏所用到的资源,如音频、字体、材质、模型、图集、粒子特效、预设体等。5、Scenes存放游戏场景6、Scripts存放游戏所使用的脚本7、StreamingAssets存放需要打包进安装包的文件,而且是只读的4.3 游戏主要功能的设计与实现该游戏是基于Unity实现的一款3D ARPG闯关游戏,采用标准MVC、模块化插件式架构作为核心开发架构以C#作为开发脚本,主要功能包括:战斗系统、关卡系统、音效系统、双输入系统、自定义对话插件、新手引导系统、背包/装备系统、玩家信息、技能面板、商城系统、存盘系统、日志调试系统、游戏优化系统。4.3.1 MVC架构整体设计图4.3 脚本文件结构图脚本分类:1、Model数据模型层,负责从存档中读取数据并进行反序列化或者把当前数据序列化之后存入存档文件。负责在游戏运行的时候储存所有运行需要用到的数据。并且在数据改变的时候通知视图层的观察者2、Control控制层,负责联系视图层与模型层,负责逻辑处理,提供接口给视图层调用,自身调用数据模型层3、View视图层,负责调用控制层获得数据并且显示出来,实现视图上的各种功能效果。4、Global公共层,负责存放所有公共的且与本项目有很大耦合性的脚本5、Kernal核心插件层,负责存放所有公共的且与本项目不耦合的脚本,例如MessageBox脚本、场景异步加载脚本等。6、Test文件夹,用于存放测试用脚本角色属性MVC结构:类图:调用关系图4.4 MVC各层调用关系图Model_PlayerExteralData和Model_PlayerKernalData在游戏运行时储存主角的各种数据。而Model_PlayerExteralDatProxy和Model_PlayerKernalDataProxy则是他们对应的代理类,把数值的“直接存储”与复杂的“操作计算”相分离。而Ctrl_HeroProperty则调用代理类,把接口安全暴露给其他控制层脚本和视图层脚本调用。当数据模型层数据发生改变的时候则通过多播委托的方式通知视图层数据已经改变了(观察者模式)。4.3.2 开始场景1、利用核心层的AudioManager播放背景音乐。2、新游戏按钮:2.1利用公共层的FadeInAndOut进行场景的淡出2.2 在GlobalParaMgr设置接下来要加载的场景NextScenesName2.3 加载“异步加载场景”,异步加载场景把上个场景的GC垃圾清理,然后读取GlobalParaMgr中的NextScenesName调用SceneManager.LoadSceneAsync方法进行场景的异步加载,并且读取加载进度反3映到进度条中。3、继续游戏按钮:3.1检查存档文件是否存在3.2如果存档存在则加载存档并且加载到主城场景3.3如果存档不存在则用核心层的MessageBox提醒玩家存档不存在4、退出按钮:点击则关闭当前游戏程序4.3.3 角色展示界面1、制作角色Prefab,绑定各种绚丽的粒子特效。2、利用脚本每个一段时间播放角色一个动画3、利用UGUI的InputField输入框,读取玩家输入的角色姓名,保存到GlobalParaMgr.UserName4、玩家点击确定,则加载新手引导场景4.3.4 场景异步加载功能设计思路:独立一个只有UI界面的场景作为异步加载场景,特点是没有3D模型,需加载资源非常少,几乎可以瞬间读取。当场景1需要加载场景2的时候则把场景2的场景名词保存到公共参数类里面,然后直接加载异步加载场景。当进入到了异步加载场景的时候,异步加载场景脚本代码会根据公共参数类里面的下一个场景名称,进行场景的异步加载,并且每一帧读取加载进度,利用UGUI的进度条显示当前加载进度。当加载成功之后直接跳转到场景2图4.5 异步加载流程图4.3.5 角色控制以及战斗系统1、利用Unity3D提供的Input类读取玩家当前按下对应按钮的状态,当玩家按下W、A、S、D的时候分别控制角色进行上左下右移动,并且播放跑步动画。J为普通攻击,是三段连招,如果连续按J则会出完第一招接着连第二招,最后第三招。伤害为角色攻击力的100%。L为瞬身,可以让玩家在一秒内快速移动K AOE大招,在玩家前方扇形区域造成AOE伤害,伤害为角色攻击力的150%。U扭曲爆破,出掌,在主角前方产生一个可以扭曲空间的球形爆破,造成很大的击退效果,伤害为角色攻击力的50%I 多重分身,在三秒后分身出另外两个影子英雄,跟随角色,并且可以进行攻击space跳跃,当玩家按下的时候给一个向上的加速度,通过一个上抛运动算法,逐帧控制角色Y轴坐标,以实现跳跃位移,同时播放跳跃动画以上按键均为默认按钮,玩家也可以自行设置按钮图4.6 跳跃用的上抛运动算法2、 利用EasyTouch插件和UGUI按钮实现手机上的操作输入,事件效果与键盘输入一致图4.7 EasyTouch和虚拟按钮3、人物动画状态机:图4.8 角色动画状态机4、 敌人状态机图4.9 敌人AI状态机5、 自动朝向按钮玩家可以开启或关闭自动朝向按钮,当自动朝向开启时,角色在不移动的时候会自动面向最近自己的敌人6、 摄像机逐帧控制设计思路:当技能动画播放的时候插入摄像机控制事件,达到打击感的增强在技能动画处于蓄力阶段则拉近摄像机与角色的距离,在技能动画处于放出阶段则拉远摄像机与角色的距离,并且伴随抖动。摄像机状态图:图4.10 摄像机状态图4.3.6 后台日志系统设计:根据游戏的状态(指定、开发、部署、停止)分级输出优先级不同的Log信息到xml文件中,便于游戏的调试。数据流图:图4.11 后台日志系统数据流图4.3.7 对话系统设计:插件式开发,系统外只需要调用一条函数,参数为:对话信息段落,即可在游戏中显示一段多条对话信息数据流图:图4.12 对话系统数据流图调用流程图:图4.13 对话系统流程图图4.14 对话系统效果图Xml剧本:图4.15 对话系统剧本文件4.3.8新手引导用于引导玩家熟悉游戏。实现思路:分三个业务逻辑脚本,TriggerDialogs负责触发对话,TriggerOperET负责移动教学,TriggerOperVirtualKey负责攻击教学。GuideMgr为整个引导的控制器,负责控制三个业务逻辑脚本运行权的激活和转移。类似一个责任链,三个业务逻辑脚本各自负责不同的工作,同一个时间只能有一个脚本运行,当当前脚本运行完毕之后根据情况把运行权抛向另一个脚本,另一个脚本运行完毕之后再根据情况把运行权抛向另一个脚本直到所有业务逻辑脚本运行完毕。流程图:图4.16 新手引导流程图类图:图4.17 新手引导依赖关系图4.3.9商城玩家可以通过商城充值钻石;玩家可以用钻石兑换金币;玩家可以用金币购买血瓶和蓝瓶图4.18 商城系统用例图图4.19 商城UI效果图4.3.10背包-装备系统实现物品拖拽,堆叠,堆叠拆分,位置互换,对应防具装备。用例图:图4.20 背包-装备系统用例图模型层类图:控制层类图:视图层类图:调用关系:图4.21 背包-装备MVC各层调用关系4.3.11副本设计与实现设计:副本是一个由很多房间构成的迷宫,玩家每次进入副本都会随机生成一个迷宫,玩家每进入一个新的房间就会刷出怪物,当玩家战胜怪物之后才可以离开这个房间,进入下一个房间,知道玩家找到出口所在的房间迷宫生成算法流程图:图4.22 迷宫核心生成算法流程图迷宫生成核心算法:4.3.3 游戏主世界场景游戏主世界场景主要是实现用户与游戏的交互,游戏的主要场景。根据第3章需求分析所诉塔防类的核心玩法需求定义可知,GPMainLayer类包括GameManager(游戏管理者)、enemy(怪物)、tower(防御塔)、GPToolLayer(工具栏)、Bullet(子弹)等对象。GPMainLayer场景各类之间的关系如图4.6所示。图4.23 迷宫生成算法核心代码4.3.12对象持久化技术(存档读档)设计思路:把角色属性、背包数据等模型层序列化之后存放到Xml文件中,下次继续游戏的时候再从Xml文件中读取数据,反序列化之后重新赋值给模型层。流程图:图4.24 存储和读取流程图4.4 游戏性能优化的实现4.4.1场景静态光照在3D场景里有许多的光照,而其中的动态光照也就是实时光照,是非常消耗资源的,所以本游戏在开发的时候会把大部分光照烘培成静态光照,原理是把光照射到3D物品上所呈现出来的光照制成贴图提取出一个文件,待游戏运行的时候把这些光照贴图贴到3D物体贴图的最外层,从而减少了大量的计算,提高游戏性能。但是这样做会有一个问题,就是当我们的主角移动到静态光源附近的时候,由于光照是静态的,所以主角是无法反射光照的,所以这时候就要用到Unity3d给我们提供的一个叫光照探头的组件,LightProbeGroup。这个组件的作用就是按照烘焙的静态光源对非静态物体产生一个模拟光照。这个组件的原理是在其区域内把这个区域内繁杂的光照数据经过计算记录下来,保存在其区域内的八个位置,成为一个模拟光源,当动态物体经过它的区域就会产生反射。使用以上的方法可以大大的降低实时计算量,从而提高游戏运行性能。4.4.2 Meterial优化无论是3D还是2D的渲染,所用到的每一张图片都会产生一个SetPassCall,而SetPassCall就像是一个画家的画笔,如果一个画家在画一张画的时候频繁的切换画笔,则会浪费大量的时间,所以Meterial优化就是要降低SetPassCall的数量,在本游戏中所用到的技巧就是把大量的小图片打包成一个图集,让多张图成为一张图,这样就可以大大的降低SetPassCall的数目,从而提高游戏运行性能。4.4.3对象缓冲池技术对象缓冲池和一般的池技术一样,目的就是为了复用资源。本游戏中所用到的对象缓冲池主要的作用就是为了减少怪物、粒子特效等游戏3D对象的频繁生成和销毁,因为这些生成和销毁会占用大量的CPU资源。这个缓冲池的实现原理是当游戏需要生成对象的时候回去缓冲池查看池内是否有已经预生成的对象,如果有就把改对象提取出来激活即可,如果池内没有,才进行对象生成。而在粒子特效播放完毕或者怪物死亡的时候就把这些对象复位然后重新放入缓冲池并隐藏,等待下次调用。为了避免生成对象的时候出现卡顿,本游戏在当前场景创建的时候会预先把所需生成的怪物和粒子特效提前打入一定数量到缓冲池内,起到了一个warm-up的作用。对象缓冲池本质上是用内存来换CPU,所以为了避免池内物品堆积,浪费内存,本游戏的对象缓冲池也实现了一个定时销毁多余对象的功能。即在对象池内判断该物品是否已经一段时间没有使用了,如果是则销毁一个,如果不是则不进行销毁。销毁直到剩下少量对象为止。4.4.4遮挡剔除游戏的一个3D场景是非常大的,但是我们常常摄像机所拍摄到的地方都是有限的,所以本游戏使用的这个优化技术的目的就是在不改变画面的情况下把摄像机以外的东西进行剔除。实现方式是把3D场景分割成多块,每一块绑定一个很大的方形触发器,当主角进入这个触发器的时候再把触发器内的3D模型显示出来,当主角离开这个触发器的时候这个3D模型就会隐藏起来。这样做就可以停止摄像机拍摄区域外的粒子特效的播放,减少CPU消耗。而且因为减少了模型的渲染,所以能够降低GPU的负载,最终提升游戏性能。4.4.5层消隐技术在游戏场景里面会有很多小物品或细节上的模型,比如一个茶杯、一个小石头。为了节省资源,我们可以设置成摄像机很近的时候才把这些物品渲染出来,当摄像机较远的时候就把这些小物品隐藏起来。本游戏把这些细节物品设置成一个小物品层。然后通过设置摄像机的layerCullDistances就可以实现这个优化技术了。从而提升游戏运行性能。第五章 游戏调试与测试分析本课题主要实现了ARPG地牢游戏框架,系统测试部分主要针对框架中基本模块的使用和性能测试和分析。5.1 功能测试根据第四章所述游戏主要功能的设计与实现,对本游戏框架进行集成测试。表5-1游戏功能测试方案测试项目参与对象测试步骤测试结果游戏开始场景AudioManager、FadeInAndOut、GlobalParaMgr、Ctrl_StartScenes、Ctrl_LoadingScenes1. 能否背景音乐正常播放2. 进入场景和离开场景的时候有淡入淡出3. 点击新游戏按钮可以经过异步加载跳转到英雄展示场景4. 点击退出游戏可以退出程序正常运行角色展示界面Ctrl_LogonScenes、View_LogonScenes、Ctrl_LoadingScenes、GlobalParaMgr、Ctrl_DisplayMagic、Ctrl_DisplayHero、Ctrl_DisplaySword1. 点击不同英雄的头像能否切换展示不同英雄的模型和能力值2. 英雄动画能否顺利播放3. 玩家能否顺利设置角色名称4. 点击确定能否进入新手引导场景正常运行场景异步加载Ctrl_LoadingScenes、GlobalParaMgr、1. 每个场景互相跳转是否都是经过异步加载场景2. 是否能顺利加载到下一个场景3. 加载场景的进度条是否正确显示正常运行角色控制以及战斗系统Ctrl_HeroAnimation、Ctrl_HeroAttack、Ctrl_HeroAttackInputByET、Ctrl_HeroAttackInputByKB、Ctrl_HeroJump、Ctrl_HeroMoveByET、Ctrl_HeroMoveByKB、Ctrl_HeroOnHurt、Ctrl_HeroProperty、Ctrl_HeroShadowAttack、Ctrl_ShadowGravity、Ctrl_Enemy_Property、Ctrl_EnemyDeathEffect、Ctrl_RedWarrior_Property、Ctrl_Warrior_AI、Ctrl_Warrior_Animator、Ctrl_Warrior_Property、View_UIResponse、GlobalHeroCamera、Model_PlayerExtenalData、Model_PlayerExtenalDataProxy、Model_PlayerKernalData、Model_PlayerKernalDataProxy1. 角色各种动作是否能正常播放2. 怪物各种动作能否正常播放3. 角色的各种技能能否正常触发4. 角色的各种技能是否按照需求对怪物造成伤害5. 自动面向怪物的功能是否正常运行6. 怪物的AI是否正常7. 怪物能否正常攻击玩家8. 角色施放技能时候的摄像机逐帧控制是否正常9. 角色技能音效、受伤时候的音效、跑步音效等声音是否正常播放10. PC和手机是否都能正常控制角色11. 玩家经验足够能否顺利升级12. 升级属性是否有加成13. 怪物死亡是否有金币奖励正常运行对话系统DialogDataFormat、DialogsDataMgr、XMLDialogsDataAnalysisMgr、DialogUIMgr1. 调用API能否正常出现对话2. 对话是否和XML文件中编写的一样正常运行新手引导GuideMgr、TriggerOperET、TriggerOperVirtualKey、TriggerDialogs1. 能否出现教学对话2. 能否出现教学箭头3. 能否按照需求顺序运行业务逻辑4. 对话内容是否按照顺序出现5. 移动教学是否正常运行6. 攻击教学是否正常运行正常运行商城View_PurchasePanel、MessageBox、MessageBoxManager、Ctrl_Package、Ctrl_HeroProperty1. 能否正确充值钻石2. 钻石能否正确兑换金币3. 金币能否购买血瓶和蓝瓶4. 兑换或购买的物品是否正确同步到数据模型层正常运行背包-装备系统View_Package、View_PackageItemDrag、View_PropGrid、Model_PackageData、Model_Package

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论