基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发_第1页
基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发_第2页
基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发_第3页
基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发_第4页
基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

密级:公开 基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发 Design and Development of the RPG Game Named “The fantasy of wind” Based on the Unity3D Game Engine 学 院:信息科学与工程学院专 业 班 级:计算机科学与技术1202班学 号:120405207学 生 姓 名:付 萌指 导 教 师:辛义忠 ( 副教授 ) 2016 年 6 月毕业设计(论文)指导教师审阅意见题目:基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发评语:指导教师: (签字) 年 月 日毕业设计(论文)评阅教师审阅意见题目:基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发评语:评阅教师: (签字) 年 月 日毕业设计(论文)答辩成绩评定计算机科学与技术专业毕业设计(论文)第 答辩委员会于2016 年 6 月 日 审定了计算机科学与技术1202班级 付萌 学生的毕业设计(论文)。设计(论文)题目:基于Unity3D引擎的“风之幻想”角色扮演游戏设计与开发 设计(论文)说明书共 页,设计图纸 张。毕业设计(论文)答辩委员会意见: 成 绩: 专业毕业设计(论文)答辩委员会 主任委员 (签字)摘 要游戏是人们生活中非常重要的一部分,人们使用游戏放松身心,通过游戏获取知识,透过游戏深刻思考。一款优秀的角色扮演游戏不仅仅能够为玩家带来愉悦的身心享受,更加能够为玩家带来一些深刻的内容,而这些内容显然要比长篇累牍的教诲深刻有效。Unity3D是一款专业游戏引擎,因具有其跨平台性能优秀、应用技术范围广、价格合理、易学易用等优点受到欢迎。课题使用Unity3D游戏引擎研究在角色扮演游戏的开发过程中需要使用的技术,并将之应用到课题的游戏设计中,在实践中学习相关技术并最终完成一款功能较为完善的角色扮演单机游戏。使用Unity3D作为引擎制作游戏系统,使用NGUI插件作为2D界面开发工具设计游戏界面,使用C#作为程序设计语言,实现基本的游戏功能和效果,并将游戏发布到PC平台。 在游戏中玩家将控制一名游戏人物在游戏世界中漫游,通过与怪物战斗、完成任务等方式获取奖励,通过购买装备、升级技能、改变设置等等方式强化人物,使之能够与更加强大的怪物进行战斗。游戏玩家通过保护一名村民漫游游戏场景完成游戏的核心任务。论文介绍详细介绍了游戏各项基本功能以及实现游戏各个模块功能时使用的相关技术或者方法,各个模块之间的联系或者调用方式,并给出实现这些功能的部分关键代码。关键词:游戏;Unity3D;游戏引擎;角色扮演游戏 Abstract Games are very important part in peoples life, people use games to relax, get knowledge in games, think deeply through playing. A perfect RPG game can not only make players enjoying it, but also can give players something deep, and this way is much more effective than boring teaching.Unity3D is a professional game engine, as it has strong points such as greate cross platform performance, wide range of application technology, lower price, easy to use, it is popular. The topic use the Unity3D game engine to learn the technology used in RPG designing, and use the technology int the topics game, learn the technology in practice, finally build a comprehensive RPG game.Using Unity3D as the game engine to process our game, using NGUI as the 2D interface develop tool, using C# as the programming language, implementing basic game features, and release the game to the PC platform. In this game, players can control a actor to roam in the scene, get rewards through fighting with monsters, finishing mission. Player can strengthen his actor with getting equips, learning skills or changing settings, make the actor enable to fight against the powerful monsters. Players can complete the core mission of the game by protecting a villager when he is roaming the scene.This paper describes the basic features of the game, the technology or methods which is used to implement the features, the connection and calls between features, and shows some key code of the game to implement the gameplay functions.Keywords: game; Unity3D; game engine; RPGIV 目 录摘 要IAbstractII第1章 引 言11.1 课题的意义11.2 课题内容与目标21.2.1课题主要任务21.2.2 预期目标21.3 国内外发展现状21.4 开发环境3第2章 游戏设计涉及的知识42.1 面向对象程序设计42.2 设计模式42.3 Unity3D相关知识4第3章 游戏场景与场景漫游的设计与实现63.1 设计与实现63.1.1 游戏场景设计63.1.2 人物移动设计63.2 与其它模块的联系8第4章 游戏人物的设计与实现94.1 属性设计与显示94.1.1 人物属性设计94.1.2 游戏主人公属性显示104.1.3 游戏其他单位属性显示124.2 游戏人物动画设置134.3 怪物AI144.4 与其它模块的联系15第5章 游戏技能的设计与实现165.1 被动技能的设计与实现165.1.1 被动技能的公共属性165.1.2 风王结界165.1.3 法力澎湃175.2 主动技能的设计与实现185.2.1 主动技能公有属性185.2.2 化相真如剑195.2.3王者的荣耀225.2.4 凄煌光临弹255.2.5 誓言胜利之剑285.2.6 剑气激荡315.3 游戏技能显示325.4 游戏技能管理355.5与其它模块的联系35第6章 游戏装备的设计与实现366.1装备简介366.1.1 装备通用属性366.1.2 装备技能的使用376.1.3 装备示例396.2装备获取与存放416.2.1 装备获取416.2.2 装备商店436.2.3 装备栏446.3装备合成446.4与其它模块的联系46第7章 其余加成效果的设计与实现477.1药品477.2剑刃与武器507.2.1 剑刃效果507.2.2 武器效果527.3击杀增益效果537.4与其它模块的联系53第8章 游戏剧情的设计与实现548.1 非战斗NPC与任务548.1.1 非战斗NPC548.1.2 游戏任务558.2剧情系统558.3与其它模块的联系56第9章 游戏数据管理579.1游戏存档579.1.1 存档与读档界面579.1.2 存档内容599.1.3文件存储与信息加密609.2其他文件信息619.2.1 传奇内容619.2.2 装备存储629.3与其它模块的联系62第10章 游戏功能设置的设计与实现6310.1系统设置6310.2音频管理6410.3小地图6410.4与其它模块的联系65第11章 游戏测试6611.1技能测试6611.2剑刃效果测试67第12章 结论69参考文献70致 谢72沈阳工业大学本科生毕业设计(论文)第1章 引 言1.1 课题的意义游戏,是人的本能之一。人们通过游戏进行学习,在游戏中思考人生,逐渐形成应对人生各种坎坷的意志。一款优秀的游戏,并不仅仅是给予玩家感官的刺激,更加是陶冶情操,深刻思想,获得知识的良好辅助。因为游戏本身的娱乐性质,可以大大地激发玩家的兴趣,而兴趣是学习的不二法门,所以在游戏过程中,人们并没有对学习产生或多或少的抗拒心理,注意力非常集中,并且能够主动地获取各种知识使得游戏能够更好地进展下去。如果,游戏能够提供具有深刻意义的知识,那么玩家就会很好地将这些知识记忆、理解甚至运用,学习效率会大大提升。游戏,能够承载的内容很多,通过游戏能够表达出来的内容很多,这不仅仅是用来消遣的内容,而是更加深刻的、更加具有表现力的述说。因为玩家在玩游戏的时候的专注,使得游戏中呈现内容能够对玩家带来更大的冲击。一款具有深厚人文背景、游戏性能优秀、具有丰富知识的游戏能够在使得玩家在游戏的过程中潜移默化地学习到很多重要的知识,而这种学习方式是轻松而有效的,其教学性和娱乐性结合使得游戏能够“寓教于乐”1-2。因此,设计优秀的、富于教育意义的游戏,是十分有意义的。程序,不仅仅是代码的组合,更是功能的集合;游戏,不仅仅是游乐的工具;更是思考的媒介、实现的方法、具有表现能力的应用;游戏引擎,不仅仅能够用于制作游戏,更是实现功能的一种手段。人对于游戏的专注和热情,如果能够被应用于其他的领域,能够产生极大的促进作用。游戏引擎因为能够制作具有很好的表现能力的程序,因此应用的领域也不会仅仅局限于游戏本身。游戏程序的应用范围很广,可以对人进行教育和培训,如消防模拟系统和逃生模拟系统的应用3-6;能够帮助科学研究,如可以通过Unity3D的物理引擎制作制作虚拟物理实验7,通过Unity3D的展示效果解决生物学家可视化的挑战8,通过构建虚拟城市帮助城市设计研究9;能够实现如三维变电站监控系统10等等具有现实意义的应用程序。通过游戏表达出来的内容更加容易被玩家接受,因此游戏也是很好的表达思想的方式。一款具有深刻思想内涵的游戏,能够引导游戏玩家进行思考,通过游戏中介绍的知识、游戏剧情、游戏画面、游戏音乐、游戏影像来为游戏玩家展现深刻的精神世界与思考。玩家在玩这类的游戏时,不仅仅是在玩游戏,更加是在与游戏的制作者们做着精神上的交流,并通过游戏知晓道理。真正有意义的游戏也许画面不够细致,也许游戏性能不够完善,但是要有深刻的思想内涵作为为支撑。游戏的发展也不会仅仅局限于图形图像技术、游戏操作媒介、游戏性能、游戏玩法等等,更加是在游戏中所要表达的内容。在这一点上,游戏与优秀的书、音乐、影视作品有着异曲同工之妙。1.2 课题内容与目标1.2.1课题主要任务本课题以Unity3D游戏引擎为基础,结合适当的模型,构建适宜的游戏场景,编写相应的游戏代码对模型进行操控,接收外部各种方式的输入,实现玩家对于游戏的基本操控。设计游戏剧情,游戏UI界面,游戏外部文件等等游戏设计必要内容使得游戏的信息量扩大,可玩性提升,并且随着剧情的编写,一些富有教育意义的知识和思想能够得以渗入,这些都将会用人物对话的方式展现出来。最终完成一款功能较为完善、具有一定可玩性的3D角色扮演游戏。1.2.2 预期目标(1) 完成游戏场景设计,实现人物在场景中的漫游;(2) 完成游戏UI界面制作,实现各个功能界面和界面之间的转换逻辑;(3) 成游戏脚本开发,实现游戏怪物AI、战斗系统、技能系统等游戏功能,为用户提供较为良好的游戏体验。1.3 国内外发展现状游戏的实现效果从无到有,再到华丽,游戏本身也逐渐从2D界面过渡到3D界面,以国产游戏仙剑奇侠传系列为例,第一代和第二代使用的是2D界面;到了第三部,游戏已经转变为3D游戏,但是效果和模型较为简单;第四部很好地改善了模型,效果也有了很大的提升;第五代和第六代逐渐提升游戏效果。值得一提的是仙剑奇侠传六使用的游戏引擎就是课题使用的游戏引擎。RPG游戏,即角色扮演游戏,是游戏玩家最支持的游戏种类之一,游戏制造商也十分愿意开发这类游戏。RPG游戏的玩家扮演游戏中的主人公,代入剧情、进行战斗、完成冒险、品味剧情。随着计算机技术的发展,角色扮演游戏从最初的表现形式仅仅为简单的文字和图形的游戏,发展到现在画面和剧情质量优秀的游戏,能够给予玩家更好的游戏体验。游戏玩家之所以青睐角色扮演游戏,是因为角色扮演游戏能够具有优秀的故事、精美的画面和玩家身临其境的感觉。在游戏过程中表现耐人寻味的故事,通过故事来阐述深刻的道理,这使得角色扮演游戏有着更加深远的发展意义。Unity3D是由Unity Technologies开发的专业游戏引擎11。 Unity3D游戏引擎的跨平台性能非常优秀,能够将游戏发布到诸多平台,例如:Windows、Android、iPhone、Windows phone 8。Unity3D游戏引擎有着入门简单、插件丰富、硬件支持丰富(如可以支持Kinect12)、使用C#和javaScript作为程序设计语言较为简单、强大的跨平台性等等诸多优点,游戏引擎发展迅速。此外,令人可喜的是Unity3D游戏引擎的价格只有约1500 美元13,价格合理,使得Unity3D正在逐渐成为游戏公司和虚拟现实公司的首选引擎。使用Unity3D游戏引擎开发的很多游戏如仙剑奇侠传OL、炉石传说、神庙逃亡2等游戏已经受到了游戏玩家的欢迎。市场对于Unity3D开发人员的需求正在逐渐增加。此外,Unity3D游戏引擎不仅仅可以用于制作游戏,还能够被应用于虚拟现实、增强现实、管理系统、训练系统、教学软件等应用的制作中,这使得Unity3D游戏引擎的应用范围宽广,具有很好的发展前景。1.4 开发环境课题所需的实验条件:PC机:CPU:Intel 酷睿 i3-2350m 2.30GHz 内存:4GB 硬盘:500GB 操作系统:Windows 7开发环境:Unity3D和MonoDevelop运行环境:PC机第2章 游戏设计涉及的知识2.1 面向对象程序设计游戏的设计使用了C#作为主要的程序设计语言14,在游戏设计的过程中大量使用了面向对象的程序设计思想15。面向对象的程序设计具有继承性、多态性和封装性的特点,非常适用于Unity3D的游戏设计。其中,继承性体现在了技能、装备药品等等的不同的类中,这些类都共有一个对应属性的基类,子类通过继承共同的父类或实现共同的接口来获取相同的方法或者调用方法的入口;多态性体现在了动态获取脚本组件中,在获取脚本组件时原本获取到的是父类,通过转换将父类转换为子类进行计算,而所有的子类可以通过调用父类获取得到;封装性是游戏设计中非常有趣味的部分,在游戏设计的过程中,努力做到类仅仅处理这个类所包含的内容,通过类之间的调用方法实现游戏效果。2.2 设计模式设计模式是前人大量编程经验的精华16,在游戏设计过程中大量使用了策略模式,其中最为典型的是剑刃效果。剑刃效果的实现依赖于剑刃效果的算法族,在游戏玩家选择剑刃效果时,即为选定当前使用的算法族群中的一个算法,并在战斗中触发这个效果。Unity3D中的脚本组件的添加与销毁与组合的思想十分类似。如果将游戏模型看成一个类,那么游戏模型上面的脚本即为这个类中包含的其他类的对象。游戏模型通过脚本组件的添加获取新的功能而不是通过大量的继承实现游戏功能的添加。2.3 Unity3D相关知识游戏设计使用的游戏引擎为Unity3D,是一款非常优秀跨平台游戏引擎。在游戏的设计过程中大量使用了Unity3D所提供的功能,如地形系统、导航寻路、粒子系统、物理系统、光照与声音从而实现游戏中丰富的功能和表现效果。(1) 地型系统:应用Unity3D的地形系统和相关的模型设计出游戏场景并实现场景漫游17-22,可以使用NavMesh组件各项选项设置与游戏脚本相结合的方法来实现人物在游戏场景中的自寻路功能23;(2) 动画系统: Unity3D游戏引擎的Legacy动画系统能够实现游戏中的动画的设置,使用Unity3D Animation组件和脚本控制动画的播放24;(3) 物理引擎:Unity3D游戏引擎中内置的physx物理引擎可以模拟物理效果。通过使用刚体、碰撞器、触发器等组件实现游戏中的物理碰撞效果、实现碰撞检测;(4) 粒子系统:通过使用大量微小的游戏物体组合成游戏中所需要的各种特效,使用Unity3D游戏引擎中particle system组件设置并控制粒子系统的效果25; (5) 射线:射线技术应用于3D虚拟世界中的定位和碰撞检测。其原理是从一个点向要一个方向发射无终点的线,当射线在轨迹中与物体发生碰撞,射线停止继续发射。使用这种技术在游戏中实现了定位、选择目标等重要的功能;(6) 协程:即协同程序,在主程序运行的同时进行另一段的逻辑的处理工作,这是基于Unity3D游戏引擎的“伪多线程机制”实现的模拟线程。在游戏的设计中,使用协程控制调用方法进行计算的时间26;(7) 音频剪辑:在Unity3D游戏引擎中导入音效和音乐,通过使用audio listener 和 audio source组件实现背景音乐的播放和音效的播放;(8) NGUI与GUI:Unity3D游戏引擎的NGUI插件提供强大的UI系统和事件通知框架,拥有性能高、使用方便、易扩展的特点。在游戏中使用NGUI制作复杂的2D界面。GUI,即图形用户界面,是Unity3D原生的GUI技术,因其简单易用的特征被游戏设计者使用。第3章 游戏场景与场景漫游的设计与实现3.1 设计与实现游戏场景是游戏必要的基础,游戏主人公、怪物、效果都需要在游戏场景中显示。在这个部分的设计包括游戏场景的设计和人物移动的设计,以保证人物能够进行场景漫游。3.1.1 游戏场景设计 Unity3D游戏引擎内置的地型系统允许手工绘制地型,能够通过使用内置工具创建地型,设置游戏场景的高低起伏和颜色。在场景中可以摆放树木植被,放置建筑物模型,并且进行相关设置。课题所需要的游戏场景使用这种方式进行绘制。绘制完成后对游戏场景进行自动导航烘焙使其能够支持导航组件。完成后的场景的一部分如图3-1所示。图3-1 部分游戏场景3.1.2 人物移动设计本课题使用Unity3D自动寻路组件作为移动判断的依据,编写相关的移动脚本调用自动寻路组件,并使用其相关方法设定目标位置。使用射线与射线撞击的方式进行目标的判断。游戏玩家点击鼠标右键,游戏主摄像机会模拟一条射线发射,同时获取射线命中的单位的相关信息,相关脚本接收到这个信息就可以作出相应的判断并采取不同的动作,不完整的射线碰撞与目标选定的脚本代码作为示例如下:Ray mRay = Camera.main.ScreenPointToRay (Input.mousePosition);/发射射线RaycastHit mHi;/射线命中单位if (Physics.Raycast (mRay, out mHi) /如果命中了一个目标if (mHi.collider .tag = earth|mHi.collider .tag = untagged) /检查标记Vector3 destenation = new Vector3 (mHi .point .x, mHi .point .y, mHi .point .z);/计算位置this.GetComponent ().SetDestination (destenation); /设定位置 /做出相关动作 不同的人物有不同的标记,通过标记可以判断出当前所选择的目标是什么,然后根据这个目标做相应的设置。例如,当目标是地型的时候,移动停止距离为0,而目标是怪物的时候,移动停止距离与人物和怪物的攻击范围有关。当选择了一个目标之后,人物就会面向目标位置,同时向这个目标进行移动。在移动的同时,人物模型就会播放相关移动的动画效果,产生人物“奔跑”向目标的效果,这个效果如图3-2所示。图3-2 游戏人物移动特别地,游戏主人公还有较为特殊的一些移动方式,例如“闪现”、“加速”、“飞行”等等,其中“闪现”、“加速”等移动方式与普通移动方式的原理相同,都是使用自动寻路组件设定目标,然后加速移动或者位移到相应的位置。而“飞行”则使用较为不同的移动方式,在飞行的移动方式下,人物移动无视任何碰撞。这是因为使用了不同的移动代码,这些代码没有对位置的限制。“飞行”的效果如图3-3所示,代码示例如下:this .transform .Translate (Vector3.forward *Time .deltaTime*flySpeed );/向前移动图3-3 游戏人物飞行由于自动寻路组件的限制,游戏人物在移动的过程中受到地型的限制,这些限制包括坡度、高度等,只有在一定值范围内的地型才可以被行走。人物在没有“飞行”时会受到地型的阻碍,移动时会因为障碍物的限制而停止或者绕行。对于某些障碍物,移动是无法跨越的,此时可以使用“跳跃”来进行取消寻路组件的效果并进行强制移动。当“跳跃”结束之后,人物会重新受到寻路组件的限制,如果此时人物进入的不可进入的位置,人物就会再一次强制位移到可移动到的位置。3.2 与其它模块的联系(1) 场景地型是承载模型的载体,所有的可见模型初始位置都在地型上;(2) 怪物AI中的移动也使用自动寻路组件实现,其目标位置由AI给出;(3) 自动寻路组件的使用不仅仅在场景漫游中使用,在部分技能效果中也有。例如击飞特效,其原理就是关闭目标自动寻路组件使其在一段时间无法主动移动,同时强制使目标向上位移;(4) 游戏人物在场景漫游中可能会修改部分属性值。第4章 游戏人物的设计与实现4.1 属性设计与显示4.1.1 人物属性设计游戏人物的属性是游戏人物在游戏中计算的依据,同时也是不同发展方向的表现。游戏人物的升级、购买装备和药品、获取增益和减益效果都是在修改这些属性,使得游戏人物有不同的表现。游戏人物主要属性参数的功能介绍如下:(1) 名字:游戏主人公的名称;(2) 等级:游戏人物的等级;(3) 经验值:当前游戏人物的经验值;(4) 生命值:人物的生命点数,如果耗尽(小于0)人物就会被判定为死亡;(5) 生命上限:人物的生命最大值;(6) 生命偷取:普通攻击的同时能够偷取到的生命值;(7) 生命恢复:每秒的生命恢复值;(8) 生命反噬:法力耗尽的生命反噬百分比,这个伤害针对透支的法力;(9) 法力值:人物当前法力,使用技能消耗,如果透支就会反噬生命;(10) 法力上限:人物的法力最大值;(11) 法力偷取:普通攻击的同时能够偷取到的法力值;(12) 法力回复:每秒的法力恢复值;(13) 物理护甲:针对物理攻击的防御值,有效上限为2000;(14) 魔法抗性:针对魔法攻击的防御值,有效上限为2000;(15) 物理穿透:物理攻击中能够无视物理护甲的值;(16) 法力穿透:魔法攻击中能够无视魔法抗性的值;(17) 物理反伤:受到攻击后回敬给攻击者的物理伤害;(18) 魔法反伤:受到攻击后回敬给攻击者的魔法伤害;(19) 一击必杀率:一击击败对手的几率;(20) 暴击率:造成超常伤害的几率;(21) 暴击伤害倍数:超常伤害对于普通伤害的倍数;(22) 闪避率:闪避掉攻击的几率;(23) 格挡率:格挡攻击,造成即将到来的伤害的真实减免;(24) 格挡伤害减免:发生格挡时能够减免的伤害最大值;(25) 转身速率:人物的转身速度;(26) 移动速度:人物的移动速度;(27) 攻击速度:攻击速度,包括近战动画速度和远程弹矢发射时间间隔;(28) 物理攻击力:人物的物理方面的攻击能力,受到物理护甲的钳制;(29) 法术强度:人物的法术方面的攻击能力,受到魔法抗性的钳制;(30) 生命转化:造成物理伤害时,造成伤害转化为自身生命值的百分比;(31) 法术吸血:造成魔法伤害时,造成伤害转化为自身生命值得百分比;(32) 冷却缩减:技能填充时间的百分比减免;(33) 普攻伤害加成:普通攻击造成伤害时获得的额外伤害百分比;(34) 攻击范围:人物能够进行近战攻击的最大范围;(35) 远程攻击射程:人物能够进行远程攻击的最大范围;(36) 额外护盾:人物的护盾值,可抵挡伤害,上限为最大生命值的40%。4.1.2 游戏主人公属性显示游戏主人公的属性相对于游戏怪物的属性更多,其详细的属性值可以在人物属性面板和GUI属性窗口上得到,如图4-1和图4-2所示。在基本NGUI界面的左侧和下侧也会显示部分关键属性的值,如图4-3所示。同时,玩家可以在游戏窗口中查看由生命值、法力值和护盾值组成的GUI显示信息如图4-4所示。图4-1 游戏人物属性在人物属性面板中显示图4-2 游戏人物属GUI窗体显示游戏人物的属性更新均为实时更新,当游戏人物在某种情况下修改了属性值,这些属性即可在显示面板中显示出来。在这里使用Unity3D的Update方法在每一帧中更新所显示的值。某一个NGUI的Label显示的示例代码如下:void Update ()/每一帧更新this.gameObject .GetComponent ().text = show;/显示内容游戏人物的生命值、护盾值、法力值能够实时显示在屏幕中,能够较为直观显示当前游戏主人公的生命、法力情况。在这里使用的是Unity3D的GUI显示方法。编写脚本创建GUIBox,通过改变GUIBox的长度模拟显示人物当前值占总值的百分比情况。生命值在显示的同时也会表现出不同的颜色,处于优化考虑,生命值显示所使用的颜色仅为4种。使用GUI显示游戏人物生命值百分比的显示效果如图4-4所示,其不完整的示例代码如下:void OnGUI() /GUI方法GUI .BeginGroup (new Rect (c.x - 100, c.y, 200*viewPlas, 100*viewPlas);/建立一个GUI盒子 GUI.Box (new Rect (30, 21, 155*viewPlas, 14*viewPlas), );/背景 GUI.backgroundColor = theHpColors(int)(3*peopleMain.HP /peopleMain .HPmax); /背景颜色重新设置GUI.Box (new Rect (30, 22, 150 * peopleMain .HP / peopleMain .HPmax*viewPlas, 12*viewPlas), , GUIShowStyleForHp); /显示生命值 GUI .EndGroup ();/盒子结束图4-3 部分游戏人物属性在基本界面中显示图4-4 游戏主人公的生命值、法力值和护盾值的GUI显示4.1.3 游戏其他单位属性显示游戏中除了游戏主人公也会有其它的单位,如怪物、木桩等等。玩家可以通过鼠标点击和鼠标悬停两种方式获得这些单位的信息。其使用的方式与上述GUI界面和NGUI界面显示方法相同,选择目标的方式为射线法。其中鼠标悬停时可以或读到的信息可以有两种,其一是只显示生命值百分比和名称,其二是附加一些关键属性的值,其不同的显示结果参见图4-5。使用NGUI显示方法能够显示目标单位的一些关键基本属性,但是由于NGUI显示界面仅有一个,所以在玩家需要频繁获取单位信息的时候灵活性稍有不足,其显示结果可参见图4-6。图4-5 鼠标悬停显示怪物信息图4-6 怪物信息面板4.2 游戏人物动画设置在游戏过程中,游戏人物始终在播放某一个游戏动画效果。每一个游戏人物均有一些不同动作的游戏动画,包括战斗动画、奔跑动画、静止动画和死亡动画,此外拥有特殊的技能的单位也拥有技能的施放动画。游戏人物的动画资源来自于互联网免费资源,游戏设计中没有针对游戏动画进行设计。Unity3D的Animation组件能够实现游戏人物动画的播放,将游戏的动画资源保存到Animation组件的数组中,通过下标或者动画的名字访问并播放动画。在游戏中利用Animation组件播放动画如图4-7所示。图4-7 以游戏人物奔跑动画效果游戏人物动画播放由能够播放动画的游戏单位上面的脚本与Animation组件完成。游戏主人公的动画播放控制代码与其自动寻路代码结合,而怪物的动画控制代码与怪物的AI结合。值得注意的是,游戏人物的战斗过程即为动画播放的过程,在人物播放攻击动画的同时进行碰撞检测,从而实现攻击命中的判断,为接下来的属性改变计算做准备。使用字符串对不同的游戏动画进行区分,根据游戏人物的状态获取应播放的动画名称,传入动画名称进行播放和动画切换。游戏人物动画播放的示例代码如下:if(isJumping) /判断状态NowPlayAnimationName = jumpAnimationName;/修改应播放动画名称/其他工作playerMode .animation .Play (NowPlayAnimationName);播放动画4.3 怪物AI游戏中由计算机控制的怪物的AI是不可或缺的游戏组成部分。游戏中的AI能够控制具有AI的怪物进行自主的行为控制和状态转换25,达到游戏玩家与计算机之间更好的游戏效果。游戏AI实现了怪物对游戏主人公的侦查、追击和攻击。其具体的工作流程为:当游戏主人公进入怪物的侦查范围,怪物会面向游戏主人公,但是不会追击;当游戏主人公进入了怪物的追击范围,怪物就会追击;当游戏主人公被追至怪物的攻击范围,怪物就会停止追击并进行攻击。当游戏主人公逃离怪物的侦查范围,怪物就会丢失目标,进入随机动作状态,即初始状态。其中,怪物在侦查时对不同目标有计算的优先等级差异:怪物最优先攻击游戏主人公的召唤物,其次是游戏主人公本身,最后是游戏主人公所要保护的对象。AI侦查的实现中使用了相交球的方法,检测身边所有的模型,从中筛选AI能够进行攻击的目标种类,最后根据优先级进行取舍,确定AI的目标。确定AI的目标之后,怪物就会进行思考。根据怪物与目标之间的距离做出追击、攻击等等不同的动作。其示例代码如下:/判断敌人与主角之间的距离float distance = Vector3.Distance(player.transform.position,this.transform.position);if(distance = runAfterDistance)if(distance attackDistance)/攻击animation .Play(AttackAnimaName);else/继续追击else/停止追击当怪物的目标逃离怪物的侦查范围或者怪物的目标被击败,怪物就会丢失目标,重新进入侦查状态,在侦查到一个新的目标之前,怪物就会随机做出一些动作,如奔跑和攻击动作等等。此外,在怪物丢失目标的状态下,怪物的移动速度很低,不会离开自身所在位置一定范围很远。怪物不会随时随地进行侦查,只有在目标丢失的情况下才会进行侦查。两次侦查之间有一定的时间间隔,且时间间隔与怪物的等级有关。换言之,高等级的怪物很难偷袭而低等级的怪物比较容易偷袭成功。此外,怪物的追击范围和攻击范围并不统一,尤其是攻击范围与怪物本身的攻击范围有关。4.4 与其它模块的联系(1) 这个部分介绍了游戏人物的属性和游戏人物属性的显示。这些属性在游戏的主体即游戏战斗部分会得到大量的更新;(2) 在场景漫游的特定情况下也会修改游戏人物的属性值,例如人物跳跃的时候撞在墙上就会削减生命值;(3) 在特定技能生效的情况下游戏人物的动画在一定时间内不受玩家控制;(4) 怪物AI调用怪物的自动寻路组件确定怪物的移动目标。第5章 游戏技能的设计与实现游戏技能是游戏设计中重要的部分,玩家使用技能在战斗中产生不同的战斗效果。课题中,游戏的技能分为两种,被动技能和主动技能。被动技能无需使用快捷键,计算机自动触发和执行技能的效果。主动技能为玩家主动使用的技能,通过点击技能快捷键使用相对应的技能。主动技能的设计要比起被动技能更加复杂,其关联的游戏技能管理单元和显示界面内容更多。5.1 被动技能的设计与实现游戏的被动技能效果是通过计算机计算得出的,玩家无法主动使用,这一类的技能设计难度较为简单。在游戏设计的过程中,将不同被动技能设计为预设物,通过改变预设物即可修改人物的被动技能。被动技能的实现原理是通过被动技能脚本实时检测游戏人物的属性值,根据属性值计算得出相应的技能结果。在设计过程中制作了不同了被动技能预设物,这些技能均有不同的实现脚本,在这里介绍两个被动技能作为示例。5.1.1 被动技能的公共属性被动技能虽然功能各不相同,触发方式多种多样,但是仍有一些共有属性,陈列如下:(1) 技能名称:这个技能的名称;(2) 技能贴图名称:技能显示在NGUI界面中的图片,对应图集中图片名称;(3) 设置位置:被动技能生效位置,如身体、武器等;(4) 脚本名称:被动技能的脚本名称,使得脚本能够动态添加或销毁;(5) 技能特效:允许为空,为技能生效时显示的特效效果。5.1.2 风王结界这是一个护盾类型游戏被动技能,其在游戏中的功能为“获得一个吸收最大生命值7.5%伤害的护盾,护盾被击破之后进入冷却期,冷却结束后刷新护盾值上限,冷却时间25秒。如果10秒内没有受到攻击,护盾会修复,但不会刷新上限值。”,被动技能生效时的效果如图5-1所示。图5-1 被动技能“风王结界”存在时的效果这个被动技能的实现需要两个脚本,即护盾脚本和检测脚本。护盾脚本用于检测人物护盾受到的伤害,当这个伤害超过自身护盾值时,判断进入冷却时间;检测脚本负责实时检测护盾是否被击破,并完成冷却时间的计算。其中,判断护盾所受到的伤害利用了统计模块的伤害统计数值,这个值为公有静态值,在护盾脚本中实时检测,当收到的伤害总值比护盾生成时收到的伤害总值与护盾值总和高,则认为这个技能的护盾已经破裂,需要进入冷却时期。判断是否受到攻击的方法为简单的碰撞检测,如果在一定时间长度没有受到来自怪物武器的碰撞,则视为没有受到攻击。其碰撞检测的示例代码如下:void OnCollisionEnter(Collision collisioner)/碰撞检测方法,事件处理程序if (collisioner.gameObject .tag = monsterweapon)/如果碰撞物是怪物武器/刷新等待时间5.1.3 法力澎湃这是一个回复类型的技能,其在游戏中的功能为“回复1%最大法力值/5秒。”技能效果简单,为每隔5秒钟回复最大法力值的1%。在这里为了防止卡顿,没有使用协程,而是使用数值和简单的计数器实现。计数器的实现代码在游戏中被大量的使用,其示例代码如下:timer -= Time .deltaTime;/减少一定的时间值if (timer 0) /到达一定时间timer =timerBasic ;/更新时间值 /做相关的工作5.2 主动技能的设计与实现游戏技能的设计是游戏设计过程中最为复杂和精彩的部分之一,每一个主动技能都包含了很多不同的效果,经历了大量的测试和修改最终成型。游戏中的主动技能被制作成为预设物,被管理在游戏人物的技能数组中,其位置和内容可以随意改变,这为游戏开发提供了很好的可修改性,当一个新的技能被制作完成之后,只需要替换相应位置的技能预设物既可以替换技能。5.2.1 主动技能公有属性游戏主动技能比起游戏被动技能较为复杂,每一个技能都有不同的实现方法,所使用的脚本也不相同。但是所有的游戏主动技能均继承自游戏主动技能基类,其中包含了游戏技能共有的大量属性,介绍如下:(1) 技能名称:这个技能的名称;(2) 贴图名称:技能显示的图片名称,对应图集中的图片名称;(3) 技能基本介绍:技能的简略信息介绍;(4) 范围类型:技能影响范围,如直线、圆形范围、圆形范围选择等等;(5) 作用范围:技能的影响范围;(6) 技能等级:当前技能的等级;(7) 技能等级上限:技能最大等级;(8) 法力消耗:使用技能时消耗的基础法力值;(9) 法力消耗等级提升:法力消耗随等级提升增加的值;(10) 初始物理效果:技能生效时的固定物理加成;(11) 初始物理效果等级提升:初始物理效果随等级提升增加的值;(12) 物理攻击力加成:技能生效时针对物理攻击力的加成;(13) 物理攻击力加成等级提升:物理攻击力加成随等级提升增加的值;(14) 初始魔法效果:技能生效时的固定魔法加成;(15) 初始魔法效果等级提升:初始魔法效果随等级提升增加的值;(16) 法术强度加成:技能生效时针对法术强度的加成;(17) 法术强度加成等级提升:法术强度加成随等级提升的值;(18) 冷却时间:两次使用本技能所需要的时间间隔;(19) 持续时间:技能生效时间长度;(20) 持续时间等级提升:持续时间随技能等级提升增加的值;(21) 音效:使用技能是播放的音频剪辑;(22) 技能显示按键:技能对应的NGUI界面显示按钮。除以上这些技能最基本的属性之外,每一个技能还会有更多技能专有的属性,这些属性将会在介绍这些技能时介绍。5.2.2 化相真如剑游戏技能“化相真如剑”是游戏中非常实用的物理攻击技能,其主要的功能是对单体对手造成削弱和伤害或者对一条直线上的对手造成伤害。技能的介绍如图5-2所示。图5-2 主动技能“化相真如剑”的技能介绍如介绍所示,这个技能可以分为两个部分。第一部分是近战攻击,造成护甲削弱和持续伤害的效果,这个技能效果可以大幅度削弱拥有高护甲和高生命恢复的目标,并且近战攻击效果支持暴击和剑刃效果,能够随着暴击的发生大幅增加技能伤害。技能近战效果如图5-3所示。技能的第二部分是一个伤害递减的直线攻击,虽然附加攻击特效如剑刃效果,但是不支持暴击,也不会为目标附加护甲削减和持续伤害的效果。直线攻击的射程很远,适合一次性攻击大量的目标或者对目标进行骚扰。近战攻击转直线攻击需要消耗额外的法力值,这个法力值与激活近战攻击效果消耗的法力值有关。直线攻击效果如图5-4所示。“化相真如剑”的实现过程中应用到了很多典型的实现方法,技能的实现包括4个部分:技能使用部分、近战攻击部分、目标削弱部分和直线攻击弹矢部分。图5-3 主动技能“化相真如剑”的近战攻击效果图5-4 主动技能“化相真如剑”的弹矢效果技能使用部分是玩家使用技能时调用的部分,当玩家按下技能快捷键时调用技能使用方法。这里包含技能能否使用的判断、使用技能的法力消耗、技能效果的显示等诸多细节。近战攻击部分的实现由一个附着在游戏主人公武器上面的脚本实现。当人物武器命中一个目标时,将这个目标同样视为这个技能攻击的目标,并附加目标削弱部分的脚本。游戏设计中大量使用了动态添加脚本的方法实现不同效果的独立计算和销毁。可以通过在附加脚本之后修改对应脚本属性值的方法对脚本进行设置,使这些脚本更加富有多变性。值得注意的是,这些设置会在脚本初始化之前完成。动态添加脚本示例代码如下:sword .AddComponent(swordBuff);/添加脚本sword .GetComponent ().effect =this.effect ;/修改属性目标削弱部分是一个脚本,在脚本初始化的同时削减目标护甲,同时在脚本销毁

温馨提示

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

评论

0/150

提交评论