为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于Unity3D的跨平台格斗游戏设计毕业论文

2018-01-18 36页 doc 300KB 395阅读

用户头像

is_637320

暂无简介

举报
基于Unity3D的跨平台格斗游戏设计毕业论文基于Unity3D的跨平台格斗游戏设计毕业论文 基于Unity3D的跨平台格斗游戏设计 摘要:随着科技的发展,网络的普及,电子产品的普遍流行,游戏显然已经成为人们的主 要娱乐方式之一。生活节奏的加快使得人们不能再像以前那样坐在电脑前玩游戏,便于携 带是手机的主要特点,手游也成为当前最热门的游戏方式之一。于此同时,Unity3D的异 军突起,使手机游戏开发多了一个方向,更方便、更快捷、更加人性化的研发方式使得 Unity3D成为当前主流的游戏开发引擎。手机硬件性能越来越强大,使得3D游戏在手机中 得以实现。近年来,越来越多的...
基于Unity3D的跨平台格斗游戏设计毕业论文
基于Unity3D的跨平台格斗游戏设计毕业论文 基于Unity3D的跨平台格斗游戏设计 摘要:随着科技的发展,网络的普及,电子产品的普遍流行,游戏显然已经成为人们的主 要娱乐方式之一。生活节奏的加快使得人们不能再像以前那样坐在电脑前玩游戏,便于携 带是手机的主要特点,手游也成为当前最热门的游戏方式之一。于此同时,Unity3D的异 军突起,使手机游戏开发多了一个方向,更方便、更快捷、更加人性化的研发方式使得 Unity3D成为当前主流的游戏开发引擎。手机硬件性能越来越强大,使得3D游戏在手机中 得以实现。近年来,越来越多的3D游戏出现在手机屏幕上,其中不乏优秀的作品。本次 毕设在前人的基础上进行学习研究,深入了解Unity3D及C#编程语言,进行3D格斗游戏 的开发。本文列出了3D格斗游戏的一些功能点、关键技术,详细阐述了游戏的设计过程。 关键词:Unity3D,手机游戏开发,C#编程语言,3D格斗 Abstract:With the development of science and technology, the popularity of the network and electronic oducts , the game has apparently become one of the main forms of entertainment for people. The accelerating rhythm of life so that people can no longer sit in front of the computer to play games, portability is the main feature of the phone, Mobile phone Game has become one of the most popular games. At the same time, the emergence of Unity3D , let the mobile hone game pment in one direction, more convenient, more efficient more humane development approach makes Unity3D become the mainstream game development engine. Mobile phone hardware performance is more and more strong, the 3D can be achieved in the mobile phone game. In recent years, more and more 3D games on the mobile phone screen, many of whom are excellent works. The graduation design is studied on the basic of previous, in-depth understanding of the Unity3D and the C# programming language, 3D development of fighting games. This is a list of some functions, the key technologies of 3D fighting game, described in detail the design process of the game. Keywords:Unity3D,mobile phone game development, C# programming language,3D fight I 目录 一、绪论 .............................................................................. 1 (一) 手游的发展 .......................................................... 1 (二) 研究目的及意义 ...................................................... 1 (三) 论文 ..................................................................... 1 二、游戏开发环境 ..................................................................... 3 (一) Unity3D游戏引擎 ..................................................... 3 (二) NGUI ............................................................... 7 三、游戏需求分析 ..................................................................... 9 (一) 游戏基本介绍 ........................................................ 9 (二) 需求分析 ............................................................ 9 (三) 场景模型的搭建 ..................................................... 10 (四) 人物动作说明 ....................................................... 12 (五) 游戏镜头控制 ....................................................... 14 (六) 加载界面 ........................................................... 14 四、游戏设计实现 .................................................................... 15 (一) 各系统界面分析 ..................................................... 15 1. 登录界面 ......................................................... 15 2. 游戏主界面 ....................................................... 16 3. 关卡选择界面 ..................................................... 18 (二) 战斗系统 ........................................................... 21 五、游戏测试 ........................................................................ 26 六、总结与展望 ...................................................................... 28 (一) 总结 ............................................................... 28 (二) 展望 ............................................................... 28 致谢 ................................................................. 错误~未定义签。 参考文献 ............................................................. 错误~未定义书签。 II 一、 绪论 (一) 手游的发展 手游即手机上的游戏。随着移动互联网时代的到来,如今,手机除了满足大家发短信、通电话的基本需求外,玩游戏早已成为手机最重要的功能之一。手游早期为简单的文字游戏,随着手机像素、运行效率的提高,一些具备了简单彩色图形的手游开始面向用户,这类游戏大多使用JAVA语言编写实现,不论是画面,还是玩法都比上一个代提升了许多,然后是近几年的app应用,例如N-Gage, N-Gage是诺基亚在那个时代所研发的手游平台,但是由于移动网络无法很好的支持手游下载、支付渠道也稀少而复杂,N-Gage始终没能大红大紫。Android和IOS的兴起,手机在其本质工作几乎毫无进化的几年之间却在其余几乎每个领域发生了翻天覆地的变化,最简单并且最直观的一点表现就是性能参数了,手机性能参数的提高增加了应用的安装数量及功能,在这之中,手游获得的增益很大。 门槛低,投入小,回报大,是手游的主要优势,这也使很多游戏开发商纷纷转型手机游戏的开发。随着手机游戏市场的日渐升温,手游已经开始主导着整个移动互联网的发展,千万级用户,千万级收入已经不再是空话,手机行业的发展极大推动了手游的发展。近年来,手游更是有了质的飞跃,在手机行业跨越式的发展下,手机系统再也不是当年NOKIA的塞班系统, iPhone的诞生,及其开创的触屏潮流,不仅革新了用户操作手机的体验,而且也使手游脱离了物理键盘的局限,有了除“上下左右”之外的新的玩法。后来谷歌研发的安卓手机系统诞生,触屏智能更加便捷,得到了很快的普及,谷歌市场也出现了各种各样的安卓游戏,随后的几年安卓手游成疯狂的趋势增持。 (二) 研究目的及意义 小时候接触的小霸王游戏机,当时街霸对打、忍者神龟系列、刀侍等格斗游戏就非常火,此类游戏的受益群众非常多。再加上手机性能的提高,3D格斗游戏在手机上也越来越流畅,格斗游戏在以后将非常有优势。 相对页游、端游来说,手游开发在当前游戏领域还算比较少,可探索的区域还有很多,比如前一段时间挂机游戏能火也是出乎意料的结果。生活节奏的加快,碎片化的时间模式推动玩家朝手游方向靠拢,并且当前正值手机领域高速发展,这提供给玩家一个很好的游戏载体,这一机遇迫使部分游戏开发商纷纷投身手游开发,游戏行业即将掀起一场手游风暴。 (三) 论文架构 第1 页 本文共六个章节内容,主要介绍一款游戏从刚开始构思到开发完成的整个过程。 1. 第一章:绪论,简要介绍了手机游戏的发展历史,本课题的研究目的和意义。 2. 第二章:游戏开发环境,详细介绍了本次毕设的开发引擎-Unity3D界面的使用,并且 就UI界面的设计做详细的说明。 3. 第三章:游戏需求分析,列举了游戏中的一些需求点,并对游戏中出现的一些相关技 术进行说明。 4. 第四章:游戏设计实现,列举游戏中比较重要的几个系统(登陆界面、游戏主界面、 关卡选择界面、战斗系统),对其功能的实现进行脚本的说明。 5. 第五章:游戏测试,游戏项目完成后,对游戏进行测试,并提供测试数据。 6. 第六章:总结与展望,根据本毕设的开发现状,作总结与展望。 第2 页 二、 游戏开发环境 (一) Unity3D游戏引擎 [1]Unity3D是一款集三维视频游戏、建筑可视化、实时三维动画于一身的专业游戏引擎,其多平台性表现在它可将已完成的游戏项目打包成Windows、Mac、Wii、iPhone、Windows phone 8和Android等多种平台所对应的文件格式。具有高度优化的图形渲染管道和内建的NVIDIA PhysX物理引擎,使其能够较为真实地模拟3D物体的运动和碰撞。对DirectX和0penGL拥有高度优化的图形渲染管道,使其能够比较真实、清晰的显示各种材质、贴图。它支持大部分主要的文件格式,并能和大部分相关应用程序协同工作,使用者不再需要使用其他转换格式的软件,用起来更加方便快捷。Unity3D能够对编辑器、跨平台发布、地形编辑、着色器、脚本、网络、物理、版本控制等进行全面整合,优化使用界面,降低操作重复性,提高操作效率。这些都使Unity3D成为独一无二的游戏引擎。关于Unity3D的使用,需要了解以下几个方面的内容: 1. 主界面视图 Unity3D界面上方为菜单栏,所有功能都可以在菜单栏中找到。菜单栏下方为具有各种功能的窗口,负责游戏项目的大部分操作,可将部分用得相对频繁的窗口单独拖出来放在外面,方便使用。Hierarchy窗口、Project窗口、Console窗口、inspector窗口、Scene窗口和Game窗口为主要的窗口,具体如图2-1所示: 2-1 Unity3D主界面 (1) Hierarchy窗口主要用于放置Gameobject,可以对Gameobject进行选中、重命名、拖 动分层、添加组件等操作,并且Hierarchy的所有内容都会在scence窗口中显示出来。 第3 页 (2) Project窗口为项目工程的文件入口,游戏项目的所有文件都可以在project中找到, 进行资源替换、查找都要在这个窗口下操作。 (3) Console窗口为一个指令提示窗口,项目运行的各种情况都会在这边以CSharp语言的 形式显示出来,包括错误、警告、运行成功等,通过查看此窗口,可以轻松找出报错 的根源。 (4) Inspector窗口为Gameobject的编辑窗口,包括Gameobject的坐标、大小、附加控件 及添加脚本等,一个Gameobject对应一个inspector,默认显示被选中的Gameobject 的inspector窗口。 (5) Scene窗口真实地显示Hierarchy窗口中Gameobject的样式和Tranform位置,可对 Gameobject进行选中、拖动、旋转等操作。 (6) Game窗口为运行项目时所呈现出来的真实游戏效果,为映入屏幕的画面。 2. Gameobject Gameobject就是一个容器,Unity3D中的任何组件、目标、模型都必须用Gameobject来承载,它可以是一张图片、一段单一的文字、或是一个简单的模型,取决于你给它添加什么内容。从Unity3D菜单栏的“Gameobject”中可以轻松创建一个空的Gameobject,快捷键ctrl+shift+N比较常用。如在一个空的Gameobject中添加一个Directional light(单向灯光控件),则此Gameobject就是个灯光,可在inspector窗口编辑。Gameobject支持重命名功能,使开发者能一眼就看出Gameobject内的内容,提升工作效率,Gameobject还可以嵌套子Gameobject,方便进行资源的整合。 3. Tranform(坐标)的理解 如下图inpector窗口中的Tranfrom所示,Gameobject的坐标包含“P”“R”“S”三个坐标,“P”即position,为Gameobject的位置坐标,用于控制目标的方位信息。“R”即rotate,为Gameobject的旋转坐标,调节P坐标将使目标作出相应转向。例如将上面提到的单向灯光的Tranform“R”中的X坐标从0改成90,则此灯光从横向灯变成纵向灯。“S”即scale,为Gameobject的大小坐标,控制目标的大小尺寸,x、y、z对应Gameobject的长宽高。一个Gameobject至少包含一个tranform,有且仅有一个tranform。 第4 页 2-2 Gameobject中的tranform 4. 脚本系统 [2]Unity3D提供强大的脚本系统,支持java script、C# script、boo script语言,本次毕设用的是C#语言,如需要让某些Gameobject实现特定功能,可通过编写C#脚本,保存起来,并将脚本拖动到Gameobject所对应的inspector窗口,这样该Gameobject就具有脚本所描述的功能。 2-3 Unity3D中的脚本文件 C#也叫做C Sharp,是一种面向对象的程序设计语言,它继承了C和C++的强大功能,并简化了C和C++的一些复杂特性,使其成为当前.NET开发的首选语言。因为它强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程,使其成为系统开发和应用开发的最佳使用语言。 5. Unity3D文件 在Unity3D中的Gameobject文件,均被保存为后缀为.perfebs文件,也是Unity3D可读取识别的文件。 做游戏项目资源是必不可少的,Unity3D自带的资源也是有限的,例如一些Unity3D [3]里面没有的贴图、材质、animation动画等资源,需要通过其他途径查找,然后导入到Unity3D中使其变成可用元素。Unity3D也支持自制animation动画,在Unity3D菜单栏的“windows”中选择animation窗口进行动画的自制,将animation动画挂在Gameobject上 第5 页 可实现Gameobject的位移、放大缩小、渐变或其他更高级的效果。 2-4 animation制作工具 游戏中的各种图标Texture文件需要制作成Atlas图集的形式,Unity3D提供atlas maker工具,将想要的图标素材导入到Unity3D中,然后利用atlas maker工具将素材更新到所需要的图集里。 2-5 atlas maker界面 6. Camera(镜头) 正如电影导演手中的摄像机将故事呈现给观众一样,Unity3D中的Camera用于将游戏画面呈现给玩家,即Game窗口中的内容。一个视图中至少应该放置一个镜头,否则呈现出来的画面只会是一片漆黑。镜头的放置位置也决定了游戏体验,镜头应尽量放置在能看清整个场景的位置,距离适中,太近的镜头视距太短看不到远方的路障,太远的镜头看不清前方的物体,影响游戏体验。Unity3D中新建的工程都有提供一个main camera镜头。另外,可以给镜头添加一些功能,如animation动画,在镜头上添加具有短位移的animation 第6 页 动画可以使其抖动。 (二) NGUI NGUI为Unity3D的一款界面UI设计插件,使用NGUI可以轻松完成大部分2D界面设计,下面是NGUI的一些基础控件及关键点: 1. Sprite(图片):如果要将一张图片放在界面中,需要选中一个Gameobject,然后添加UIsprite 脚本(或直接使用NGUI创建一个sprite控件),该对象的inspector窗口中即出现sprite 控件栏。如图1-2所示,点击Atlas选择图集,后面为选择图集的具体图片。 2-6 UISprite脚本界面 2. Label(文本框):使用UIlabel脚本在界面中添加文字,文字颜色、大小、位置均可自己控 制,如图2-7所示: 2-7 UILabel脚本界面 3. Button(按钮):其实Button控件是由sprite、label和collider碰撞器组合而成的,应该包 含一个父Gameobject,和三个子Gameobject。Collider为碰撞器,用于响应外界对此块 区域的操作。当点击此块区域时,将执行某些处理,可由脚本控制。这三个也可全部 放在一个Gameobject中,但是,这样做的缺点就是他们共用一个tranform,复用性不 强。 第7 页 4. Tween(动画):即动画效果,包含颜色变化、大小变化、旋转变化、深浅变化等,类似 animation动画,差别在于tween为写死的动画,没法像animation动画那样自由调节。 可挂在任何对象上,并且需要选择如何触发此动画。如点击一下Button触发顶部按钮 由透明变成正常颜色,这样就实现了简单的Tween动画功能。 5. Depth(深度):界面为2D界面,没法避免窗口、图片重叠的现象,depth可以有效的将各 个Gameobject分层处理。Depth值越低代表此物体越底层,将被depth值比他高的 Gameobject遮挡住。 6. NGUI还提供一些例如滑动条、输入框、下拉栏等更高级的控件,在本文不涉及到,在 这里不做阐述。 第8 页 三、 游戏需求分析 (一) 游戏基本介绍 本毕设为一款使用Unity3D引擎制作实现的3D格斗游戏,脚本使用C#编程语言编写,主角为大家耳熟能详的钢铁侠,游戏整体风格偏机甲类,主要玩法即格斗。 3-1 战斗界面 战斗界面如图3-1所示,玩家通过控制界面左侧的方向键(已隐藏)进行主角前后左右的移动,通过点击右边的攻击键实施攻击。游戏将给玩家带来超炫的格斗动作,逼真的打击感,通过较为真实的打击感,让玩家在游戏中感受快乐。 (二) 需求分析 [4]设计游戏之前需要对游戏进行全面的需求分析,明确设计方向,然后写游戏的设计,界面设计及一些功能性的东西可以参考市面上比较热门的游戏的做法,游戏将依据此份说明书进行设计。说明书应该包含游戏各个界面的介绍、每个按钮功能、以及游戏中每一步操作对应的响应方式。 需求分析完需要构建游戏的系统框架,使用导图的方式将游戏的各个系统、模块一目了然的呈现出来。如图3-2所示,利用MVC框架将游戏的各个系统界面联系起来。 第9 页 3-2 游戏系统框架 (三) 场景模型的搭建 一个可用的场景模型包含两个方面的属性,一方面是模型,另一方面是阻挡。单纯从可用性来说模型一点用处都没有,但是为了让玩家知道哪边可以踩、哪边是墙壁、哪边会产生碰撞,就必须设置模型。阻挡用于限制玩家的活动区域,也就是配合模型来使用的。可以说,没有阻挡的模型是不可用的,没有模型的阻挡是不具生命力的,两者密不可分。 第10 页 3-3 一个模型所包含的内容 如图3-3所示,inspector窗口中Cube(Mesh Filter)为模型组件,Box Collider为阻挡碰撞器,Center为此碰撞器的坐标位置,Size为碰撞器尺寸。Mesh Renderer是材质组件,用于帮模型添加材质、贴图。 3-4 较为成形的场景模型 1. 模型 众所周知,点成线,线成面,面成体。模型由面组合而成,模型的制作可通过3DSMAX等建模软件实现,面数越多的模型越精致,但是对系统性能的要求也越高。游戏画面是由计算机CUP和GPU实时处理演算出来的图像,面数越多对GPU的压力越大,易导致游戏画面卡,运行不流畅等情况,所以尽量选择低面数模型、优化所用模型材质能够大幅提高游戏性能。 Unity3D提供一些简单的3D模型供玩家使用,如正方体、球体、圆柱体等多种模型,实际上,他们是属于添加了模型组件的Gameobject,这些模型可用于当做战斗场景,可以通过调节这些模型的长宽高来匹配场景人物模型的大小。 2. 阻挡 Unity3D自带一些简单形状的阻挡,如box collider、mesh collider碰撞器。阻挡碰撞器只是个组件,想运用它必须放在Gameobject中实现,因为这些都是体阻挡,如果想要面阻挡,需把该阻挡对应的Gameobject中tranform的S坐标其中一个值改成0就行了。设置场景的各个方向阻挡,需要特别注意的是,给主角和NPC站立的那一面阻挡需要将阻挡对应 第11 页 Gameobject属性改成“ground”,否则角色无法站在阻挡上。设置四周阻挡,防止主角掉出场景外,四周阻挡必须足够高,超过角色所能跳跃的高度,防止主角跳出阻挡。 (1) 碰撞检测 游戏过程中经常会出现主角被墙壁所阻断,撞到NPC将其推开等情况,这些都是属于碰撞检测,Unity3D提供例如box collider(长方体)、mesh collider(圆柱体)等碰撞检测[5]器,当检测到碰撞器时,调用OnControllerColliderHit()控制碰撞器碰撞函数,防止游戏过程中人物相互穿越、穿墙等情况的发生,有利于提高游戏的真实性。想要添加更多复杂的碰撞检测器,可通过3DSMAX等建模软件制作完成再添加到Unity3D中来。 (四) 人物动作说明 因为动作与模型的高度长短相关联,所以动作一般都是和模型绑定在一起,两个模型骨骼(高度、肢体长度)大体一样,可进行动作的复用,人物动作可以用maya等动作处理软件实现,动作应包含最基本的走路、攻击、跳跃等基本动作。本毕设所用模型、动作均来源于网络,且模型高度、骨架一样,动作复用同一套,节约开发成本,缩短开发周期。 3-5 动作文件脚本内容 1. 模型动作的导入 第12 页 将已制作好的模型动作文件导入到Unity3D引擎中,导入格式为FBX,并将模型所对应的贴图材质一起导入到Unity3D中。值得注意的是,无论之前在3DSMAX软件中的模型有没有材质,导入到Unity3D后,模型都是没有材质的。Unity3D配备了强大的编写材 导入模型后,需要手动在Unity里面重新设置一遍材质贴质和阴影的工具(ShaderLab), 图。 2. 动作处理 导入到Unity3D中的FBX动作文件其实就是带序列帧的动画文件,它包含动作的所有动画,并标注出每一个动作的帧数范围。但是这些动画没法直接拿出来使用,需要进行脚 [6]本控制处理。根据导入的FBX动作文件的序列帧,编写脚本,在某些条件下触发对应动画序列帧,制作对应的perfeb动作文件,比如按“攻击”按钮,触发攻击动画的序列帧等。一个动作应该包含四个属性:位移、伤害、声音和特效。 3-6 动作对应帧范围 (1) 位移--即从动作开始到动作结束人物产生的位移。 (2) 伤害—包含此动作所产生的伤害范围、击飞距离、高度等,但是走路动作是不具备伤 害属性的。 (3) 声音—即此动作的声音。 (4) 特效—即此动作的特效。 3. 动作调优 为了动作更加真实,经过动作处理的perfeb动作文件需要进行调优才算是一个合格的动作,比如一个攻击动作产生位移太大、走路能把人击飞等这些显然都是不合理的。动作调优即根据实际动作,合理的调节动作的位移、伤害、声音、特效,使它的伤害、声音、 第13 页 特效出现时机更加匹配该动作。另外,为了防止一个动作还未结束另一个动作就开始执行的情况发生,需要设置每一个动作的开始结束时间,这样能有效解决连招动作的施放问题。除此之外,为了防止出现按键重叠时动作出错的情况,每个动作需要设置施放优先级。经过以上三步调优后的动作更加接近真实。 (五) 游戏镜头控制 本游戏用的两种游戏镜头,camera和main camera,camera为固定死的2D镜头,用于2D界面映射,main camera用于3D场景映射,战斗时打开此相机。手机游戏比较头疼的问题就是屏幕太小,不好操作容易按错键,为了使玩家在手机上更便捷的操作,镜头将使用系统自带的跟进镜头脚本(first person controller),将其挂在main camera上进行镜头的控制,减少玩家控制过程中对于镜头的调整,使能更专注于战斗本身,简化了游戏操作,并且更为轻松。 (六) 加载界面 3-6加载界面 由于不同界面之间的切换、界面到战斗场景的切换都需要加载各种数据,加载到内存完成才会显示出来,这需要花费一段时间,如果莫名奇妙的黑屏将会使玩家迷茫,使用加载界面作为过渡能有效的解决此问题。界面中下方为进度条,方便玩家理解加载的进度。 第14 页 四、游戏设计实现 (一) 各系统界面分析 1. 登录界面 4-1 游戏登录界面简图 (1) 登录说明 进入游戏后首先进入登录界面(图4-1所示),登陆界面采用快速登录方式,屏幕中上方为游戏名称,默认显示“基于Unity3D的格斗游戏”,屏幕中心为账号名称,可任意输入想要的游戏ID,下方“进入游戏”按钮,背景图可随时替换,点击屏幕后进入游戏主界面。 (2) 界面设计 登录界面相对其他界面来说较为简单,添加sprite控件,或者是新建一个Gameobject,并添加UIsprite脚本。将所需背景图拖入sprite中,将depth调为0,置于最底层,保证背景图不会覆盖到其他内容。同样的,新添一个label控件,将label文字内容更改为所需的游戏名称,depth值大于0就行。添加一个button控件作为进入游戏主界面的按钮,将button的文字改成“进入游戏”,调整Tranform大小来调节button碰撞器的大小,碰撞器大小尽量大,易于点击,用于响应手指点击后跳转游戏主界面。账户的输入使用NGUI输入框控件。 第15 页 (3) 功能实现 点击“进入游戏”按钮,进入游戏主界面,实现代码如下: string userAccount = SystemInfo.deviceUniqueIdentifier; string userPassword = SystemInfo.deviceUniqueIdentifier; Show(false); HudManager.Instance.ShowDialog(DIALOG_TYPE.HUD_LOADING_BAR); KiiManager.Instance.RegisterIphone(userAccount, userPassword); Façade.instance.sendnotification(GAME_TAPE.HUD_MAINTEMP)) 说明:Show(false);表示关闭登录界面,HudManager为界面管理器,实际上就是一个 手写的脚本。HUD_LOADING_S为加载界面,利用界面管理器调用打开加载界面, 随后打开游戏主界面。KiiManager即Kii cloud,为一个管理数据的后端服务,本段代 码调用KiiManager中的instance方法将账号密码保存起来。 (4) 实际效果 4-2 实际登录界面 2. 游戏主界面 第16 页 4-3 游戏主界面简图 (1) 界面功能说明 在登录界面点击按钮后进入游戏主界面,如上图所示。左上角为游戏名称,显示玩家游戏ID,界面中心角色模型为钢铁侠模型,界面右边为“冒险”“竞技塔”“部件”按钮,“冒险”为关卡选择界面入口,点击后进入关卡选择界面。 (2) 界面NGUI设计 界面中心是一个钢铁侠模型,为perfeb模型文件,这块区域必须放置碰撞器以响应 手指触摸。右边对应“冒险”按钮,为button控件,可挂相应脚本在button上,使其 点击后执行不同指令,进入不同分界面。新添一个sprite控件,选择一张背景图,并将 depth值调到最低。 (3) 功能实现 a) 点击“冒险”按钮跳转关卡选择界面,实现如下: public void OnBattle() { if(!ballEnable) return; Show(false); 第17 页 GlobalSet.SetMainSceneCameraControl(true); HudManager.Instance.ShowDialog(DIALOG_TYPE.HUD_LOADING_S); Façade.instance.sendnotification(GAME_TAPE. HUD_MAIN_SCENE)) } 说明:打开一个新界面时需要先关闭当前界面,这样节省内存空间。Show(false)就是 用来关闭当前界面。GlobalSet.SetMainSceneCameraControl(true);打开关卡场景相机, 并调用facade的instance方法发送消息给MVC端口请求打开HUD_MAIN_SCENE。 为关卡界面。 (4) 实际效果 4-4 实际主界面 3. 关卡选择界面 第18 页 4-5 关卡选择界面 (1) 界面功能说明 如上图所示,第一章共有5个关卡,点击后在相应关卡按钮上方弹出“攻击”按 钮,点击“攻击”按钮进入对应关卡的战斗界面,点击其他区域隐藏攻击按钮。点击 右下角的“返回”按钮,回到游戏主界面。 (2) 界面NGUI设计 使用sprite控件添加背景图,depth设为最低。新建一个空的Gameobject,添加关 卡的sprite、label和collider碰撞器,选择好合适的图片作为关卡图添加到sprite中,label 改成相应的关卡名。右下角“返回”按钮为button控件。 (3) 界面功能实现 a) 点击任一关卡弹出“攻击”按钮,点击“攻击”按钮进入战斗画面,实现代码如下: public void OnBuilding() { if(mBuildingDic == null) return; GlobalSet.SetMainSceneCameraControl(false); buildingUi.SetActive(true); , 第19 页 说明:if(mBuildingDic == null)判断当前区域是否有关卡数据,如果是空的,返回重新 判断,如果非空,则关闭关卡场景镜头,打开战斗场景。 4-6 点击关卡弹出攻击按钮 b) 点击其他区域关闭攻击按钮,实现如下: public void OnCloseBuildingUi() { ClearAllBuilding(); buildingUi.SetActive(false); GlobalSet.SetMainSceneCameraControl(true); } c) 点击“返回”按钮返回游戏主界面,实现如下: public void OnRet() { GlobalSet.SetMainCameraControl(false); if(m_baseInfo.type == BASE_TYPE.MAIN) HudManager.Instance.ShowDialog(DIALOG_TYPE.HUD_MAIN); } (4) 实际效果 第20 页 4-7 实际关卡界面 (二) 战斗系统 战斗系统分成两个部分,一部分是对于主角的控制,通过触摸屏幕控制主角的上下左 右、跳跃、攻击等,另一部分是NPC的智能AI,让NPC自动寻找接近目标,并实施攻击。 1. 主角控制 通过响应玩家的某些操作,调用播放主角对应的动作动画,实现动作的控制。 (1) 实现控制主角上下左右移动,代码如下: public void SetHorizontalVelocity(Vector2 velocity, bool referenceSelf) { SetHorizontalVelocity(velocity.normalized, velocity.magnitude, referenceSelf); } public void SetHorizontalVelocity(Vector2 toward, float speed, bool referenceSelf) { horizontalSpeed = speed; horizontalToward = toward; if(referenceSelf) horizontalToward = TransformDirection(horizontalToward); } public Vector2 TransformDirection(Vector2 direction) { 第21 页 Vector3 toward = new Vector3(direction.x, 0f, direction.y); toward = transform.TransformDirection(toward); return new Vector2(toward.x, toward.z); } (2) 实现控制主角跳跃代码如下: public void Jump() { TurnTo(joystickToward, false); if(joystickToward != Vector3.zero) SetHorizontalVelocity(Vector2.up, runSpeed, true); verticalVelocity = jumpSpeed; } (3) 实现控制主角攻击代码如下: public void Cast(iHero caster) { this.caster = caster; if(faceTarget) { HeroManager.SelectTarget(caster); if(caster.AttackTarget != null) caster.Controller.TowardEnemy(caster.AttackTarget, false); } else { caster.Controller.TowardJoystick(); } curStep = 0; StartCurStep(); } 第22 页 2. NPC智能AI NPC的智能程度决定了游戏的难易度,wait、walk、attak、limit为电脑的四种简单状态,这也构成了简单的电脑智能AI。简单的NPC智能AI主要需要以下两方面的内容: (1) NPC寻路设置: void Awake () { Player = GameObject.FindGameObjectWithTag ("Player").transform; playerHealth = player.GetComponent (); enemyHealth = GetComponent (); nav = GetComponent (); } void Update () { if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0) { av.SetDestination (player.position); n } else { nav.enabled = false; } } 首先NPC需要获取寻路目标的位置,Player = GameObject.FindGameObjectWithTag ("Player").transform;这一句将获取player的坐标位置,使其暴露于NPC的视野范围之内。NavMeshAgent为Unity3D内置的寻路组件,nav = GetComponent ();这一句获取调用此寻路组件。然后是条件判断,如果NPC生命值>0且玩家生命值>0,符合以上条件执行nav.SetDestination (player.position);即设置玩家的坐标作为寻路目标,并且将以最短路线寻路,不符合条件执行nav.enabled = false;表示寻路不可用。 (2) NPC自动攻击: 第23 页 public class EnemyAttack : MonoBehaviour { public float timeBetweenAttacks = 0.5f; public int attackDamage = 10; float timer; void Awake () { player = GameObject.FindGameObjectWithTag ("Player"); playerHealth = player.GetComponent (); enemyHealth = GetComponent(); } void OnTriggerEnter (Collider other) { if(other.gameObject == player) { playerInRange = true; } } void OnTriggerExit (Collider other) { if(other.gameObject == player) { playerInRange = false; } } void Update () { timer += Time.deltaTime; if(timer >= timeBetweenAttacks && playerInRange && 第24 页 enemyHealth.currentHealth > 0) { Attack (); } } void Attack () { timer = 0f; if(playerHealth.currentHealth > 0) { playerHealth.TakeDamage (attackDamage); } } } public float timeBetweenAttacks = 0.5f;0.5f为每次攻击的时间间隔,单位为秒,f表示时间间隔为float类型。public int attackDamage = 10;表示每次攻击的伤害值。void OnTriggerEnter (Collider other) 表示当碰撞器other进入触发器时调用ontriggerenter函数,并判断otherGameobject是否是player,如果是player,则判定player在攻击范围内。同理可知,void OnTriggerExit (Collider other),如果离开触发器的otherGameobject是player,则判定player不在攻击范围内。Time.deltaTime为时间增量,并将其自加一的值赋给timer,如果timer的值大于攻击间隔的时间,player在攻击范围内并且npc当前生命值大于0,符合以上三个条件则npc可对player(玩家)实行攻击。void Attack ()定义攻击的函数,每次攻击都需要将timer置0,且符合player当前生命大于0,方可进行伤害计算。 第25 页 五、游戏测试 游戏的整体功能设计完成后,测试游戏有没有实现预期的效果,有没有其他BUG、稳定度如何等等,并作出相应修改。Unity3D提供profiler用于游戏性能测试,主要是游戏的CPU占有率测试,一般来说FPS大于30即为流畅。 1. 加载界面性能测试 5-1 加载界面CPU占有率 2. 主界面性能测试 5-2 主界面CPU占有率 3. 战斗场景性能测试 第26 页 5-3战斗场景CPU占有率 第27 页 六、总结与展望 (一) 总结 在本次毕设中,通过UI界面设计、界面控制代码编写、MVC框架搭建、战斗模块成功实现对格斗游戏的开发。其中,把MVC框架作为总控脚本,完成界面间的分工,实现界面切换。利用NGUI完成UI界面的设计,并实现简单的部件升级功能。编写脚本实现了冒险、竞技塔系统。总的来说,游戏运行流畅,达到了预期的效果。 (二) 展望 由于自己还在学习阶段,所以本游戏只是一个相对简单的版本,其中还是有一些地方需要改进: 1. 有些地方可能会出现bug,导致资源加载慢、游戏崩溃等情况。 2. 其中除了玩家资源数值,简单的NPC数值计算外,其他地方并不涉及数值的计算,没 有建立比较完好的数值体系。 3. 由于成本的限制,主角和NPC模型都属于比较粗糙的样式,动作也比较单一。 总的来说,本毕设还属于一个比较初期的产品,需要继续完善上面的缺陷,并添加更多新功能进去,使之成为一个比较成形的作品。 第28 页
/
本文档为【基于Unity3D的跨平台格斗游戏设计毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索