滨江学院学年论文题目基于Unity3D在PC端的TPS游戏的开发与设计院系电子系专业电子信息工程学生姓名杨鑫学号20142305047指导教师王新蕾职称讲师二O一七年十月二十五日基于Unity3D在PC端的TPS游戏的开发与设计杨鑫南京信息工程大学滨江学院电子信息工程专业,南京210044摘要:本文详细介绍了基于Unity3D游戏引擎(个人版)的TPS(第三人称射击)游戏的开发与设计的过程,主要包括游戏开发前准备,场景的制作以及游戏角色控制,子弹发射效果,敌对角色生成的实现方法等。并简单介绍了Unity3D引擎及其特点和资源商店的利用。详细阐述了游戏中的各种关键C#脚本程序。实现以键盘控制位置鼠标控制视角的人机对抗游戏模式。游戏操作简单,人物动作细腻多变,场景氛围代入感强,给玩家良好的游戏体验。关键词:Unity3D;TPS;C#第1章绪论1.1基于Unity游戏开发的国内外现状2016年又被称为VR元年。虚拟现实(VR)是当今最前沿的科学技术之一,谷歌,微软,Facebook,苹果,三星,索尼等知名高科技企业对其视为上宾。VR通过计算机虚拟出现实世界,在VR技术影响下,仿佛置身于另一个世界。2016年,是VR技术突破性发展的一年,VR将与各行各业相互融合,产生庞大的岗位需求——VR开发工程师,而Unity已经成为VR内容开发的首选平台。通过使用Unity引擎制作的游戏吸引了全球6亿游戏玩家。,Facebook拥有8.29亿的日常用户。用Unity制作的应用和游戏目前的累计体验量已达到了87亿次。根据Unity官方在2017年8月最新公布的数据[1],Unity中国区的开发者数量、用户活跃度和终端安装量均已经成为全球第一。在世界范围内,Unity占据全功能游戏引擎市场份额的45%,居世界首位。最接近我们的美国,其市场份额只有我们的三分之一。Unity的每月全球活跃用户超过60万。中国区每个月Unity引擎被使用的次数总和高达180万次,居世界首位。美国以150万次使用居世界第二。Unity中国区在3D手机游戏市场的占有份额已经达到75%,超越日本成为世界第一。也就是说在最火的前100款3D手机游戏中,平均每10款就有7.5款是使用Unity引擎制作。很多使用Unity制作的游戏都是跨平台的,其中不乏优秀作品,比如《神庙逃亡2》,《地铁跑酷》,《使命召唤》,《纪念碑谷》等。国内首款基于Unity3D引擎研发的三国题材网游《将魂》[2](现已停运),自2009年初就进入了研发历程,其后则还有骏梦游戏研发的Unity3D游戏《新仙剑OL》[3]。针对Unity3D引擎的研发技术,九众互动CEO朱传靖也曾提过,该引擎基于特定的技术架构,实现了实时生成查看的功能,易用性高,更简化了开发的流程。基于此,九众互动的首款3D网游《将魂》,在游戏品质和研发时间上并没有太多的冲突。在国外游戏厂商应用Unity3D引擎方面,美国Playnet公司目前已经推出了3D军事战争网游《激战海陆空》。此外,俄国Nival公司研发的新型态Dota游戏《Prineworld》在Steam上备受好评,欧美公司的3D魔幻MMORPG网游,都是非常受期待和关注的Unity3D网游。1.2课题研究目的与意义游戏,对于很多人,占据了大学生活的大部分时光,许多大学生玩了4年游戏而碌碌无为。本文以新的视角为广大的游戏爱好者展现良好的发展前景,让大家了解一个游戏的简单制作流程,体验其中的乐趣,致敬每一个愿意把人生奉献给游戏事业的人。Unity的迅速发展让Unity3d从业人才需求不断攀升,并且从业人员的薪资十分可观。以人才招聘来看,目前企业招聘人数呈现上升趋势,一般要求大专、本科学历,一年以上开发经验的人员一般待遇都会在10K左右,高级人才甚至达到20K-25K。随着工作经验和技能的增加,从业人员薪资水平不断增长。目前Unity需求主要集中在一线大城市,北京、上海、深圳、广州等,这些一线城市的薪资水平是非常可观的。从薪资角度来说,Unity3d工程师在棋牌游戏开发的工资能拿到15000元左右,当然还是要看具体的熟练水平的[4]。所以说学习Unity并从事其相关工作,对于大学生来说是不错的出路。当然制作游戏不仅仅局限于此,还要懂美术,音乐,策划等多方面的知识。通过本次课题的研究,不仅是熟悉了Unity开发工具,也为今后参加大型团队游戏制作项目提供了帮助。1.3课题研究内容本文主要介绍的是利用Unity5制作一款TPS游戏的过程,具体内容有:第二章,游戏的相关知识和开发平台的阐述,简单介绍Unity的诞生和优势以及引擎的各种系统和碰撞函数。阐明了游戏设计的基本流程和开发流程。第三章,游戏的的总体设计,定制游戏的主体内容,包括名称,剧情,基本玩法,介绍开发前的项目准备。第四章,游戏各个模块的具体实现,包括场景的制作,主人公的制作,子弹的制作以及敌对AI的制作等等。第五章,PC端游戏打包与发布,简单介绍利用Unity在PC端打包发布的方法。第2章系统平台的阐述和游戏的相关知识2.1Unity5的简介Unity3D是由UnityTechnologies开发的一个让玩家轻松创建例如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一款全面整合的专业游戏引擎。Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows和MacOSX下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windowsphone8和Android平台。也可以利用Unitywebplayer插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac所支持。2.1.1Unity5游戏引擎的诞生业界现有的游戏引擎数不胜数,其中最具代表性的商业游戏引擎有虚幻引擎[5],CryEngine3,HeroEngine,RageEngine等,但因为其价格以及对PC配置要求高让很多个人游戏开发者尤其是学生望而却步。在这样背景下,Unity公司提出了“大众游戏开发”的口号,让开发人员不在考虑价格,提供任何人都可以轻松开发的优秀游戏引擎。2015年3月在旧金山举行的游戏开发者大会上Unity5正式公诸于世。2.1.2Unity5的优势(1)支持多平台跨平台运行,只需开发一次,稍加修改,就可以发布到23多个平台运行。现在,Unity已经可以支持以下平台[6]:移动平台(iOS、Android、WindowsPhone、BlackBerry、Tizen)桌面平台(Windows、WindowsStore、Mac、Linux)游戏主机(PS3、XBOX、Wii)网页游戏(InternetExplorer、WebGL)虚拟现实与增强现实(OculusRift、GearVR)(2)集成开发环境从场景设计、编程、调试到构建、开发游戏的整个生命周期都可以在UnityIDE中完成,效率非常之高。另外,直观而合理的集成开发环境也为开发人员提供了便利。(3)所有功能免费只要你是独立开发者或是没有营收的小公司就符合使用UnityPersonalEdition(个人版)的条件。但上一年营收或资本额超过了10万美金,就失去了使用个人版的资格,就必须购买UnityProfessionalEdition(专业版)。(4)开放社区社区提供了大量的帮助手册和体系化的示例文件,同时,Unity拥有一个资源分享和知识问答的交流平台,包括论坛、博客、在线视频等,以此帮助开发者更为便捷的了解Unity引擎。(5)资源商店Unity3D不仅拥有很强大的功能,丰富的模块,还有AssetStore提供开发过程中所需要的所有资源,具有超强的效能和超高的性价比,使编程周期大大缩短,即使是小型开发团队也可以轻松运作。也可以通过AssetStore销售自己制作的产品,获得利润。2.2相关Unity技术知识2.2.1物理系统Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果使游戏画面更加真实,更加生动[7]。Rigidbody刚体组件,可使游戏对象在物理系统的控制下来运动刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物理引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。Collides碰撞体,碰撞体是物理组件的一类它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。CharacterController角色控制器,角色控制器主要用于对第三人称或第一人称游戏主角的控制,并不使用刚体物理效果。2.2.2动画系统Mecanim动画系统随着Unity4.0的升级而出现,这是一种动画中间引擎,使用其可以轻松制作柔和、平滑的动画效果,它提供了为人形角色提供的简易的工作流和动画创建能力;。Retargeting(运动重定向)功能,即把动画从一个角色模型应用到另一个角色模型上。针对AnimationClips(动画片段)的简易工作流,即针对动画片段以及它们之间的过渡和交互过程的预览能力。这样可以使动画师更加独立地进行工作,而不用过分地依赖于程序员,从而在编写逻辑代码之前就可以预览动画效果。一个用于管理动画间复杂交互作用的可视化编程工具。通过不同逻辑来控制不同身体部位运动的能力[8]。2.2.3渲染系统在Unity里,渲染路径(RenderingPath)决定了光照是如何应用到UnityShader中的。因此,如果要和光源打交道,我们需要为每个Pass指定它使用的渲染路径,只有这样我们才能在UnityShader中访问到Unity为我们准备好的光照信息。Unity的渲染框架支持正向渲染与延迟光照渲染两种渲染模式、任意多光源、主直线光源的多层级阴影渲染以及各种自定义的材质和后置渲染特效。在Unity5.0版本之前,主要有3种:前向渲染路径(ForwardRenderingPath)、延迟渲染路径(DeferredRenderingPath)和顶点照明渲染路径(VertexLitRenderingPath)。但在Unity5.0版本以后,Unity做了很多更改,主要有两个变化:首先,顶点照明渲染路径已经被Unity抛弃(但目前仍然可以对之前使用了顶点照明渲染路径的UnityShader兼容);其次,新的延迟渲染路径代替了原来的延迟渲染路径(同样,目前也提供了对较旧版本的兼容)。2.2.4脚本系统Unity脚本开发是整个游戏开发过程中的重要环节,即便最简单的游戏也需要脚本来响应用户的操作,此外游戏常见的事件触发、游戏对象的创建与销毁等都需要通过脚本来控制[9]。Unity中可以选择两种脚本进行开发,分别为JavaScript和C#。Unity使用的JavaSript语法与网页开发中基本相同,也可以称其为Unity脚本。而C#是一种分别借鉴了C++和Java优点的语言,国内开发主流的还是使用C#语言。Unity5不再支持Boo脚本。本游戏是运用C#进行开发的。2.2.5键盘交互技术键盘交互主要是指能够控制游戏者在游戏场景中进行移动,键盘交互以设置方向键“↑”“↓”“→”“←”或者“W”“S”“A”“D”为控制键,分别用来控制游戏者的“前”、“后”、“左”、“右”的走动。在Unity中,可以通过函数实现这些功能,以用“W”“S”“A”“D”为控制键为例,脚本命名为js,其代码如下:if(Input.GetKey(KeyCode.W)){transform.Translate(0,