admin 管理员组文章数量: 887021
2023年12月23日发(作者:拼多多商家登录入口)
基于Unity2D制作横板2D小游戏
Making board 2D games based on unity2d
中文摘要
本篇论文主要流程是通过从游戏发展的背景引入Unity引擎制作游戏的,然后写出自己为什么要以用Unity制作一个2D小游戏来进行毕业设计,对Unity的基础介绍,还有对Anima2D这款组件的介绍来引入下文。
正文主要写自己是如何利用Unity进行该2D游戏的制作,以及自己制作游戏时候的思考和流程,以及在网上寻找的各种各样的解决方案,还有用Anima2D制作角色的骨骼动画的过程,并且在论文中提出自己在完成毕业设计的时候遇到的困难,提出自己的解决方案,并且提出自己当时还没有解决的瓶颈,通过这样,为大家初步介绍Unity和Anima2D的基本操作和一些在本次毕业设计上用到的组件的操作方式和自己遇到的问题。
最后通过总结本次毕业设计的成果以及遇到的困难,来检验自己的学习成果,分析自己的不足。
1
Abstract
This article is introduce unity engine to make games through the
background of game development, Also write the reason why want to make a
2D game with unity for graduation design,and introduction the unity engine,
and Anima2d.
The main body mainly describes is how to use unity to make the 2D
game, and propose the thinking and process when making the game,
various solutions found on the Internet,also will introduce the process of
making the character's skeleton animation with anima2d. In the paper, I will
puts forward the difficulties encountered when completing the graduation
design, and puts forward solutions to this this way, I will
introduce the basic operation of unity and anima2d, also the usage mode of
components used and the problems I encountered in this graduation project .
Finally, through the summary of the results of this graduation project
and the difficulties encountered, to test my learning results and analyze my
shortcomings.
2
目录
第一章 绪论 .................................................................................................... 1
1.1 选题的目的与意义 ......................................................................... 1
1.2 游戏行业的国内外研究现状 ......................................................... 1
1.3 本次课题的主要研究内容 ............................................................. 2
第二章 游戏开发工具及开发语言介绍 ....................................................... 3
2.1 Unity3D引擎简介 ............................................................................ 3
2.2 C#开发语言 ..................................................................................... 3
2.3 Visual Studio编程软件简介 .................................................... 4
第三章 游戏需求分析及概要设计 ............................................................... 4
第四章 游戏详细设计及实现 ....................................................................... 5
4.1 准备工作 ........................................................................................... 5
4.2 游戏的具体设计和实现及具体操作和思路 ................................... 5
第五章 游戏测试.......................................................................................... 11
第六章 总结 .................................................................................................. 17
参考文献 ........................................................................................................ 19
致谢 ................................................................................... 错误!未定义书签。
3
第一章 绪论
1.1 选题的目的与意义
本次论文选题的目的是通过完成一个简单的但是包括一般游戏的大部分要素的小游戏,通过这样对自己的学习情况做一次总的反省和归纳,指出自己的各种不足和仍要改进的地方。
同时也为把自己在使用Unity进行游戏制作的时候的一些经验进行记录和公布,让自己以后或者在其他人在阅读该文章之后或多或少能得到收获。
最后借此来体现游戏引擎的出现,对游戏制作行业发展的促进作用。
1.2 游戏行业的国内外研究现状
随着人们的生活水平的不断提高,人们的生活娱乐标准越发提高,从中诞生出了电脑游戏这一娱乐项目,在当今网络科技、计算机的普及,电脑游戏也随之普及开来,电脑游戏,也成了人们娱乐生活的潮流之一。从以前简单的像素游戏,到如今的3A大作,历经了半世纪的打磨和发展。
而在这个潮流当中,人们在不断游玩各种游戏的时候,有不少人从中诞生了自己对游戏的一些独特的看法,并且尝试着自己去开发,制作游戏,但是由于技术、代码等要求导致门槛非常的高,让不少人止步于此。
不过或许是某些团队发现了这种事,他们也赞同也愿意让玩家自己去DIY自己的游戏,他们向大众制作了不少可以简化游戏制作难度的游戏引擎,从而让游戏制作门槛大幅度的降低,甚至对一定收入以下的人群发布了免费的个人版满足大家对DIY游戏的需求。
从2D到3D,从RPG到动作类,各种各样的游戏从只有大公司能制作到理论上每个人都能制作了,游戏的制作引擎也多种多样,从专注2DRPG的RPG制作大师,到能制作2D和3D且容易上手的Unity,到3A大作的虚幻引擎等,人们开始用各种各样的引擎去制作各种各样的游戏了。
而且在各种各样的引擎当中,为了方便的使用游戏引擎进行游戏制作,玩家、官方、团队等制作人都很乐意的在上面共享自己的代码和插件,让游戏引擎的使用变得更加的方便和精细、有趣了。
在某几个学期,我有幸的接触到Unity的课程,从而产生了兴趣,从UI制作到游戏内的制作比起纯粹的代码变得可视化,从素材的导入、刚体到碰撞器的设定和使用,相机的设定、动画的制作、动画机的管理,从枯燥的代码到高可视化界面都让人对游戏制作的认识有了翻天覆地的变化。
1.3 本次课题的主要研究内容
本次毕业设计和毕业论文的主要内容是围绕着Unity引擎和Anima2D组件去制作2D小游戏,通过这样像大家初步介绍Unity引擎和Anima2D的基础用法,同时对自己的知识进行一定的拓展,然后反馈自身遇到的问题,提出、并且对此进行解决,也提出一些自己在制作时因为种种原因无法解决的问题。
最后对自己的学习进行检验,指出自己不足的地方。讨论Unity引擎对自己制作游戏的时候的帮助和Anima2D骨骼动画比起标准的动画切换在2D动画制作时候的不同、还有讨论自己对游戏引擎的出现和发展对于游戏制作和游戏行业发展的总结。
为了测验自己的学习成效,并且检验自己在这几个月的重温和复习的成果,我把毕设的题目定位利用unity2D进行小游戏的制作,通过毕业设计对Unity这款游戏引擎进行复习、重温和运用,加深对该时段学习的理解和运用,尝试利用课堂上学习的知识和跟随老师制作的作业的步骤,把从老师教的Unity3D的东西运用到Unity2D,自己独自尝试做一次游戏从而来检测自己学习的效果。
本次小项目制作中,除了运用了Unity的部分基础功能,还尝试加入了Unity的Anima2D插件,对原本没有动作的素材进行了骨骼、蒙皮、修改骨骼权重等操作,从而制作了简单的骨骼动画,使其能通过对骨骼的各种操作让素材通过变形、旋转和移动直接生成动画,在老师的基础教学中尝试加入了新插件的学习和运用,对自身的知识进行了小范围的扩展,然后去进行项目的制作。
期间涉及了一些Unity的基础代码和Unity内的各种组件的运用和组合,以及动画制作的操作,利用骨骼动画为单张图片制作多个动画,并且分别通过各个按键监听进行动画的切换,然后制作了一些游戏基础要素(比如说血条、对游戏内各种实体的相互判定、简单的UI和滚动背景等),简单的完成了一个游戏所需要的要素。
总的来说,完成了游戏的基本要素,可以通过拓展和更新来增加游戏的内容了。
同时也发现了自己在各种地方的不足,特别是代码熟悉程度,导致不少时间都在读网上找的相关代码,然后引入自己的游戏进行修改和引用。
按照毕业设计的成果来看,基本上完成了课题中制作动画和2D横版游戏的内容。
第二章 游戏开发工具及开发语言介绍
2.1 Unity3D引擎简介
本次论文研究的是Unity引擎和Anima2D组件,Unity3D是由Unity
Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game
Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器可运行在Windows、Linux(目前仅支持Ubuntu和Centos发行版)、Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac 所支持。“百度百科[1]”
而在使用Unity5.X时,Anima2D是最先进且完整的2D骨骼动画解决方案。使用Anima2D,你将可以在Unity中为你的游戏创建2D骨骼的人物和背景。 Anima2D扩展Unity通过,添加2D骨骼层级结构(2D Bone Hierarchies),一个强大的可完全控制网格生成的SpriteMesh编辑器 和2D反向力学(2D Inverse Kinematics)。Anima2D严格按工作流开发,且无缝集成到Unity。“Anima2D官方文档[2]”
2.2 C#开发语言
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。”百度百科[3]”
总的来说C#是一种基于C和C++的一种面向对象的编程语言,集合了C和C++优点,简洁紧凑,灵活方便,有着丰富的运算符和数据类型,表达力和表达方式都有相当的优势,代码的可读性和可重用性好,也无需复杂的编程环境,最重要的是可以直接访问物理地址并对硬件进行操作,程序效率高,可以移植到各种不同的系统上进行代码的编写和运行,大部分的系统框架也支持该编程语言。
2.3 Visual Studio编程软件简介
Visual Studio集成开发环境是一种创新启动板,可用于编辑、调试并生成代码,然后发布应用。集成开发环境(IDE)是一个功能丰富的程序,可用于软件开发的许多方面。除了大多数IDE提供的标准编辑器和调试器之外,Visual Studio 还包括编译器、代码完成工具、图形设计器和许多其他功能,以简化软件开发过程。“[4]”
Visual Studio(以下简称VS)是一款由微软官方发布的编程软件,它支持C类、BasicL类、Java类等多种编程语言,并且在编程窗口中拥有多种功能工具直观的满足使用者的一定程度上的编程需求,能够在输入相关代码的时候提示或直接自动编写相关代码,并且拥有强大的语意检查和错误检查功能,能够随时进行运行测试,支持多种微软系统,并且能把代码生成/打包、发布成exe文件进行直接使用,能够极大程度上提高使用者的编程效率。
第三章 游戏需求分析及概要设计
本次毕业设计主要是制作一款2D横版游戏,作为一个最基本的横版2D游戏,需要一个主角供玩家进行操作,而主角需要在玩家按下按键时能够进行对应的各种运动和动作(动画)的演出,也需要一个2D背景供主角在上面进行游戏,也需要敌人,主角受到敌人攻击后要做出受击动作和变动相关数值,数值变化到一定之后会有对应的判定,主角也应该能够做出攻击动作,敌人在受到攻击动作也要做出对应反应。除此之外还需要UI进行开始游戏和游戏开始后显示出如生命值等角色属性的UI、游戏结束后会自动弹出相关UI,点击UI上的相应按钮可以执行相应的功能。
在实际毕业设计作品中,我使用了Unity的asset store上的资源,包括角色和背景,还有相关组件,动画则是由自己制作,背景使用了两张图片作为背景,使用代码进行背景的移动和复用,主角的动作通过Unity自带的动画机中的参数判定和代码的按键监听结合自己制作的骨骼动画进行制作,敌人采用了制作成预制体的cube,会在一个范围内进行随机生成,飞向主角,碰撞地面后进行弹跳,碰撞主角后主角做出指定动作并且减少生命值,生命值归零后主角会停下来,弹出重启界面,按下重启按钮可以复活并进行游戏,主角按下攻击键后能唤醒手上的触发器,cube进入触发器之后会产生相应的效果,在开始界面的开始UI中,按下开始能唤醒主角、敌人生成器、和角色属性,开始UI和重启UI中的退出按钮,能正常关闭程序,角色属性UI中有角色的生命值,能够正常反馈角色的相关信息的变动。
第四章 游戏详细设计及实现
4.1 准备工作
在使用Unity引擎制作游戏之前,你可以先去Unity官方网站直接下载Unity或者通过Unity Hub进行引擎的下载,在Unity Hub下载的时候能够自行选择自己需要的组件并且自动进行添加,在下载完成之后,需要进行注册和登录,然后进行激活码的验证才能够使用,不过个人版和资金紧张的公司则可以免费使用个人版的Unity引擎进行游戏制作。
在使用Unity引擎进行游戏的时候,往往会需要自己写一些代码进行支持,所以需要一些代码编写工具的,可以在组件选择的时候勾选Visual Studio(我勾选了之后下载完成在Unity引擎内选择相关设置修改变成软件的时候没有Visual
Studio选项,应该只是个支持Visual Studio的组件)或者自行下载其他编码工具进行编码。
在下载完成之后,通过Unity Hub(需要Unity账号登录和激活码验证才能继续,而且个人版的验证会相当频繁)或者直接打开Unity,就可以进入Unity界面了。
之后在Edit菜单选择Preference里面在Extemal tools修改Extemal Script
Editor选项更换编程环境,这样就完成Unity部分的准备工作了,而Anima2D组件和其他资源则是在windows的asset store里面进行导入,导入完成后,所有准备工作就完成了。
4.2 游戏的具体设计和实现及具体操作和思路
首先先从asset store上下载几个所需的素材,不过特别要注意的是,要用到Anima2D制作骨骼动画的角色,推荐找各个关节都分开绘制的并且清晰的独立的分布在png各个角落的素材资源,最好是一些作者已经用sprite packer处理过的资源,因为被sprite packer处理过的图片在之后很方便的进行切割,然后直接放到场景中进行操作。
在找到符合条件的资源后进行导入,然后就可以开始我们的动画制作了。首先先选中资源里面的刚刚提到的sprite packer处理过的带有角色身上的各种部分的图片(比起一般的png会多出Sprite Mode等选项),然后点击右边界面的Sprite
Editor,在新出来的窗口内进行所需部件的确认、调整各个部件的选取区域,确保
每一个有需要的部件都被完整框选,调整好部件内的蓝色圆点(在切割好之后会以该圆点作为各种调整的中心),然后选择上方工具栏的Slice选择好里面的各项参数之后,点击Slice,再点击Apply完成图片的切割。
随后右键该图片,然后选中create-Anima2D-SpriteMesh,一小会之后,就会发现,它已经把刚刚切好的图片按照刚刚进行的切割分割成各个部件了,随后把各个部件放到场景中进行组装,组装的时候能够发现比起一般的实体,会自动增加了一个叫Sprite Mesh Instance的组件,在那里,按照透视顺序修改好Order in Layer(数值高的会把数值低的覆盖住)的参数,在场景里面进行角色的组装。
组装完成后,现在的角色还是不能动的,就算拖动部件也只能做到最基本的平移旋转操作,接下来就在场景中,选中create-2D Object之后会发现比起导入Anima2D之前多了几个新的选项,这里选择bone,然后把新建的bone移动到素材需要进行运动的地方调整好长度,铺好骨骼(大量的骨骼甚至能做出非常柔软的效果,如头发飘动、衣服摆动等,不过相对的也更消耗性能),注意的是直接在旧的骨骼上创建新的骨骼,新的骨骼会在旧的骨骼末端出现,并且成为父子物体的关系,拖动新的骨骼(子骨骼)会影响旧的关节的大小和旋转,而通过这样在同一骨骼上创建第二个或者直接的话则会在另一个地方创建骨骼,用这种方式创建子骨骼,并不会形成子骨骼影响父骨骼的关系(把其它骨骼拖到旧的骨骼借此成为父子关系也是一样,但是会和普通父子关系物体一样,会跟随父骨骼进行旋转、位移等,在这种关系的两个骨骼,会有个半透明类似骨骼的联系标识连接着),在铺好骨骼之后,要注意骨骼暂时还是没有绑定到实体上的,还是不会互相影响的,这个时候尽可能不要太大幅度的调整骨骼位置。
在上述操作完成后,就可以准备进行蒙皮和骨骼绑定操作了,在上方选中window,会发现多了个Anima2D的选项,选中之后选择SpriteMesh Editor,然后选中场景或project里面的身体部件,刚刚的png就会投到新出现的SpriteMesh
Editor窗口上,然后在该窗口中只有刚刚选中的部件是高亮的,选中场景中铺上骨骼的部件的时候,还会注意到Sprite Mesh Instance有个添加骨骼的参数,直接把Hierarchy里面的骨骼往该参数上拖动,就会发现参数下方出现了对应的骨骼和其子骨骼、而在SpriteMesh Editor窗口也能看见骨骼铺到选中的对应物体上了。之后删除SpriteMesh Editor中不需要的骨骼,然后回到SpriteMesh Editor中就会剩下留下的骨骼,之后和刚刚一样,确保把部件周围的选择框完整框柱部件的同时不要框到其他部件,值得注意的是,上面的东西除了SpriteMesh窗口的选择框和蓝色圆点以外还多了一圈青色的点,选中Slice然后调整里面的三个参数(分别影响点的个数,点和模型的贴合度、还有分布在内部的点的比例),然后点击Slice下的apply,就会发现蓝点会根据那三个参数发生变化,随后再次点击Slice关闭Slice
窗口,点击Bind就会发现上面的骨骼发生了变色,这时候选中右下角的Overlay,整个部件都会变成其他颜色(多个骨骼的时候会出现很多颜色),这个颜色代表着当前部分的对应的颜色的骨骼的权重,而且细心点会发现,那些颜色都是根据刚刚Slice加上去的点进行分布的(也就是蒙皮),勾选右下角的pies会把点放大,详细显示出每个点的权重分布情况,这里根据所需调节好各个点的骨骼权重(不需要每一个点去修改可以直接点击右下角的Auto自动进行调整然后有需要的话再进行微调,选中骨骼之后左下角的界面可以修改骨骼对应的颜色和名字,选中点则是可以更加细致的修改骨骼对选中点的权重),完成之后,点击右上方的apply完成蒙皮和骨骼绑定。
这时候,回到Unity的主界面,会发现不能通过移动部件来对其进行移动了,但是却可以通过拖动骨骼影响到部件,这时证明骨骼绑定已经成功了,不过具体是不是你想要那种效果,就得多次尝试了,假若绑定错误或者效果不好,则需要回到SpriteMesh Editor点击Unbind和Apply进行骨骼的解绑,之后再进行修改(修改越早越好,绑定多了之后发现某个骨骼没绑好要修改往往是要全部都解绑然后再去逐个去微调的,非常的繁琐)。
到这里,我们Anima2D的基础工作就完成了,虽然看起来非常的简单,但是考虑到各种因素(如对蒙皮和骨骼权重的理解和调整,还有铺设骨骼时候对物体怎么动、要动哪里的想象和尝试),会让这些工作重复不少次,也很容易绑到最后发现有个地方动得不尽人意然后前功尽弃,所以实际处理起来还是挺花时间的。
而且,骨骼动画是通过图片的局部变形来实现动画效果的,所以在单张素材上想要做一些细节动画的话,经过实际的尝试之后发现非常的困难,往往会让不想发生变化的地方也产生了变形,权重修改也要变得非常考验人的耐心和对骨骼动画的理解,所以对素材的处理非常的重要,要把需要的动的部位单独分出来。
而在铺设骨骼的时候,建议修改好各个骨骼的名称,并且用角色腰部或者腹部的骨骼来当整个角色骨骼的最高级的父骨骼,设置好每一个骨骼的父子关系非常重要。
给图片铺设好骨骼之后,接下来就是让图片做出动画,相比传统的通过整个图片进行差分的切换来说,骨骼动画则是通过让原图变形而使图片动起来,除去这个插件和Unity本身的制作难度和工程量来说,通过制作骨骼动画远远要比游戏制作人去找一套带有差分又合适,或者是另外开始找美工去进行角色和各种动作差分的绘制要方便得多。
通过选中Unity上方的window,打开animation窗口,然后利用animation的录制动画功能给图片制作动画,通过上方的时间轴和移动骨骼给角色调整姿势,通过不断地调整和播放,使得动画尽可能的看起来流畅、并且符合自己的想法,不过
由于我的技术和自己本身也不是美工这一专业的,对人体和动作的理解不够透彻,所以自己做的动画并不好看。
在制作动画的部分,Anima2D还有其他的组件,比如说IK反动力学组件,可以直接在想要使用该功能的骨骼上create,IK CCD是泛用型比较广的反动力学组件,而IK Limb则是更适合人体使用,他们都会通过移动IK组件然后在不使骨骼变形的前提下,进行反过来计算骨骼移动、旋转,更加直观、简单的调整和制作角色的制作,而另一个Control组件则是最好是绑定在整个骨骼的父骨骼(也就是整套骨骼的重心上),通过配合IK组件移动Control可以十分方便的做出很多改变身体姿势的动作和动画,还可以在骨骼的Inspector窗口添加Pose Manager,随时记录和读取骨骼的动作,要是熟练使用的话,这几个功能会让游戏角色动画制作变得非常方便。
除此之外,Anima2D还有Onion Skin和Bake Animation功能,一个是在骨骼动画制作时可以直观的通过不同颜色来表示上一帧的动作,而另一个则是通过烘培动画把起始到结束的所有动画都添加关键帧以减少性能的损耗。
在通过不断的重复和调试之后,完成了一个2D横版游戏基本上都有的待机-走路-跑步-攻击-跳跃-受击-死亡动作之后,Anima2D和Animator的部分基本上完成了。
随后就直接把其它游戏物体拖到界面上,一个横版2D游戏的雏形就出现了,虽然从整个场景来看,背景只有寥寥几张图片。
然后给背景添加相关代码,在一定范围内,让两张背景根据游戏时间乘以一个背景的移动速度的推移每次移动距离,达到最大之后重新从零开始,这样每当图片运行这行代码的时候,就仿佛在前进了,而且只要最大值等同于图片的大小,这张背景就相当于无限长了(实际上就是两张图片在移动到一定位置的时候返回初始位置重新进行移动,数值设置得准确的话确实是看不出来两张图只是在一直在重复移动而已)。
在制作好这个简单的背景之后,就开始让不同按钮进行让角色做出不同的动作了,这里是通过标准的键盘按键监听来实现,事先在Animator动画机里面设置好参数,然后给各个动画的切换根据参数定好条件,接下来就是用代码实现按键按下和放开的监听修改对应参数,符合动画切换的条件,然后对动画进行切换,修改每个的话的退出时间和是否需要过渡以及过渡时间(过渡时间没调好会导致做出不协调的动作,也可能导致动画的延迟或者不播放),这样之后,一个会被玩家键盘所控制的主角就完成了。
接下来就是要制造一个简单的地板,这里就直接使用了plane在主角的脚下进行一定角度的旋转然后把大小拉的尽可能包括整个背景,这样一个地面就完成了,
这里实际上可以在背景上多加点背景装饰,分别在靠近镜头一侧、在角色和背景之间的一侧添加一些景物,然后随着背景推进一起移动,也可以加个移动光源模拟一个昼夜变换的效果。
然后就要给地板加上2D碰撞器了,同时也要给角色加上2D刚体的和一个2D碰撞器(因为2D碰撞器不会随着添加2D刚体自动添加),然后角色和地面就会模拟一个重力和碰撞的效果,锁定好角色刚体的旋转,防止在跳跃的时候发生旋转,然后给跳跃动作监听的代码增加一条按下的时候给角色一个向上的力,设置好力的大小,使得等同于跳跃动作的时间(或者也可以缩短跳跃-其他动作的切换时间),再加上按下的时候使isjump变为true,检测2D刚体和带有Ground的标签(tag)的2D碰撞体的同时使isjump变为false,这样进行设计的话,可以避免玩家在不处于地面上却还能进行跳跃的情况,并且能为后续增加浮空动作提供不少便利。
这样,角色就能根据按键做出走和跳的动作了,虽然只是背景在动,并不是真正意义上的走,然后这里就出现一个问题,如何把慢走的动作和站立的动作加进去同时又让背景产生相应的变化,这又是一个难题,因为我的滚动背景用的并不是慢慢的推移过去的,而是每次都是从开始的位置加一个随着时间变大的数而制作的,这样的话,直接调整参数大小的话,虽然是会让背景板慢下来,但是调整前和调整后位置会完全不同,所以这里就用了让ale变成原来的一般,但是让Animation的播放速度加快一倍的方式进行弥补了,可是站立还是没办法找到办法解决,记录当前背景位置后,强行把背景位置等同于当前位置,并且不运行背景的位置变动计算,通过这样做,播放对应的站立动画,并且把图片固定在原地(一松开按键后图片很可能会移动到不同的地方)。
之后就要进行敌人的制作,这里使用的敌人是一个会弹跳的cube,利用设定一个随机变动的高度,然后让maker搭载这个脚本,配合时间闸,每隔一定时间在某个位置的随机高度生成预制体flybox,然后再给flybox设置好一个飞向主角的初始的力、配置好2D刚体和2D碰撞器之后、通过tag的辨别,碰撞与地面碰撞模拟弹跳效果,还有碰撞主角让自身运行destory(this)命令。然后给主角加上碰撞flybox的标签后behit参数变为1,播放受击动画的代码和播放结束后让behit变回0的代码,这样敌人生成和主角受击判定就完成了。
然后就进行UI的制作。这里需要的UI是开始和退出的按钮,在createUI里面的Button之后会自动生成一张画布,因为我制作的游戏比较简单,主UI和游戏的背景用的是同一张,所以这里就不用制作新的Scene,和利用SceneManagement包来进行Scence进行场景切换了,画布类型选择跟随相机和固定大小,然后和游戏场景的主摄像机在画布中的参数绑定起来,这样,设置在画布内的UI按钮也可以直接
放置在摄像机的范围内,拖动相机的时候也可以拖着画布和UI一起移动了(当然也可以用Overlay进行制作,那样的话无论相机在哪都会优先显示UI).
制作好开始和退出按钮之后,在下方设置好点击事件,在开始按钮的点击事件参数中设置好游戏中个个物体的激活还有菜单的隐藏事件,而退出则是写好一个退出程序的代码()放到空对象上,然后点击按钮后运行该段代码。
制作好简单的主UI之后,就该制作游戏内的角色属性面板了,这里只进行了血条的制作,使用了三个空图片,然后通过image的上色完成了白色、红色、暗红色三种不同贴图,让白色放到最左边,暗红色的当做血槽,红色的当做现有血量,这样一条简单的血条就完成了,然后调整一下填充方向,使得调整(减少)Fill Amount的时候会向左进行缩进就完成了,然后利用代码,让flybox碰到角色的2D碰撞体的时候填充进行减法运算,填充为0的时候则对动画机上的参数满足死亡动画的条件,这样一条简单的可以根据相关参数的血条完成了。接着就再次用UI创建一个again和退出的button,按下again的时候就运行相关空物体的代码让填充变回1,参数重新满足从死亡变回默认状态。(不过这样依然还是不太好,按下again之后会从地上爬起来,并不是我想要的效果,直接把该场景时间重置会有更好的效果)。
接下来就要给主角添加一些其他的系统,在主角的武器的骨骼上生成一个空物体,附上2D碰撞器,勾选触发器选项后,调整到合适大小,就完成了(绑到图片上则会因为不会跟着骨骼进行运动的同时因为触发器碰到物体的刚体或碰撞器是不会触发物理效果而会直接掉到屏幕下方),利用按键监听让这个攻击判定框只在按下J的时候出现,利用动画播放监听来让播放结束后让动画机参数归零(这里若是调成大于1,即让动画播放完再让参数归零则会因为Unity的Animation的动画过渡功能无法触发,需要微调数值去试到适合为止),然后给flybox加上碰到该标签的触发器自动给一个比较大的力让其飞走,并且触发一次粒子效果,这样攻击就完成了。(目前没有找到能检测触发器去碰撞其他碰撞器的代码,其实做的时候试图做了记分系统,但是因为flybox是预制体,而预制体身上的代码似乎也只能是预制体,通过这种方式修改记分板的代码只会改到文件中的代码而已,并不能对场景中的计分板进行修改,所以没有实现计分板功能)。
不过在之后几天,经过老师的引导和指点,增加了新的敌人,采用了分别使用了受击框和攻击框,使该敌人只能在跳跃的时候命中,不过在根据老师的建议修正了下比例之后,在石头人姿势稍低的时候在正确的时机进行攻击也能命中。并且给武器的攻击框增加了相关代码,从原来敌人受击加分这个思路改变成了击中目标加分,而武器的攻击框则是常驻在游戏场景上,故没有之前没法加分的问题了,而且之前的预制体获得场景物体也有办法解决了,使用了Unity中的Find命令进行游戏物体的搜索和获取,不过相对来说会更消耗性能,故还是使用了攻击敌人加分这个
设定,并且使用粒子效果制作了简单的攻击特效,不过具体是放在武器上还是敌人上比较好还有待研究,增加了一个可以暂时走上去的地形,可以暂时躲避下方的敌人和盒子,也修改了下跳跃的逻辑代码,现在站到地面上的时候会切换回默认姿势而不是完成跳跃动作才返回,原本由于攻击动画速度较慢,也进行了小许优化,增加了小许的动画速度,同时也制作了一个跟随主角移动的小球,上面注释了几个不同的根据主角和小球距离的条件,稍作修改,加上一些素材导入和动画制作,就可以为后续增加的怪物或者需要类似判定的游戏物体套用上这个小球里的脚本了(但是由于不太符合目前),之后也增加一个触碰到角色可以给角色系统中的血条进行回复的游戏物体,为了避免之前遇到的问题,也是把相关代码写到了主角的碰撞体上进行相关数值的增加,而且由于碰撞原因,在足够近的情况下攻击到对应敌人的受击框会产生碰撞器的重复判定,所以增加了攻击命中目标后,关闭目标的碰撞器,借此来优化了该问题,这个优化同时也对游戏的难度进行了些调整,故也缩小了主角的攻击框。
这款游戏的大体就完成了,除了以上主要系统还加上了一些其他功能的添加,比如说flybox击中主角后因为两个都有刚体,质量都差不多,flybox的力相对来说非常大,所以会让主角产生位移,写了个事先记录好的开始位置,在HP没有归零的时候会根据距离回到开始位置的代码、还做了一个另不同速度不同位置(层级)用来遮挡视线的背景,一个纯粹用Anima2D的功能进行制作的带动画但是没有实装到摄像头中的石头人(没有在骨骼动画制作的时候对骨骼进行单独的修改,而是只使用了IK组件和Control组件进行动画的制作),还有一个单纯用于增加背景亮度的定向光(实际可用来做昼夜变换,但是由于我对于2D实体的光线调整研究得不太充足,创建的定向光并没有对主角产生影响)。
第五章 游戏测试
游戏画面
游戏开始界面,点击start按钮可以进入游戏,Exit则会关闭程序如图5-1所示
图5-1 开始界面
图5-2游戏内界面
每隔一段时间会生成能够站上去的平台,可以回避大部分攻击,如5-3所示
图5-3能够暂时回避敌人的平台
打中方块分数+1,并且击飞方块,取消方块的刚体和碰撞,打中石头人上半身则取消石头人的攻击框和碰撞 如图5-4、5-5、5-6所示
图5-4攻击击中方块
图5-5攻击石头人的下方不能击倒石头人
图5-6 攻击框和收击框不同的敌人
血量归零后出现失败界面,如5-7所示
5-7失败界面,点击Again可以回满血复活,并且重新激活刷怪物体
除此之外还有能够供主角回复血量的物体,如图5-8、5-9所示
图5-8回血胶囊体,主角碰到了可以回血,图5-9回血效果,
第六章 总结
在本次的毕业设计中,我通过使用Unity引擎和Anima2D组件进行了游戏的制作,证实了该游戏引擎可以让我非常方便而简易的进行游戏的制作,同时运用到了在该学期学习到的相关知识,虽然不足的地方很多,但是收获的东西也不少,同时也在一定程度上体现出一款游戏制作引擎能给予一个业余爱好者制作游戏有多大的帮助,而类似Anima2D这样的组件则是让制作的方式变得更加多样化和简便化,也
增添了不少趣味性,Unity自带的各种各样的工具则是节省了使用者制作时候的各种繁琐的代码流程,比如说动画机,原本则是需要大量的代码进行参数的设置和动画的设定和播放的,还有制作时候的直观性和可视化操作,从创建物体,到自己编写一些简单的代码让物体动起来,几乎可以说达到一边进行游戏制作一边检查制作的程度了,创建出来的每个物体也会自带一部分所需的组件或者脚本,不再需要进去对应参数的代码进行代码的查找和修改,而是可以通过界面相当直观的对对应参数做出相应的调整,对于自己编写的代码,只需要用上相关的包里面的代码,在赋予给场景中的物体或资源中的预制体之后,就会直接出现在对应的脚本组件中出现对于的参数修改选项,就显得非常的方便和直观,对于初学者或者不太擅长代码的使用者来说,比起只能通过代码进行修改,这种方式就显得非常的方便、清楚了。
而本次使用的官方组件Anima2D则是在角色动画制作上帮了不少忙,可以在制作角色动画的时候不用或者少用差分进行角色制作,只需要分好每个部件,铺设好骨骼,绑定好之后,利用相对应的组件,就能进行动画制作了,虽然还是需要使用者对于相关动作的一定研究和不断的调整才能有心仪的动画效果,不过比起绘制好几个差分来说,对于非绘画的或者绘画不熟练的使用者来说确实是一种很好的替代方式。
不过通过本次毕业设计,我认识到了自己的学习还是不够踏实,在代码方面比较生疏,感觉自己在制作的时候有一大部分的时间是在寻找相关代码和解读代码的意思,然后才进行调整和修改到自己的制作当中的,而且其中可能包括了不少的代码重复和多余,代码的条理也是相当的混乱,思考时候的思路也不太清晰,比较混乱,而且在美工上的处理和制作也并不理想,虽说自己并不是那个专业的,但是感觉还是太简陋了,对于人体的动作也不是很熟悉,骨骼绑定也处理得不好,动画也有违和感,循环的时候并不是完全的对称,导致播放的时候出现不协调的效果,动画机上的处理也不太熟练,对于动画过渡和退出的理解不够深刻,而在功能的实现上也遇到了不少挫折,在自己后续的测试中也发现了自己某些功能的实现方式也是不太理想,比如说重新开始功能,应该用新场景制作然后把time重置成开始,效果会比现在好得多,而某些动画退出的时候过渡时间也把握得不太好,有待改善,动作之间的退出判定也不太如意,游戏内容的容量也有待提高,甚至还有未完成、无法完成的部分。
不过在某种程度上,这也证明了现在即使是和我一样的初学者,也能通过一些游戏引擎和组件组合起来进行一些较为简单的游戏制作了,他们不用去专门学习大量的代码知识、进行大量的编程训练,就可以通过各种各样的游戏引擎和组件把自己内心中的想法,内心中的游戏制作出来,对比起当年人们对于游戏、软件的制作往往是遥不可及的程度,现在也变成了只要肯花时间去琢磨一下,就可以进行简单
的制作了,这不仅仅让游戏制作者制作游戏变得简便,而且在降低门槛增加趣味性吸引了不少人进行游戏制作的同时,让不少人感兴趣去学习相对应的课程,让游戏的发展变得比以前快了不少,各种各样的独立作品在不同的平台发售,让人眼前一亮的有趣、创新的玩法,让人感触良多的深刻、沉思的游戏剧情,还有多种多样、充满惊喜的世界观,不仅仅在某些大作中出现了,独立游戏中也会不时传出各种各样的神作,感人肺腑的剧情,还有吸引人心的玩法和世界,凭借着相比之下更加低的价格更容易让人去购买并且游玩。
所以,随着游戏引擎的出现和发展,还有相关组件的丰富和增加,使得游戏制作的门槛降低,也在另一方面推动着游戏制作行业的发展,让人们能把自己心中所想的游戏表现出来,虽然我对Unity引擎可能只是了解了点皮毛而已,但是从这已经可以看出来,游戏制作引擎的确是可以让游戏的制作变得简易,让游戏变得丰富,让游戏行业的发展变得更加快速了。
参考文献
[1]爱笑的在的等编辑者.百度百科Unity3D[Z],/item/Unity3D/3064002?fromtitle=Unity&fromid=10793&fr=aladdin,最近更新时间2020-04
[2]游戏仁,Anima2D官方中文文档(B站首发)[Z],/read/cv155943,2018-1
[3]H去90等编辑者,百度百科c#[Z],/item/c%23/195147?fr=aladdin,最新更新时间2020-03
[4]olprod,欢迎使用 Visual Studio IDE[Z],
/zh-cn/visualstudio/get-started/visual-studio-ide?view=vs-2017,2019/03
[5]Unity Technologies. unity官方案例精讲[M].中国铁道出版社,2015.
[6]刘佳力基于Unity3D的儿童安全教育游戏的研究与实现[D]四川师范大学,2015
[7]段薛孔,李潼,朱旭东,吴兰Unity3D游戏场景中人物角色动画的设计.安徽:电脑知识与技术期刊,2019.15-9
[8]程彬彬,王明鑫,商楠浅谈游戏开发平台Unity3D的应用与发展前景.辽宁沈阳:沈阳理工大学,110159
[9]李兵川基于Unity 3D游戏开发流程分析重庆重庆科创职业学院.402160
[10] Unity 4x从入门]到精通[M]中铁出版社。2013
[11]王同娟基于Unity3D的教育游戏开发研究[J]电脑编程技巧与维护,2018(1):7.
[12]杜文罄科普游戏兴奋点研究及其对科学教育的启示[D]西南大学2018
[13]吴亚峰,于复兴. UnisD游戏开发技术详解与典型案例北京人民邮电出版社, 2000: 56-59
[14] 程明智. Unity游戏开发技术.北京:国防工业出版社, 2012: 279-318
版权声明:本文标题:基于Unity2D制作横板2D小游戏 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1703267074h444749.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论