毕业设计(论文)-角色扮演游戏开发.docx_第1页
毕业设计(论文)-角色扮演游戏开发.docx_第2页
毕业设计(论文)-角色扮演游戏开发.docx_第3页
毕业设计(论文)-角色扮演游戏开发.docx_第4页
毕业设计(论文)-角色扮演游戏开发.docx_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

宁夏理工学院毕业设计毕业设计题目名称角色扮演游戏开发学院电气信息工程学院专业计算机科学与技术学生班级学号计科13102班指导教师 35摘要 目前,互联网“+”的全球化,游戏热潮早已经席卷全球,游戏的开发以及维护成为了一个行业,在游戏这个产业中RPG游戏(角色扮演游戏)无疑扮演的是一个至关重要的角色,为适应游戏行业的发展需求而提出本课题。本论文首先对RPG游戏进行概述,粗略的介绍RPG游戏的制作意义及行业发展前景。其次对游戏的开发软件Unity 3D以及开发语言进行简单的介绍。最后对游戏的构思、制作流程、素材、地图、模型、渲染、音效、事件处理、脚本编辑和游戏测试等做了详细阐述,对游戏的开发过程设计思路、构架做了详细的说明以及玩家操作游戏的功能键做了比较详细的介绍。关键词:RPG游戏;Unity 3D;事件处理;脚本编辑全套设计加扣 3012250582AbsractAt present, the Internet + globalization, the game boom has long been sweeping the world, the game development and maintenance has become an industry in the game industry RPG (role-playing game) game is undoubtedly playing a vital role , In order to meet the development needs of the game industry and put forward the subject. This paper first summarizes the RPG game, and introduces the production significance of RPG game and the development prospect of the industry. Second, the game development software Unity 3D and the development language for a brief introduction. Finally, the game concept, production process, material, map, model, rendering, sound effects, event handling, script editing and game testing made a detailed description of the game development process design ideas, the structure of a detailed description and the player operation The games function keys to do a more detailed description.Keywords: RPG game; Unity 3D; event handling; script editing目录摘要IAbsractII1 绪论11.1 什么是RPG游戏11.2 游戏制作的意义11.3 RPG特性11.4 系统要求22 技术支持32.1 PhotoShop32.2 3DsMax32.3 Unity3D简介32.4 脚本语言33 需求分析43.1 功能性需求43.3 场景需求43.3.1 地形43.3.2 Player属性53.3.3 Enemy属性53.4 交互需求63.4.1 任务63.4.2 商店63.4.5 背包73.5 设计可行性74 详细设计94.1 情节94.2 场景94.2.1 场景搭建94.2.2 Lighting104.2.3 场景的加载104.2.4 贴图处理114.2.5 静态模型114.2.6 动态模型124.2.7 音效添加124.3 NPC134.3.1 NPC作用134.3.2 NPC事件134.4 Enemy134.4.1 Enemy分类134.4.2 Enemy攻击值144.4.3 Enemy实例化144.5 Player144.5.1 Player144.5.2 视觉控制154.5.3 Player技能164.5.4 Player等级164.5.5 Player攻击和受伤害164.5.6 Player特效164.5.7 状态转换174.6 系统状态174.6.1 Cursor设置174.6.2 SkyBox设置174.6.3 小地图184.6.4 状态机184.6.5 数据读取194.7 背包系统204.7.1 背包UI204.7.2 背包功能204.8 技能系统204.8.1 技能204.8.2 技能特效214.8.3 HUDText214.9 敌人攻击系统214.9.1 敌人数量214.9.2 敌人伤害224.10 系统设置224.10.1 游戏暂停224.10.2 声音管理224.10.3 游戏退出234.10.4 游戏关于234.11 NGUI234.11.1 NGUI功能234.11.2 事件处理234.12 攻击平衡性234.12.1 命中率234.13 操作帮助244.13.1 系统语言支持244.13.2 输入244.14 三维量244.14.1 坐标系244.14.2 向量255 测试265.1 性能测试265.1.1 物理测试265.1.2 UI测试265.2 行为测试265.2.1 流程265.2.2 正常功能测试275.2.3 异常测试275.2.4 边界测试275.2.5 错误处理测试275.3 平台发布285.4 界面测试286 结论32参考文献33致谢341 绪论硬件的快速更新使得游戏行业在往3D方向发展,早前的2D显示状态并不能满足视觉的享受,随着技术的发展3D游戏尤其是RPG游戏的画面足以满足玩家的对视觉的需求,也是一个开发者对新领域的探索。Unity 3D作为一个综合的全面的开发引擎受到开发员的青睐,此引擎能够一次开发,多平台发布,缩短开发周期,具有强大的内置开发工具和外置插件,就使得发开更加便利。本课题以Unity 3D为工具进行开发,以打怪剧情为背景进行开发出一款适合视觉的3D的RPG游戏,以VisualStuio为脚本开发工具进行独立的制作。1.1 什么是RPG游戏RPG(Role Playing Game),目前对于创新化,3D技术的日益强大给游戏带来了不可估量的发展动力,未来的单机在3D和跨平台性上更为卓越。对于技术成熟化,开发技术成熟和新程序员容易上手。而Unity3D引擎的多平台发布在游戏开发中占据主导地位,也是3D技术最成熟和最容易上手的开发工具。1.2 游戏制作的意义 网络普及的今天,游戏的平台种类多达十余种,游戏种类也是多种各式,太多的人对游戏有依赖的情节,不管是电脑端的页游、端游还是移动端的手游都能成为大众娱乐的方式,游戏的娱乐不仅是为打发时间,还有开阔视野,沉浸其中,给玩家现实世界给不了得激情和刺激,就像有些爱车的人爱玩极品飞车,速度与激情并存,这种以游戏为娱乐的方式也算是一种放松,据研究表明,爱玩游戏还能锻炼一个人的智力,加速大脑的记忆开发,在游戏中学习、在学习中游戏,也似乎一种让人们在工作学习之余,享受游戏的快乐,也是一款游戏真正成功的意义。1.3 RPG特性游戏发展到今天,种类多种多样,想象力超乎想象,各种类型的游戏带个玩家不一样的视觉和虚拟世界的体验感,作为角色扮演类型的游戏,带给玩家最直接的感觉,暴力和有主宰世界的欲望。RPG游戏分门别类很多,大致可分为剧情派、战斗派、自由派三类。多变的游戏内容和剧情的多样性使得游戏情节更加丰富,角色的成长往往也能和玩家产生虚拟的共鸣,沉浸性其中,关卡多样性,特效的丰富性,每次都能有不一样的新鲜感,有充足的想象力强大的UI设计扮演着整个游戏的互动性。各种交互事件错综复杂,可触发也可随机产生事件,尤其是对白,以一种最直接、最平滑的方式表白。它的三个基本特征:沉浸性、互动性和想象性,它们三者之间的关系如图: 图1.1 游戏特性1.4 系统要求系统要求:Windows10x64 bit。运行环境配置:DirectX 11 compatible。CPU处理器:I5 4200U或更好。设备内存:1G。设备显卡:Intel(R)HD Graphics Family显存2 GB或更好。设备硬盘:3 GB。2 技术支持2.1 PhotoShop Adobe Photoshop主要处理以像素所构成的数字图片或位图构成的图像。本课题以此软件为工具进行图片、图像、贴图的处理。2.2 3DsMax它是Autodesk 3DsMax的简称,是拥有强大功能的三维动画制作和模型渲染的软件,它强大的工具集种类繁多类型丰富,可扩展性强,自定义工具栏能有助于团队合作开发,加快速度提高运用此引擎的开发速度,本课题以此软件为工具进行模型、动画、渲染的制作。2.3 Unity3D简介此软件由Unity Technologies开发的一个轻松创建三维视觉的游戏、游戏可视化、实时三维动画等类型交互内容的多平台的综合型游戏开发引擎游戏工具。Unity的视图界面简,游戏对象、脚本、事件、地形简单易懂,并提供了向量等等技术使得开发人员易于理解。此引擎能够一次开发,多平台发布,缩短开发周期更加受到开发人员的青睐。2.4 脚本语言Unity引擎支持多种开发机器语言,目前开发利用最多的语言是由微软开发的Visual Studio C Sharp语言,比起自带的Mono代码编辑器来说,它具有更强的稳定性,开发速度快,容易上手,易学习,本课题的运行平台是Windows,利用此编译器是最佳的选择。3 需求分析3.1 功能性需求本课题采用3D的展现方式,是一个基于Windows平台的单机游戏。游戏分为两个大的部分:地形和UI,目前都已经实现了。地形的搭建为UI的设计做了铺垫,UI有了地形才能更好的展现它的价值,对于整个游戏所实现的的功能如下:图3.1 功能模块图3.3 场景需求3.3.1 地形地形是游戏设计的一个重要部分,一个友好的地形能展现给玩家的最直接的心情感受,3D游戏的视觉场景效果是二维游戏无法与之相比较的,场景搭建和地形设计时要符合现实的比例缩放,有层次的组件场景,即对虚拟场景按照层次结构划组建,模型放置位置合理,理清主次,减少对不必要场景的处理细化,减少运行时渲染对CPU资源的占用,对堆积的模型的种类有又明确的有规律可循的命名,便于见名知义。本课题的场景是中世纪的农场,有房子、草木等地形搭建有关的物体。对于这些导入的资源合理的设置大小在整个农场中所在的位置,比例大小、功能作用等做出合适的调整,如下就是场景的设计图:图3.2 农场俯瞰图3.3.2 Player属性对于一个游戏中最重要的一个Object,Player的各个属性都值的每一个玩家关注。丰富的属性能够增加游戏的乐趣。下图是Player属性图:图3.3 Player属性图3.3.3 Enemy属性对于一个游戏中最重要的是一个Object,Enemy在游戏中扮演者不可缺少的作用,它对于主角的成长、游戏情节的完整有这决定性的作用,对Enemy的设计不像Player复杂如下图的不完整属性需求:图3.4 Enemy属性图3.4 交互需求3.4.1 任务每一个Player都扮演着一个主导的作用,都要通过与其它Object交互获得信息,游戏中的任务是游戏情节设计的必要的环节,通过接受任务获取必需的物品、金币等,如下的任务图:图3.5 任务图3.4.2 商店作为与主角交互的另一个重要的环节商店,在这里可为其提供需要的物品,当然物品的属性也有多种多样的,如治疗药品、攻击兵器、防御穿戴等,这些物品的属性多种各式,加成攻击、血量增加、蓝量增加、穿戴防御等,这些属性与Player的属性相对应,就是为其服务的,如下的商店图:图3.6 商店图3.4.5 背包背包系统,顾名思义就是为了存储Player的存储物品需求而设计的虚拟存储UI系统,能够实现对物品的管理、属性信息显示、使用等功能,为Player的交互提供了便利。如下图的背包系统图:图3.7 背包系统3.5 设计可行性在整体的设计上,首先场景设计可行性,根据所学的建模软件和绘画技术能够在Unity引擎中利用引擎中强大的地形绘制工具绘制生成合理的适用性的地形场景,完成对场景的建立。其次对于Unity引擎的高级使用,通过Unity为开发者提供了Asset store更加方便地学习和交流。因此Unity3D这款软件能够充分实现系统的需求。最后UI的设计设计,利用NGUI的强大功能作为交互的设计,NGUI稳定安全,当然还是以它的易学习,开发快为主。对于整个系统还要做到以下:稳定性:一次开发能够长期运行,不需要后期维护。 简洁性:代码整洁清晰,注释全面,结构明了,逻辑清楚。 易扩展性:一次开发后的框架可对其功能、角色添加。4 详细设计4.1 情节本课题以中世纪农场为场景,村子受到外敌(狼)的入侵,需要有勇敢的勇士拿起手中的剑,保护村民,选择不同的角色控制不同的人物。与不同的NPC互动能够获取任务、金币、药水、武器装备,角色有等级、经验值、生命值、技能值,这些能够使角色获取更高的伤害和防御值,为击杀敌人做好准备并且能获得经验值,提升等级。游戏流程如下:图4.1 游戏流程4.2 场景4.2.1 场景搭建地形绘制依照Unity自带的Terrain工具进行绘制简单的地形,大部分的Game Object由3Ds Max导出Fbx格式的文件在导入到Unity里面进行放置、渲染等,此为静态的Object,如房子、地板,而动态的树木、花草则由Terrain里面的绘制功能进行制作,系统的Wind Zone能产生风的效果使得效果更佳显著,Unity自带的Directional light会产生灯光的效果。进而完成场景的搭建。图4.2 绘制地形工具4.2.2 Lighting为了保证场景的渲染稳定性,节约CPU效率和静态资源的加载速率才使用烘焙提高可执行性,对Object的Lights、Renders、Terrains做出烘焙之后,再次运行的时候,显卡和CPU不需要进行对环境光效果的运算,插值运算是Unity的一个特色,在这个过程中速度非常快,即便实时的计算渲染人眼无法分辨,如果烘焙后,在运行时就能避免在游戏卡顿时出现出现不友好的画面,看起来游戏更加流畅,连续性更加明显,如下的设置是对Scene之间的加载做了预设性的加载。 图4.3 烘焙图4.2.3 场景的加载在Build Setting里面加载Scene的索引,当某个事件触发时,调用方法就可场景跳转,即可实现对场景的加载。图4.4 BuildingSetting图4.2.4 贴图处理贴图处理主要以网上下载和Photoshop制作的为主,进行修改、剪辑再加工处理,剪裁出适合游戏场景需要的贴图。贴图主要以PNG格式为主,利用NGUI插件的Atlas Maker制作图集统一管理。如图:图4.5 AtlasMaker4.2.5 静态模型由3Ds Max导出的Fbx文件再导入到Unity引擎里面的时候贴图和可能会丢失,通过Untiy里面的Texture选项进行引用和修改贴图,某些模型需要添加Box Collier即是添加碰撞体、Rigidbody等设置静态模型的物理属性,再增加灯光渲染显示出更好的视觉效果。对导入的模型的进行位置、旋转、大小的再次调整,添加、设置此Object的Tag便于Object与Object之间的相互引用是可通过这个Tag标签的String串找到要引用的Object,而Layer的概念是设置不同的层次,根据此层可以让摄像机选择不同的层渲染,如小地图的设置,只能看到主角,而其它的看不到,不同的模型有不同的属性参数,可根据需要进行设置。4.2.6 动态模型动态模型主要是Player的动画,虽然NPC也是动态的,只是简单的Idle动画。首先为导入的模型添加Aimation动画,创建有限状态机,在不同状态时可以改变不同的动画状态,如Player的Atack、Death、Cast、Skill -MagicBall等不同状态的动画,还要对Player添加Character Controller,此Component属于控制类型,有模拟控制器的效果它的不同属性用于控制不同的效果。图4.6 动画图4.2.7 音效添加每一个导入Unity引擎的格式为Mp3的音频都是一个Audio Clip,每一个声音片段要想播放需要一个声音源AudioSourse用于加载这个Audio Clip,作为一个3D的游戏,声音有远近不同的大小,作为整个游戏最重要的一部分Main Camera如同一双眼睛,所以还需要在此Component添加一个Audio Listener作为声音的监听器,AudioSource是一个声音源头和AudioListener相当于一个喇叭从而共同协作控制整个声音。4.3 NPC4.3.1 NPC作用NPC在本此课题中可以当作是一个商店和任务系统,在这个游戏中NPC扮演的是一个动态的模型,有简单的Idle动画。游戏中Bar_NPC是一个任务系统,角色可在此接受任务,并获取金币;Shop Drug_Npc是一个药品,可在此购买药品;Shop Weapon_Npc是个武器商店,可在此购买武器装备等。4.3.2 NPC事件事件触发时游戏中最常用的事件判断之一,当检测到鼠标碰到NPC时,就会出发脚本里的鼠标检测OnMouseOver()方法,此时的触发器会出发这个方法,并不会能让此刻方法里面的事件,当点击了鼠标事件后即是Input .GetMouseButtonDown (0)事件成立,弹出该事件面板。4.4 Enemy4.4.1 Enemy分类根据剧情需要,本课题设置了三种Enemy类型的狼,根据大小和攻击力分别为Wol fBaby、Wolf Normal、Wolf Boss, 这三种角色都有7种不同的动画,可分为WolfAttack1、WolfAttack2、WolfIdle、WolfTake Damage1、WolfTake Damage2、Wolf Death、Wolf Walk,让狼有不同的丰富状态。图4.7 动画图4.4.2 Enemy攻击值Enemy的攻击力是根据脚本定义的如下以Wolf Baby的脚本为例分析,State为Idle,Hp为200,Exp为40等等。图4.8 攻击属性图4.4.3 Enemy实例化首先,建立一个Create Empty Object,设置它的坐标,作为一个Spawn用于产生狼,设置一个时间标识位,计数要产生的狼,把狼做成Prefabs,在Update()函数里面实例化GameObject.Instantiate函数会在游戏加载的时候按照帧频率执行,能够实时监测。4.5 Player4.5.1 PlayerPlayer作为一个游戏的主角之一,它由玩家直接控制,是和主角交互最直接、最频繁的角色,当角色模型导入在之后,CharacterController是一个控制器能控制物体的移动属性,Animation动画可根据动画类型加载动画,以便在不同的情景使用不同的动画效果,并把Player做成一个Prefabs,在不同场景中能够节约内存的实例化和加载,添加GameObject的Tag并指定为是Player,添加和设置Layer层次为UI,为了让UI的Camera的渲染出效果。通过控制CharacterController控制器控制移动属性,鼠标点击粒子系统实例化位置,它的动画状态机制,Hero类型、等级、名字、血量、蓝药量、获取经验值、攻击力值、防御值、攻击速度、治疗值、攻击状态、粒子系统、渲染、命中率、未命中率、鼠标锁定事件、UI渲染、事件处理等等,丰富角色的状态。4.5.2 视觉控制Player是整个游戏的主角,也是整个设计的重点,主角的合适3D的视觉控制是一个游戏的亮点。主角的移动控制,首先获取屏幕的某个点,当鼠标点击屏幕时就会产生一个射线,自动检测屏幕上的点,如果这个射线检测到碰到的物体的Tag是TagsC.ground即地面时,获取这个点的坐标Position,并记录下这个点,让主角朝这个点移动,改变状态由Idle动画给成Walk动画,根据记录的点,实例化一个点击特效,这个特效会即是在0.38s内消失,就产生了一个实例化后就消失的状态。Player的移动相对复杂,有很多的条件需要判断,而Player的视觉围绕和视觉跟随就显得简单了。首先视觉的跟随是获取Camera的坐标,在获取Player的坐标,两者的位置差就是一个固定的值,在Update()函数里面,Camera的位置总是有Player的位置加上两者的坐标差,不管Player的位置如果移动,Camera的位置总是跟随Player;其次,视觉的缩放功能,只需要设置Camera和Player插值之间的关系,当滚动鼠标中轮时,根据鼠标中轮返回的值的正负来增大和拉小视觉;最后,要控制Camera的360度旋转,只需要设置Component的Rotate Around()方法,设置其参数,当按下鼠标右键时不松开时,向左或者向右拖动鼠标时Input. GetAxis(Mouse X)就会返回一个正值或者负值,根据这个差量,改变Camera的Transform就能实现视觉的360度移动,同样的在上下移动时Input. GetAxis(Mouse Y)也会返回相同的数值,实现上下视觉的反转,为了考虑不能看到地面以下的视角,这个旋转值会限制在十度和八十度的范围内,这就是视觉的效果。4.5.3 Player技能根据角色不同技能也有所不同,角色是剑士和法师,各属性分别如下:图4.9 技能属性图4.5.4 Player等级Player的等级共有10级,当杀死敌人狼时,角色的Exp的经验值会增加,当Exp达到100%时会自动从零再增加,这时角色的等级就会加一,当加到一定的程度时技能键就可以实现。4.5.5 Player攻击和受伤害当技能解锁以后,不用技能打出来的伤害如果能打中敌人伤害是20,打不中就是0,如果升级是在后,Player的技能就会解锁,用技能伤害就会更高,在购买了武器后伤害就会加成,在Player技能里面做了详细的介绍。对于Player上收到的伤害来说,如果是不同的敌人用不同的技能伤害不同,还有Player的防御力也会有削弱伤害值得效果,总之比较复杂和多变。4.5.6 Player特效一个游戏的特效是非常重要的,本课题中的特效包括声音特效和粒子特效,音效最基本的作用是视觉的真实感,声音都能传达一定含义的想象力,而粒子特效给人更多的脑补的场景,增加画面的渲染力和想象力,给予视觉冲击。对于玩家也是一种玩赏的乐趣。4.5.7 状态转换根据状态可分为HeroType、AttackState、PlayerState都记录在对应的枚举里面。HeroType有两种枚举类型Swordman、Magician和角色有关,用于区分角色,AttackState共有三种枚举类型的状态,对应着不同的状态,分别为Moving、Idle、Attack是角色正常状态的转换,而PlayerState对应着四种枚举类型的状态,对应着不同的转化的动画状态,这些动画状态对应的名的字分别为:HeroType-Death、 HeroType-Control-Walk、HeroType-Normal-Attack、HeroType-Skill-Attack,这四种类型对应着对应的动画控制状态,为状态转化做了准备,也是程序所需要的必须状态。4.6 系统状态4.6.1 Cursor设置Untiy引擎提供了强大的鼠标事件,打开PLayerSettings在Dfault Cursor里面选择一张2D的Texture,即可设置它的默认状态的图标显示状态,这仅仅是简单的设置类型,当Player在不同的状态时会有不同的Cursor显示Texture,首先对Texture做简单的设置,既是Cursor的方法SetCursor进行设置Textrre的类型,二维坐标,显示模式。它的显示控制和角色的状态转换有着必然的联系。图4.10 鼠标箭头图4.6.2 SkyBox设置 SkyBox简称天空盒,是控制摄像机背景的样式的一个Component,用于渲染天空盒的材质,包括6个纹理。这种材质应该用天空盒着色器(Skybox Shader),而每个纹理应该配置适当的全球的方向,有两种选择添加天空盒(Skyboxes)的方式。可以把他们添加到单独的相机(通常是主要的相机),或者通过渲染设置中(Render Settingss)的天空盒材质(Skybox Material)属性来建立一个默认设置的天空盒(Skyboxes)。图4.11 天空盒图4.6.3 小地图首先创建一个Camera作为小地图的“眼睛”,放到合适的位置,在Project面板下创建一个RenderTexture,它能够实时的渲染出一个动态的视觉显示在一张贴图上,有动画的效果,指定Camera的TargetTexture属性,把新建立的RenderTexture赋值给它,此时的Camera就会把照射的视觉显示在一个Texture上,就有了小地图的效果。指定Camera的Layer属性,让它指定渲染曾,可以过滤掉不想渲染的事物,做到有选择性的交互。4.6.4 状态机一个游戏的状体机制简称FSM即是(Finite-Dtate Machine,FSM)的简称,是游戏角色状态的一种合理转换,根据场景的需要,有三种类型的角色,分别为玩家控制的角色、狼、NPC,各有不同的状态,下面对此分别作出分析。对于NPC来说,是一个只有两种状态的状态机之间的状态的转化,有静止到抖动再到静止的状态转化,在本课题中,有三个NPC,它们会在指定的Position点来回摇摆,间隔一段时间后它自己会停止摇摆,保持静止,而后在间隔一段时间后就会再摇摆。图4.12 NPC状态图对于Enemy狼来说它的动作状态有静止、Idle、攻击、行走、死亡这五种,这几种状态之间的转化有些是双向的,有些是单向的,如图所示:图4.13 Enemy状态图对于Player来说是相对比较复杂的状态的转换,由静止、Idle、行走、攻击、技能攻击、死亡这六种状态,这几种状态之间的转化有些是双向的,有些是单向的,如图所示:图4.14 Player状态图4.6.5 数据读取本课题中的UI系统较为复杂,技能、物品以及各种属性种类多且杂,不适合在脚本中定义这些属性值,而且也不利于数据的修改、筛选和新增,为了满足游戏里面的需求,外置文本,只需要对文本进行管理,这种方式对内存的优化、处理速度都起到重要缓解作用,节省了unity引擎对游戏的运行的启动时间。4.7 背包系统4.7.1 背包UI利用NGUI的便利,创建相应的图集、字体集,对UI界面进行布局,给系统添加物品栏,能够购买、介绍、查看物品属性的面板,设置Sprite的属性Tag的设置和编辑,Layer的设置为CameraAnim即是只对Camera所在层进行渲染,给一个精灵添加Buutton脚本,添加BoxCollider碰撞组件,此时的精灵就是一个按钮了,它有个OnClick属性,可为其注册一个Method,就能监听不同的事件,具有了按钮的功能,能够对事件监听、事件处理,添加一个PlaySound脚本,指定其AudioClip就能够播放声音。给Package添加NGUI脚本UI Drag Object,重写OnDragDropRelease方法,能够实现拖拽功能。4.7.2 背包功能背包系统包括药品购买,装备购买、装备穿戴状态更新,UI控制等。药品的显示在Shop面板中,当游戏运行时,对应的物品的Id、Icon、伤害值、价格、作用、属性都会从外部的数据中读取,读取后实例化加载,根据数据的分类读取到不同的脚本中,在商店中点击购买药瓶后输入数量,计算要购买的总价值,首先会和背包中的金币数值比较,如果小于金币数时就能购买,否则不触发事件,此后,就会在背包中的商店面板中显示购买过的物品和数量,这个过程在背包系统中是同步的,利用Upadte函数的实时性检测做到同步,当鼠标放置在物品上面时,触发IsHover的值为真,根据此条件就会显示此物品的属性值,当按下鼠标右键时就可以使用此物品,或穿戴、或恢复发力和血量等等,当物品是药瓶时,右键点击使用就会增加Player的属性值,如果是装备,和药瓶不一样的是它会在另一个装备面板中克隆出一个Icon来显示,在当前面板中消失此Icon,此过程就是物品穿戴的经过,穿戴后,Player的States的属性就会增加,当在另一个装备面板中显示的Icon在鼠标右击就会卸下此物品的信息,卸下后对应的Player的States的属性就会随之更改状态信息。4.8 技能系统4.8.1 技能Player的技能分为普通的打击和技能打击,普通的打击不用玩家控制,只需要在一定的范围内,达到命中率即可打出伤害,而对于技能伤害主要是由UI触发控制的,在释放技能前首先得到该技能需要的蓝量,获得Mp之后,去释放这个技能,这是设计的思路。对于技能伤害的制作来说,它是利用NGUI的强大功能工具栏实例化出一个工具栏NGUITools.AddChild(Grid,GameObject,SkillItemPrefab)创建技能栏,建立合适的Sprite,放置合适的位置,设置技能的等级,根据Player的等级来解锁,如果Player的等级不够,释放技能的功能就不能实现,如果达到等级时,释放技能前先要判断技能栏里面的技能类型,这里分为药和攻击技能,如果是药品,为Player增加相应的MP和HP,如果是技能攻击就切换状态,实例化粒子系统释放特效,根据技能的伤害减少敌人的血量。当然释放技能钱还有判断和设置技能的释放地点、持续时间、声音、消失等,丰富技能多样性。4.8.2 技能特效技能特效是Player是在释放的时候示例化出来的粒子特效,当释放技能的时候就会调用Player的PlayerAttack脚本的UseSkill方法,判断要实例化的特效,这四种状态的形势释放技能:主角活着的时候使用技能、主动地使用技能、鼠标锁定敌人的时候使用技能、被动的释放技能这四种状态,根据这些状态的不同选择不同的特效实例化。Player的特效有六中,分别是CriticalStrike、Heal、BluerHeal、RangeMagic、One-HandQuicken、MageicSpher。首先把这些特效放在一个Dictionary字典集里面,然后从里面选择出需要的进行实例化,这样能够准确而且快速的达到效果。 4.8.3 HUDText它的作用是将Hudtext脚本游戏对象在你的UIRoot和设置要使用的字体。让它跟着一个对象绘制另一个摄像头,将UIFollowtarget对同一对象并设置它的目标。使用Hudtext的函数代码,使用添加新的浮动文本条目。可以调整这个按键的Hudtext脚本,改变文本的运动适合系统的需求。 4.9 敌人攻击系统4.9.1 敌人数量敌人狼分为三种。小狼、正常狼、狼王,跟狼添加脚本对其数量实例化时间,地点进行控制,根据任务量和获取金币的多少在者就是Player的低等级的时候能打死的最大数量而定,小狼的数量为5只最为合适,在程序运行的时候实例化5只,只有当狼的数量减少了才会再次实例化狼的数量,在程序运行中这个数量一直在动态的保持数量的不变,及提高效率,有不会实例化太多的狼。正常的狼伤害高,数量控制在三只,如果这只正常的狼被打死了,它会在五分钟以后再次实例化一只狼,保证了在程序运行中这个数量一直在动态的保持数量的不变。狼王作为一个狼族的头领,它的数量有且仅有一只,它的伤害很高,打击一下就能把没有任何装备和低级技能的Player打死,当狼王死后,它会在五分钟以后再次实例化一只狼王。4.9.2 敌人伤害 添加的三种狼:小狼、正常狼、狼王,各种属性也有所不同。小狼的Hp满血是100点,打死小狼后Player能获得20点的经验值,如果小狼攻击Player会受到10点的攻击伤害,攻击速率为1秒,正常狼的Hp满血是200点,击败它能获得40点的经验值,攻击值是20点,正常攻击速率0.8秒,狼王的Hp满血是1000点,打死狼王后Player能获得100点的经验值,如果狼王攻击Player会受到100点的攻击伤害,攻击速率为0.7秒,受到伤害后会利用HUDText实例化一种特效,闪烁一下红色的样式,表示受到了伤害。4.10 系统设置4.10.1 游戏暂停利用NGUI制作出一个数列的按钮条,当点击暂停按钮时,设置程序的Time.TimeScale的值为零,所有的事件功能都将暂停,但唯独Unity引擎中的Update函数中的不会停止执行,Update的函数会以帧频率的速率快速执行,当触发事件的设置Time.TimeScale的值为1时,游戏恢复正常运行。4.10.2 声音管理对于Unity来说,可支持四种音频的文件的的导入,不同格式的音频用途有所不同,导入后的音频都将作为一个AudioClip来执行,对于本系统来说,播放音频的方法有两种,添加一个AudioSource,同时它也可以对音频做出多种属性设置,适合多中需求的使用,而另一种是利用NGUI插件的PlaySound脚本控制,这种方式简单易控制,调用AudioSource和PlaySound的Play方法和Stop方法都能对音频播放和停止。4.10.3 游戏退出游戏退出的方式很简单,只需要在事件触发时执行Application.Quit()即可退出程序,对于Unity引擎来说,在游戏引擎中执行此方法不会不执行出相应的结果,只有导出时就可以看到立竿见影的效果。4.10.4 游戏关于本课题的以Unity为引擎开发的游戏,目前是以个人名义开发,用于学习不用于商业用途,游戏做大的特点是类似3D端游的风格,以中世纪农场为画风,以保护村民为主要内容进行有情节,利用Unity快速开发制作,目前游戏缺点较多,还在测试修改中。制作单位Copyright 2017/1/19 Mosica_Ldd,文件版本信息5.5.1.8966154,语言只支持英语。4.11 NGUI4.11.1 NGUI功能NGUI是一个外部功能插件,和Unity支持很多功能插件一样,用NGUI做开发,可以节省开发时间,提高开发效率,NGUI能对UI进行设计、系统事件处理,强大的UI系统框架提高了系统额效率,提供更高效的代码执行。4.11.2 事件处理处理结果清晰明了,这些事件处理的处理都在后台完成,所见即所得。只需为其添加相对应的事件行为,不需在编译。可在编辑器中直接创建、更新、修改纹理和图集。内建本地化系统。内建的键盘事件和摇杆控制支持系统。 4.12 攻击平衡性4.12.1 命中率在游戏中决定了攻击对方时被打到的成功率,在本课题中设置攻击和被攻击的最大距离,如果恰巧在在最大的范围的边缘,就要考虑攻击的命中率,此时的判断做出一个可能会命中的计算,利用随机函数随机出一个数字,如果这个数字比比较的数字大,就让此次攻击命不中,当然了与之比较的这个函数的数值也是通过统计学计算得出的符合情景需要的一个数字。这种设计思想对游戏的平衡性做出了合理的决定。 4.13 操作帮助4.13.1 系统语言支持众所周知,Unity引擎对中文的支持性很差,有些在中文状态下是无法执行事件处理的,比如游戏文件路径绝对不能有中文,Import文件的文件名不能有中文等等,而转成英文状态下却没有问题,这就造成了游戏运行的一个没有错误预警的Bug,本系统中只有NGUI插件支持中文输入和显示,支持NGUI的文字都是会显示在UILabel中,就可以支持中文,可扩展性的到提升,对文字的支持行特别好,而NGUI是对UI的深层次设计,很显然,对文字的支持的范围还是仅限至于UI层上面。4.13.2 输入Unity引擎的键盘指令类型有很多类型,可分为键盘指令和鼠标指令。而引擎自带的键盘命令有很多, Ctrl+P运行游戏,Ctrl+Shift+P暂停游戏运行等。如下表的功能键:表4.1 功能键指令按键返回值GetKey任何键TRUEGetKeyDown按下键时TRUEGetKeyUp按下键抬起按键时TRUEGetAxis(Horizontal)左右键TRUEGetAxis(Verical)上下键TRUEGetButton按按钮TRUEGetButtonDown按下按钮TRUEGetButtonUp按下按钮抬起时TRUEGETMOUSEBUTTON(0)按下鼠标中轮TRUEGETMOUSEBUTTON(1)按下鼠标左键TRUEGETMOUSEBUTTON(2)按下鼠标右键TRUE4.14 三维量4.14.1 坐标系坐标系是构成向量的基本表示形式,也是一组或N组向量构成一一对应的关系系统。在Unity引擎中,新建一个Cube,就能看到一个以此物体的中心点为原点的三维坐标系,这是Unity的Editor中显示的本地坐标系是左手坐标系,每一个物体都有一个本地坐标系和世界坐标系,它们都是左手坐标系,通常的是使得x正方向为正右方,y正方向为正上方,z正方向为正前方。4.14.2 向量在虚拟的游戏中场景漫游中,物体运动的各种运动属性都与向量有关,在Unity引擎中每一个有重力Object都有一个大小和方向的量用来表示其大小和收到的重力的方向,这也符合向量的定义既有大小也有方向。Vector3能够计算三维空间中两个位置之间的距离,让游戏对象沿着指定的方向移动,利用三维向量的SqrMagnitude方法来判断目标对象的距离是否小于触发距离,对象从初始点平滑移动到目标点的动画,利用Lerp插值方法模拟太阳升起和落下的过程等等。这些充分体现了三维向量的强大和实用性。5 测试5.1 性能测试5.1.1 物理测试在本课题中分为三大模块:场景、动画和UI,物理测试主要测试场景的射线检测、碰撞模拟、场景效果等等。首先对游戏的整个模型做射线检测,当鼠标点击屏幕时能够通过屏幕上发出的射线点击到地面,当检测到地面时就会触发相应事件。其次碰撞检测是检测当Object与其它的Object在接触时不能穿过对方的这种行为,有自己的重力和摩擦力,模拟出真实世界的效果。最后游戏合理性测试,播放游戏对这个游戏的数据、玩法、设计方式进行检测,做出合理的评估。5.1.2 UI测试本课题的交互主要是由UI所展现的形态得以实现其功能,对UI的测试也是很有必要的,对游戏的贴图检测看是否符合游戏风格,检测按钮事件是否能够执行相应的事件,按钮控制的模型、动画、图集、特效是否能够在相应的时间内做出符合设计的动作,如当声音控制键按下后,声音是否会立即停止,UI控件之间在初始化时是否

温馨提示

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

评论

0/150

提交评论