版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广东东软学院本科生毕业设计(论文)基于Unity引擎的角色扮演类的设计与实现Thedesignandimplementationofrole-playingclassesbasedonUnityengine内容摘要Unity3d由UnityTechnologies开发研究,从2013年发布至今到发布出2019版本,从国外到国内大火,是一款让玩家轻松创建三位视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合开发工具和游戏引擎。Unity是通过组件化和模块化开发,可视化编辑器让人更加容易上手,Unity由于上手难度低,3D技术的完美体现和支持,深受各大开发厂商和独立开发者的喜爱,并且提供了免费版给予学生或者对游戏行业有兴趣的人学习。回顾游戏开发史,由于网络科技的高速发展,游戏领域也乘上了这班高铁,进入了高速发展的时代,游戏的种类和玩法越来越丰富,生存丧尸题材的游戏也是深受更大用户和玩家喜爱,前有生化危机这样的大IP电影和游戏,后有H1Z1这样的后起之秀。鉴于该类型的游戏的火爆,我在Unity3D上仿制了相似的游戏,利用C#语言开发,结合许多优秀开发者开发的插件进行开发。游戏是一位玩家扮演一个角色被投放到孤岛收集线索和击败丧尸最终逃出孤岛的一款第一人称RPG兼容FPS游戏。关键词:丧尸题材游戏C#语言Unity游戏开发第一人称FPSRPGAbstract□DevelopedandresearchedbyUnityTechnologies,Unity3dhasbeenreleasedfrom2013to2019.Itisamulti-platformintegrateddevelopmenttoolandgameenginethatallowsplayerstoeasilycreateinteractivecontentsuchas3-dimensionalvideogames,architecturalvisualizationandreal-time3danimation.Unitybecauseofthedifficultyofgettingstarted,3Dtechnologyperfectembodimentandsupport,bythemajordevelopersandindependentdeveloperslove,andprovidesafreeversionforstudentsorinterestedinthegameindustrytolearn.Reviewgamedevelopmenthistory,duetotherapiddevelopmentofnetworktechnology,gamefieldonthehigh-speedrail,thisclassalsoenteredtheeraofrapiddevelopment,thetypesofgamesandplaymoreandmorerich,zombiesurvivalthemeofthegameisalsolovedbymoreusersandplayers,withresidentEvilbeforesuchalargeIPfilmsandgames,afterH1Z1sucharisingstar.Inviewofthepopularityofthistypeofgame.IcopiedandinnovatedasimilargameonUnity3d,developedwithC#languageandcombinedwithplug-insdevelopedbymanyexcellentdevelopers.ThegameisafirstpersonRPGcombinedFPSgameinwhichaplayerplaysacharacterwhoisputonanislandtocollectcluesanddefeatzombiesandfinallyescapesfromtheisland.Keywords:ZombiethemedgamesC#languageUnitygamedevelopmentFirst-personFPSRPG目录TOC\o"1-3"\h\u1绪论 绪论1.1研究背景由于网络科技的高速发展,计算机和手机飞入各户各家。游戏作为娱乐产业不可或缺的一部分。各式各类的游戏随着游戏领域的崛起和硬件的提升,电脑可以渲染的帧数和画面越来越得到提升,例如:角色扮演、即时战略、经营策略、休闲养成等各种类的游戏从2D到3D。游戏领域的成长速度极其之快,而今,国内丧失类题材游戏比较少,Polygon风格的游戏更是少。Q版的界面和画风可以让更多的人所能接受。角色扮演射击类游戏,玩家需要扮演游戏中的一位角色射击进行游戏。1.2目的和意义丧尸类游戏较比其他类型的游戏是具有一定的优势的,因为所有人们都会曾幻想过在某一绝境和逆境中去生存和逃生,这种题材的游戏在精神上满足了他们的想法,通过扮演绝境中角色,将自己代入,能够达到精神上的刺激和满足,且丧尸类游戏有很高的自由度,可玩性高等优势,能够充分表达人们的精神需求。在国内外生存类游戏逐渐火热,像《我的世界》是由MojangAB开发的一款热度非常高的Polygon多边形风格游戏,还有像电影类的《生化危机》系列和《釜山行》等电影也是很多丧尸类题材,充分说明了生存类游戏在人们心中的分量是非常重的。丧尸生存类的题材在很久之前就有诸多小说家绘制出了许许多多的蓝图,在2009年生存类游戏《闪电行动》进军国内市场,到如今在网络爆红的《绝地求生:大逃杀》和网易出品的《明日之后》。丧尸生存类题材与现有的国内比较火热的MOBA诸如《英雄联盟》、《DOTA》、《王者荣耀》等游戏具有较大的优势,丧尸生存类题材游戏是以现实生活为背景,使玩家更容易的去代入,去融入这个游戏里。与回合制游戏不同的是,这种生存类游戏会给人更加紧张而刺激的感觉。《明日之后》在2018年时还未开测时的预约量到达了80万以上,在生存题材红红活活的时候,国内的生存题材类游戏较少,所以目前国内的生存题材游戏还是有很大的发展空间。近些年,丧尸生存类RPG正在迅速蹿红,此类游戏反映了人类对未来的某种恐慌心态,也迎合了当下这个和平时代人们的心理需求并且,因此针对该市场调研,开发生存类游戏是具有实际意义的。1.3论文主要内容基于Unity引擎开发得角色扮演类的射击与实现论文主要根据开发的游戏进行编写,根据游戏内容解释设计原理和实现方法,本论文总共有6节讲解了游戏内容,详细内容如下:绪论:文章先讲解了该游戏的研究背景,然后讲解了开发这款游戏的目的和意义所在开发工具和技术介绍:从个人角度介绍游戏的开发引擎,游戏开发的计算机语言,还有其他优秀开发者所开发的插件。能简单概括出文章所需要的技术,让没接触过的这方面内容开发者能更简单更好的去理解和研究。游戏策划:每当我们开始玩一款游戏的时候,游戏的开发者都会留下介绍方便用户更好的上手。一款优秀的游戏总是离不开优秀和吸引人的剧情和游戏需求设计,策划会设计游戏内的物品和对应的数据,精美的GUI(GraphicalUserinterface中文名:图形用户界面)会更加吸引用户和展现游戏的内容。还有,我将在这个章节为大家讲解游戏流程的设计。游戏实现:游戏编码的实现阶段,我们知道前期游戏的策划是为游戏的实现铺好了道路,具体的内容还是在游戏实现的阶段进行编码,所以这个章节是极其重要的一个章节,我将在这个章节为大家讲解游戏中每一个地形,每个人物,每一样物品,每一次的机关该如何进行编码实现和它们的逻辑是如何开展的,还有游戏中的场景物品的GUI的实现,为了更好的给玩家展现游戏的内容。还有将讲解游戏中场景之间的切换。游戏测试:任何一个项目的完成都离不开测试,更何况开发人员会在开发过程中对每一个模块进行不断地测试。利用测试方法对该游戏进行不断测试,并且记录相应的测试结果和测试数据,以文字形式进行阐述直至游戏的每一个模块通过测试和整体项目通过最终测试,可以使玩家得到更优质的体验,让质量得到保障,不需要进行大量BUG的修补。游戏特色和创新:游戏特色是吸引用户的关键中的关键,一个游戏一旦没有了游戏特色,就不能吸引到该受众方面的玩家,创新是为了刺激玩家的新鲜度。总结:总结和整理整个毕业设计所需要提交的文件,如开题报告、选题、游戏设计、游戏实现、游戏测试等等到所需要提交的最终论文的所得所想。2开发工具和技术简介2.1Unity3D简介 伴随着网络科技的发展,许多游戏引擎随着诞生如虚幻四(UnrealEngine)、AnvilEngine、Uinty3d。Unity3d是目前在国内外大火的游戏引擎,以开发3D游戏为主的游戏引擎吸引了不少开发者使用该引擎开发3D大作,例如:崩坏三、深海迷航,手机游戏方面有著名的王者荣耀和纪念碑谷等等。Unity是让一个玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具。而且Unity3d发布了个人免费版提供非商业化的开发和学习,并且官网也提供了许多的学习资料和相应的API(ApplicationProgrammingInterface中文名:应用程序接口)文档来给独立开发者和非Unity公司的开发者进行学习查询。目前,Unity已经发布带2019版本并且在大陆有相应的公众号Unity官方平台实时提供最新的研发技术以供讨论和学习。在考试认证上也提供了UnityCertifiedUser应用能力认证和UnityCertifiedProfessional专业能力认证。现在Unity3d引擎已经逐步完善2D游戏的功能开发,并且提供了跨平台功能和利用Unitywebplayer插件发布网页游戏还有跟随时代潮流开发VR的最新形式的游戏且该引擎不止在游戏领域内有显著成就,也为3D动画动漫和VR模拟现实等创造了一系列途径。图2-1是Unity3D的脚本生命周期图,讲述了脚本即编写的代码是如何在游戏引擎环境内的执行和结束。图2-1Unity脚本生命周期图2.2C#C#是微软公司2000年发布的一种面向对象的语言、运行于.NETFramework和.NETCore(完全开源,跨平台)之上的高级程序语言设计。C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。C#可在VisualStudio的开发工具上运行,而且,C#也是Uninty3D所支持语言的其中一种。C#良好的兼容了值类型和引用类型,在发展中逐步解决了其他高级语言没解决好的问题,充分利用栈空间,非常高销,做了一部分C/C++擅长的事还有良好的语法设计和库函数,引导程序员写出更快且更自然的代码在继承、泛型、接口类型约束等等高级特性,都有着良好且自洽的设计。2.3插件介绍2.3.1Fungus对话插件Fungus是一款检视面板自定义工具,主要帮助标志不同角色对话在检视面板上显示的颜色,以更好更清晰地实现游戏角色之间的对话逻辑。该插件需要Unity5.0及以上版本,无需编写代码。Fungus能以标签来触发对话过程中的事件以及各种条件与逻辑处理,并且支持本地化,对相机、Sprite及音乐音效的控制。提供了一个交互式的界面,能够快速构建一个对话系统。这是一款Unity小众的插件,在Unity商店发布了免费版和收费版。易上手和快速掌握,极其方便刚入门的开发者制作对话系统、叙事系统、剧情系统。2.3.2DoTween动画插件Unity做插值动画的插件有许多,比较常见的有Itween、Hotween、Dotween。DoTween是一款针对Unity的快速高销、类型安全的面向对象的补间动画引擎,并且对C#用户做出了很多的优化。DoTween插件在灵活性、稳定性、易用性上都十分突出,动画制作成本低,不需要自己费时费力的完成各种动画的设计。DoTween的特征:速度与效率非常高、IntelliSense和类型安全、捷径、极其精确、逻辑易用的API、几乎可以完成动画的一切、模组、捕捉,轴约束和其他选项、完全控制、分组、可混合补间、路径、播放时更改值和持续时间、安全模式、协程的产量、多种旋转模式、共享方法、外挂程式、附加功能、所有基础。2.3.3BehaviorDesigner行为树插件BehaviorDesigner是一个行为树插件,是为了让设计师,程序员,美术人员方便使用的可视化编辑器,支持可视化调试,BehaviorDesigner提供了强大的API可以让你轻松创建tasks(任务),是实现简单AI最好的工具。行为树在AI(人工智能)被反反复复的使用,行为树有几大优势:行为树提供了强大的灵活性,功能非常强大,并且很容易更改行为树结构,结构很清晰,方便修改,可以和FMS(有限状态机)之间相互配合使用来达到更好的效果!3游戏策划3.1游戏简介世界被病毒感染,主角意外被丢弃在一座孤岛上的迷宫里,从而寻找出口而经历的重重险关,最终逃出去和揭秘真相的经历。3.2游戏剧情设计主角一睁眼醒在一座孤岛上的迷宫里,仿佛忘记了一切的事情,手上只剩下一把手枪和一条道路,前途迷惘未可知,险关重重,茫然无措的主角只能抓起手中的手枪往前方而行,不料机关重重,而且岛上居然出现像丧尸一样的生物在徘徊和漫无目的的走着。主角究竟能不能逃出升天和揭开自己为何身处在这个地方的秘密呢。3.3游戏需求设计3.3.1GUI设计游戏总共分两个场景,一个开始场景,游戏主场景。开始场景由天气灰暗的3D天空盒和3个按钮组成分为别:开始游戏按钮,点击后进入黑屏后跳转到游戏主场景、游戏介绍按钮,点击弹出一个方框显示游戏介绍,再次点击方框消失、游戏退出按钮,点击后退出游戏。主场景由全黑和菱形条纹穿插的天空盒当背景。首先添加一个承载GUI的Canvas(画布)里面包括:一个狙击枪倍镜Image(图片),用来使狙击枪开镜的时候展现,一个倒计时时针包括2张Image1个Text显示数字,当补充弹药时,用来展示补充弹药时间的倒计时。一个准星红点Image,用来当射击时候的准星。玩家血条设计包括2张Image,扣血时会减少。三个线索Image,每当获得一个线索的时候展示。攻击力显示包括:1张Image来展现攻击力的图片1个Text显示攻击力值,来表示当前枪支的攻击力。金币显示包括1张Image显示金币图片1个Text显示击杀丧尸所获得的金币值。围剿关卡丧尸剩余数量值包括1张Image显示丧尸图片1个Text来显示剩余数量。此外还有两个非常重要的Panel(面板),一个是在玩家死亡之后弹出的界面,包括两个Button按钮,一个是退出游戏,点击后返回开始界面。一个是原地复活按钮,点击完在死亡地方的上空重新复活。另一个Panel是在玩家不想玩游戏的时候,按下ESC按键弹出的界面,展示一个Button,点击后返回开始界面。3.3.2人物设计该游戏中一共设计了5个人物和1个传送门。1、主角:WSAD键控制上下左右移动,空格键跳跃,左键射击攻击炮台和丧尸使其扣血,右键瞄准和打开倍镜,R键切换枪支,F键捡枪,T键在弹药点补充弹药和跟商人交易,左键或者空格键继续对话框对话,1键主武器,2键手枪,一开始主角只有手枪,血条,50金币,主角有与NPC对话的功能,基础血量100,受到攻击扣除血量。2、丧尸:丧尸拥有基础血量100,并且会通过behaviorDesigner行为树插件制定对应的行为树,在没有敌人的时候进行漫无目的的行走,当看到敌人的时候,追击敌人,在追击到敌人附近时候,进行范围攻击,然后停顿一秒,致使敌人扣除血量,如果继续看到敌人就继续追击和攻击,在丧尸背后是不会被看见的,丧尸的视野为正前方60度,视野距离为20F,攻击伤害30F,攻击范围为正前方100度,当玩家脱离视野范围,丧尸会继续开始漫无目的的行走,受到攻击的时候,会面向敌人。当丧尸死亡时候,会一定概率在原地掉落物品并且提供20金币。3弹药补充点:当主角接触弹药补充点长按键5秒后补满主角所有枪支的弹药容量。4商人:商人通过金币交易为主角提供三项服务,30金币恢复30点生命、50金币提升当前在持状态武器30点攻击力、金币100神秘大礼用来坑玩家100金币,教育玩家和商人交易没有那么简单。5孤岛管理员System:在玩家抵达一定关卡时会弹出对话框推动游戏继续进行。传送门:藏在某座金字塔上方,穿过传送门可以获得一把超强力的步枪武器。3.3.3枪支设计游戏中一共有三把武器,副武器手枪:射程距离15F是最短的,子弹伤害20F,弹夹量7发,最大携弹量35,只有基瞄。主武器狙击枪:射程巨鹿200F距离最长,有倍镜瞄准可超员距离击杀丧尸,绝杀于千里之外,弹夹量15,最大携弹量60,子弹伤害70F。主武器步枪:超级武器,长按连发速度极快,伤害30F,最大携弹量300发,弹夹量30发,射程距离50F。3.3.4物品设计当丧尸死亡时在原地会有百分之30的概率掉落一个回血包恢复30生命值,百分之30概率会掉落一个弹药补充,补充当前所持枪支的弹药。并且,在围剿关卡有炸药桶,炸药桶一旦受到枪支攻击就会爆炸,对周围的丧尸和主角进行冲击击退他们并且会受到30点伤害,炸药桶之间爆炸会相互引爆。3.4游戏流程设计主角醒来在迷宫,通过第一关,获得第一关线索,否则死亡,通过机关长廊,抵达第二关。击杀第二关里的全部僵尸后获得线索,指引去打开第三关的机关,获得三个线索后方可逃离,综合三个线索解开真相。如图3-1游戏流程图图3-3游戏流程图4游戏实现4.1完成基础步骤1、创建游戏工程,导入地图素材、人物素材、物品素材等等,导入文章开始提及的三个插件Fungus、BehaviorDesigner、DoTween。2、创建1个Empty取名Manager用来挂载公共管理脚本:枪支数据ArmsManager、储存公开静态数据和全局条件ComManager、对话系统脚本ManageFlowChat。创建一个抽象类CharacterStatus要编写人物的血量100,abstract的死亡方法Dead和virtual的受伤的方法来给主角状态继承和敌人状态继承。4.2主角实现首先将主相机拖至主角物体下面,通过Input.GetAxisRaw("MouseX")和Input.GetAxisRaw("MouseY")来获得鼠标在屏幕内移动的水平方向和垂直方向的插值,根据现实情况代入,主角不可能实现360垂直旋转,用Mathf.Clamp限制垂直方向数值在上下120度之间,用欧拉角存储水平方向和垂直方向的值分别赋值给相机的transform.localRotation和主角身体的localRotation。这样第一人称视角已经实现。实现主角的状态PlayerStatus,继承抽象类CharacterStatus,基础血量100重写Dead方法,当主角血量低于等于0的时候,播放主角死亡音效,将主角隐藏,解锁鼠标,显示游戏结束面板,如果点击原地复活按钮,将主角显示在死亡地方上空,恢复血量。重写受伤害方法,这里将恢复血量的方法和受到伤害方法并和在一起,通过传入一个伤害值,如果值为正数,扣除血量并播放扣血音频,如果值为负数,则恢复血量,恢复后的血量不会大于100;主角移动PlayerMove,给主角添加角色控制器进行简单移动,首先通过Input.GetAxisRaw获得WASD的插值,通过Vector3.normalized进行向量归一化,保持同样的方向长度为1,然后通过CharacterController.SimpleMove函数输入主角位置转换成世界坐标乘以移动速度。跳跃键按下Space键时候跳跃,通过向下发射一条距离为1的射线,检测如果不在物体标签不为Floor或者Water里则无法进行跳跃,如果在,则将主角的Y轴位置向上增加跳跃高度乘以增量时间。当处在水中的时候,将持续扣除血量。枪支类,创建ArmsManager对象用来获取类中的存储的枪支,创建一个列表搜索所有枪支,通过主武器字符串查找在状态为true的枪支,按下2键,使手枪状态true,按下1,如果当前主武器的字符串为空,则不显示,当主武器字符串不为空,则将主武器字符串所对应枪支名称的枪支状态设置为true。F键捡枪,当场景内出现枪支模型时,靠近枪支按下F键,当主武器字符串为空时,将模型状态设置为False然后在主角身上显示,当不为空时,原本身上的枪支状态设置为false,将模型显示出来,创建一个向量为主角位置加Vector3.forward(前方),通过DoTween插件的DoMove函数,实现丢出枪支的动作,丢出枪支向前平滑一段距离。开火设置,每种枪支有每种开火模式,获得主角身上的Animator(动画组件)和AduioSource(音频组件)通过实例化ArmsManager对象获得枪支数据,创建一台Camera(相机)用来显示瞄准时候的镜头拉近感,设置射击距离。开火方法:当按下鼠标左键的是很好,获得当前枪支的剩余子弹数量,判断,当前子弹不为0,播放射击动画,减少子弹数量,播放子弹音频,在相机视口中心使用Camera.ViewportToWorldPoint创建向量作为起点,设置相机向正前方为方向,声明RaycastHit存储射线射中的对象信息,通过Physics.Raycast方法发出射线长为射击距离的射线,将射击轨迹终点设置为碰撞发生的位置,如果射中对象为炸药桶,则获得炸药桶身上的脚本,设置炸药开关为true,触发炸药桶爆炸,如果射中物体则获得物体身上的敌人状态脚本,扣除敌人武器伤害的血量。瞄准方法,当长按右键,准星消失,换成机瞄和播放瞄准动画,松开左键,取消播放瞄准动画,准星显示。换弹函数,如果当前弹夹子弹为满,则按下R键也不执行换弹函数,最大携弹量为0也不执行换弹函数。换弹差量,如果剩余弹量小于需要弹量,则将全部弹量注入到当前弹量,如果大于,则剩余弹量减去需要弹量,将当前弹量补满。给主角添加动画状态机Animator,开始游戏时候先播放进场动画Draw,当主角站立不动时候,播放Idle动画,开枪时候播放Fire开火动画,瞄准时播放Aim瞄准动画,瞄准动画可以继续执行瞄准射击动画函数AimFire,换弹时候播放换弹动画,在换弹动画中添加事件Event,执行枪支类的换弹函数,移动的时候播放Run移动动画。图4-2是动画状态机的状态图。图4-2动画状态机图4.3敌人实现1、实现丧尸的状态EnemyStatus,继承抽象类CharacterStatus,基础血量100重写Dead方法,当丧尸血量低于等于0的时候,播放死亡动画,有一定概率在原地实例化补给品物体,如果围剿关卡每死一个丧尸,丧尸数量减少,Destroy2秒后销毁物体。Ondamage受到伤害方法,受到伤害当前生命值CurHP减少,播放受伤动画,将自身转向受到伤害的方向。2、FMS状态机脚本MonsterAI脚本,定义一个枚举有丧尸的三种行为,移动Move,休息Idle,攻击attack,编写Virtual虚方法的Move、Idle、Attack三个方法,声明一个枚举对象,在Update函数中,检测枚举对象行为,执行相对应的方法。AI脚本SlimeAI脚本,继承MonsterAI脚本,重写三个行为函数,播放相对应的动画,EnemyAttack攻击时函数,在攻击时调用,用Vector3.Distance计算丧尸与主角之间的距离,用Vector3.Angle计算攻击范围,范围为100F,当主角在在距离内5f内和攻击范围为100F时候,获取主角身上的主角状态函数PlayerStatus的OnDamage函数扣除20生命值。图4-3-1为敌人动画状态机图3、AI行为树和FMS状态机的联合调用,使用behaviorDesigner插件编写行为树,通过插件的WanderTasks(任务)丧尸在默认情况下进入FMS脚本的Move状态进行漫无目的的游走,CanSeeObject任务为正前方角度90度,搜索距离20F,收缩目标主角,发现主角的时候,开始进行调用Seek任务哟东速度为8,转速120,进行追击,在距离为3F的时候,停下调用FMS状态机attack函数,进行攻击。图4-3-2为AI行为树图。 图4-3-1敌人动画状态机图图4-3-2AI行为树图4.4机关实现第一关,在入口前设置射线检测,如果检测到主角,则设置开启机关的Bool值为true,声明一个float变量用来计算时间,在三秒内不得再次触发。预制体冰柱脚本PolygonLoop,在Start函数调用协程,声明IEnumerator(协程)得方法EffectLoop,在原地实例化冰柱的例子效果,声明一个Collider(碰撞体)的数组存储Physics.OverlapSphere检测在冰柱上的物体,循环检测物体的标签是否为Player,是则调用主角身上的伤害函数,扣除10生命值,冰柱持续时间为4秒。随机冰柱函数ProduceTrap脚本,在加载游戏场景的时候先生成10个冰柱物体,设置状态为false,第一关范围的4个点,利用Random.Range生成4个点内范围坐标,当主角触发机关的时候,则将冰柱状态设置为true,将随机数赋值给冰柱的位置。机关长廊发射射线检测主角,如果触发,则将走廊两边的喷火枪状态设置为true,每一把喷火枪都设置了对应方向的射线检测和时间限制,每两秒造成伤害10点,还有将炮台显示,炮台是拥有耐久度脚本ShellStatus继承于CharacterStatus,炮台每5秒投射一颗炮弹到主角位置,炮弹的移动速度为10,伤害为30,获得主角的位置,并且成弧形投射。声明Ienumerator协程方法StartShoot,当距离小于8F,则设置当前位置为最终位置朝着该位置投射,若炮弹碰撞到的物体的标签为Floor或者Player,则生成炮弹打在地上的粒子效果,2秒后销毁粒子效果。围剿关卡,设置了一个正方体发出射线检测,检测到主角,则将两道门Setactive为true,堵住主角的进退路。当地内有分布不均匀的炸药桶,场地外有炮台继续投射炸弹。4.5游戏物品实现4.5.1补给品实现补给品脚本EffectSu:声明ArmsManager对象给补充弹药和恢复生命的预制体添加碰撞体,在丧尸死后有30的概率在原地实例化补充弹药这个预制体,当主角碰撞到了物体,通过OnTriggerEnter碰撞检测,判断自身物体的标签,如果为BulletEffect补充弹药,且发生碰撞物体为主角,将把主角身上的枪支弹药补满,并且在0.5f后销毁该物体。如果标签为LifeEffect恢复生命且发生碰撞物体的标签为Player,则获得主角身上的PlayerStatus的伤害方法,传入负数,恢复血量30点,0.5f后销毁物体。4.5.2枪支实现首先建立GunData枪支数据类,将其System.Serializable序列化在InspectorUnity面板上方便调控数据。Gundata内声明武器名字,武器预制体挂载,总弹夹携弹量,武器弹夹量,当前剩余子弹,最大携弹量,武器伤害,在Inspector面板上赋值数据,之后创建枪类ArmsManager,实例一个类型为GunData的烈面guns,在枪类中编写函数PrepareGun通过字符串遍历列表里的枪,查找符合的返回。4.6游戏物品实现4.6.1补给品实现弹药补给点实现:通过OnTriggerStay判断主角是否跟补给点接触,如果处在接触状态,长按T键显示倒计时表,声明一个float的数记录时间,当倒计时完毕后,通过SelectGuns函数遍历枪支补充弹药。给弹药补充点添加3DText组件来做物体上面的名字。4.6.2商人实现商人:当商人的距离和主角的距离小于3F的时候,按下T键触发Fungus插件的对话系统,将鼠标解锁,总共有三个菜单,点击后获取公共类ComManage中的金币,金币小于所需金币,则触发购买失败的对话,若金币足够,则扣除金币。4.7GUI实现4.7.1开始界面GUI实现将下载的阴天的天空盒挂载到Window->lighting->setting->Scene上的skyboxMaterial上,创建画布Canvas承载UI控件,将Canvas的RenderMode设置为WorldSpace,这样就从3D角度去观看控件,在Canvas下创建三个按钮,游戏开始按钮GameStart,通过Fungus插件事件监听这个按钮,然后,调用Fullscreen将屏幕铺满,FadeToview黑屏后LoadScene切换到游戏主场景。游戏介绍按钮GameInformation,通过脚本监听按钮,按下的时候,弹出Panel,Panel包括一个Text文字,展示游戏介绍,然后给Panel添加一个Button组件,监听这个Button组件,当点击Panel的时候关闭Pnanel。退出游戏按钮,监听该按钮,当点击的时候,执行Application.Quit退出游戏。4.7.2玩家血条和倒计时实现先重复两张图片,然后将其中一张图片的透明度降低,填充颜色,当受到伤害和倒计时的时候就会有效果。4.7.3游戏结束和退出GUI实现 判定主角生命值低于等于0的时候,弹出Panel,有两个按钮,原地复 活则恢复主角身上的PlayerStutus.CurHP为100,在原地的上方复活,退出 游戏则通过Fungus插件事件监听这个按钮,然后,调用Fullscreen将屏 幕铺满,FadeToview黑屏后LoadScene切换到开始界面场景。5游戏测试5.1测试目的当开发者在开发程序之时,就会对相应开发的模块进行测试,确保单独模块运行不会出问题,测试是一个开发项目必不可少的过程,是开发程序过程中同时进行的必不可少的一部分,检查模块和模块之间衔接是否有问题。在开发完成时,进行最终测试,测试整体游戏是否有BUG和功能是否符合项目计划,减少出错率和后期维修成本。5.2测试方法静态测试包括代码检查、静态结构分析、代码质量度等等。构造测试实例、执行程序和分析程序的输出结果。5.3测试结果在开发过程中,静态测试是必不可少的。当完成一个模块时,开发者采用单元测试,通过测试以发现该模块出现不符合的情况和编码。在测试第一关卡模块的时候,发现冰柱的随机生成存在延迟的和碰撞体跟不上随机生成地点的现象、丧尸在追击到敌人面前不会进行攻击的BUG。在测试第二关卡模块的时候,出现喷火枪不造成伤害,炮台不发射炮弹BUG,炸药桶不造成伤害,丧尸穿模现象。在测试换枪系统的时候,出现切换不成功和不消失BUG。在开发完成后,进行验收测试,验收测试是最后一个阶段的测试操作,在游戏正式开始运营之前索要进行的测试工作,单元测试中的BUG绝大部分都被解决掉。6游戏特色和创新该游戏通过使用插件将原本复杂化功能成功化简方便新手入门学习,而且创建了新的角色扮演类题材的射击游戏,Polygon风格更是能够吸引大众以及小朋友,不血腥不暴力的画风,Q版建筑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新教材高中生物 第2章 细胞工程 第2节 第2课时 动物细胞融合技术与单克隆抗体教案 新人教版选择性必修3
- 福建语文中考试题及答案
- 男朋友考试题及答案
- 初级社会统计学(哈尔滨工程大学)知到智慧树章节测试掌握度答案
- 九年级化学下册 第12单元 化学与生活 12.3 有机合成材料教学设计 (新版)新人教版
- 高中语文 第三单元 杂文与随笔 序列写作3 学习反驳教学设计 新人教版必修4
- 高中语文人教版(新课标)必修五访谈教案
- 五年级信息技术下册 第十四课 看世界教案 龙教版
- 智慧修品行家风继世长 教学设计 2025-2026学年高中家庭教育主题班会
- 九年级物理下册 20.3能的转化与能量守恒教案1 (新版)粤教沪版
- 降本质量风险管理制度
- 高中住校申请书
- GB/T 20042.5-2024质子交换膜燃料电池第5部分:膜电极测试方法
- 会议室改造工程施工方案
- 上市公司并购重组典型案例汇编 -16.长电科技要约收购星科金朋
- SF-T0095-2021人身损害与疾病因果关系判定指南
- GB/T 4706.74-2024家用和类似用途电器的安全第74部分:缝纫机的特殊要求
- 外挂悬挑式花篮盘扣脚手架安全专项施工方案7.17
- 医院保洁人员院感培训
- 成都市盐道街中学语文新初一均衡分班试卷
- 诗歌鉴赏方法一及题画诗鉴赏题教学课件
评论
0/150
提交评论