基于Unity3d仿Minecraft沙盒游戏的设计与实现_第1页
基于Unity3d仿Minecraft沙盒游戏的设计与实现_第2页
基于Unity3d仿Minecraft沙盒游戏的设计与实现_第3页
基于Unity3d仿Minecraft沙盒游戏的设计与实现_第4页
基于Unity3d仿Minecraft沙盒游戏的设计与实现_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

基于Unity3d仿Minecraft沙盒游戏的设计与实现DesignandImplementationofMinecraftSandboxGameBasedonUnity3d

内容摘要随着时间的推移,人们的生活方式发生了重大的变化,在生活中也积累了各种各样的压力,学习上的压力、生活上的压力等等,且各方面的压力越来越大,所以人们通过寻找各种方式来释放自身的压力,其中游戏成为一种不错的选择,游戏也因此开始发展。随着时代还有科技发现,游戏数量和种类越来越多,并且随着硬件和软件性能的不断提高,游戏的质量与娱乐性也越来越高。如繁星般多的游戏的诞生,渐渐融入人们的生活中,促使了游戏广阔的发展前景。沙盒游戏是众多类型游戏里面其中比较特别的一种。沙盒游戏起源于沙盘游戏,沙盘游戏原本就是由玩家利用各种素材搭建出自己独特的场景的一种游戏,沙盒游戏也正好继承了这一特点。众多不同主题的沙盒游戏里面,都有一些共同的特点,例如没有清晰明确的主线,所有事件都要玩家自己触发;玩家最根本的目标是在游戏中活下去,其次是探索地图;地图广阔,由多种多样的游戏环境组成;游戏元素多样化,多种元素共存一体,还有最大的特点是玩家可以改变世界,甚至是创造世界。本论文探究基于Unity3D的仿Minecraft游戏的开发。在沙盒式游戏中,Minecraft是极为出名的,它可以让玩家可以肆无忌惮地发挥其创作才能。通过学习制作一个仿Minecraft的沙盒式游戏,不仅可以学习到如何制作一款沙盒游戏,学会使用Unity3D开发游戏,还可以培养我们的分析与解决问题的能力。本篇论文围绕本游戏基本的需求功能,来设计出本沙盒游戏的大概的组成部分,然后再编写脚本代码来实现游戏需求中的各个功能。关键词:Unity3DMinecraft沙盒游戏

Abstract Withthepassageoftime,people'slifestyleshaveundergonemajorchanges,andvariouskindsofpressureshaveaccumulatedintheirlives.Thepressuresonlearning,thepressuresonlife,etc.,andthepressuresinallaspectsareincreasing.,Sopeoplefindwaystoreleasetheirpressure,andgameshavebecomeagoodchoice,andgameshavestartedtodevelop.Withtheeraofscienceandtechnologyalsofoundthatthenumberandtypeofgamemoreandmore,andwiththecontinuousimprovementofhardwareandsoftwareperformance,qualitygamesandentertainmenthavebecomemoresophisticated.Thebirthofgamesasmanyasstarshasgraduallyintegratedintopeople'slives,promptingthegame'sbroaddevelopmentprospects.Sandboxgamesareaspecialoneofmanytypesofgames.Thesandboxgameoriginatedfromthesandboxgame.Thesandboxgamewasoriginallyagamewhereplayersusedvariousmaterialstobuildtheirownuniquescenes.Thesandboxgamealsoinheritedthisfeature.Manysandboxgameswithdifferentthemeshavesomecommonfeatures.Forexample,thereisnoclearmainline,andalleventsmustbetriggeredbytheplayer;themostbasicgoaloftheplayeristosurviveinthegame,followedbyexploringthemap;themapisvastItconsistsofavarietyofgameenvironments;gameelementsarediversified,multipleelementscoexisttogether,andthebiggestfeatureisthatplayerscanchangetheworldorevencreatetheworld.Inthispaper,basedonUnity3DexplorethedevelopmentofimitationMinecraftgame.Insandboxgames,Minecraftisextremelyfamous,itallowsplayerstounleashtheircreativeabilitieswithimpunity.BylearningtomakeasandboxgamethatmimicsMinecraft,youcannotonlylearnhowtomakeasandboxgame,learntouseUnity3Dtodevelopgames,butalsocultivateourabilitytoanalyzeandsolveproblems.Thispaperfocusesonthebasicrequirementsofthisgametodesigntheapproximatecomponentsofthissandboxgame,andthenwritescriptcodetorealizethevariousfunctionsinthegamerequirements.Keywords:Unity3DMinecraftSandboxgame广东东软学院本科毕业设计(论文)目录第一章绪论 第一章绪论1.1选题的目的和意义科技的不断发展,让人们的生活水平越来越高,游戏也变成人们生活中的一部分,对玩家而言更是如此。玩家的需求让电子游戏的内容与形式越来越多样化,对游戏的各方面的要求也越来越高。其中因大多数玩家的需求,更真实的感官体验自然而然地变成了玩家们的追求,而玩家们的追求促使它逐渐演变成电子游戏的一种发展方向,这时,3D游戏这一分类出现在玩家们的视线里,如期望般让玩家带来真实的感官体验。与传统的2D游戏相比,3D游戏能让用户在视觉上感觉更加真实和享受。因此,做一款3D游戏,不仅是为了符合玩家们的口味,也是为了迎合游戏市场的需求,在游戏市场站稳脚跟。Unity3D是2004年由一家美国的视频游戏开发商开发的一款游戏开发引擎,因为Unity3D操作简单,窗口功能明确,自身功能强大,使得一些想进入游戏开发行业的人员可以快速入门,也吸引了不少游戏开发人才学习使用Unity3D开发游戏;使用Unity3D开发游戏的成本较低,而且开发周期相对较短,所以Unity3D的使用在游戏行业前景上十分广阔。Unity3D的各种特点优点,加上目前游戏市场前景相对不错,使得许多游戏公司想用Unity3D开发的游戏在游戏市场分一杯羹,因此各个游戏公司都开始高薪招聘使用Unity3D开发游戏的游戏开发人才。积极的游戏市场、诱人的工作薪资,还有许多乐观的因素,使得Unity3D游戏开发的前景越来越好。从各种游戏视频中,其实可以发现在很多游戏和3D技术开发使用中都或多或少有一些Unity3D的影子,例如在一些游戏里会有第三人称视角和第一人称视角之间的来回切换的功能,在Unity3D中通过对摄像机的来回切换就可以实现这样的功能。丰富的功能,简单的操作,低廉的成本,广阔的市场,这就是Unity3D为什么如此火的原因。Minecraft,看着这个英文名可能有人知道是什么,但很多人应该是对这个英文单词一脸陌生,其实翻译过来就是我的世界。在众多的沙盒式游戏中,我的世界可以说是最出名的,在世界各地都有这款游戏的玩家。在我的世界里,玩家可以对开放式的无限地形做出任意的改变,随地可得的游戏素材,有大概的主线剧情和丰富的支线成就系统,让人眼花缭乱的合成系统,多种玩法模式选择,模仿现实生活中数字电路的红石电路,允许加入各种游戏mod丰富游戏模型和玩法,这些特性将这个游戏变得与现实世界更加贴合,让各种游戏玩家都可以在这个游戏里面找到符合自身兴趣的玩法,让各种艺术创作者可以在我的世界里面创作出属于自己独一无二的作品。多种多样的游戏特性再加上简单易懂的操作过程,使得游戏在上线没多久就吸引了众多玩家进入这个创作无限的开放性沙盒游戏,到现在我的世界已经衍生出许多二次艺术创作。本次选择模仿我的世界的无限随机地形和基本玩法,制作一款简单的仿Minecraft(我的世界)的沙盒游戏。同时选择制作这沙盒游戏为课题也是想通过热门游戏的形式来熟悉和了解Unity的相关技术操作,从而在未来能在开发3D游戏的主流趋势下站住脚跟。1.2国内外的研究与发展现状1.2.1国外发展的现状在1969年的欧美国家,第一款网络游戏悄然诞生,有个人为“柏拉图”(PLATO:ProgrammedLogicforAutomaticTeachingOperation)系统编写了一个软件,这款软件可以同时让两个用户联机打同一款游戏,这就是网络游戏最初的雏形。之后在九十年代初,世界第一款3D第一人称射击游戏被美国的IDsoftware的创始人之一的约翰·卡马克与他的团队开发出来,其公司研发的Doom游戏引擎也成为历史上第一个3D游戏引擎。在20世纪末,世界各主要发达国家的游戏产业格局已基本形成并开始大规模发展,其中日本因为自然资源相对匮乏,看到游戏产业发展前景的日本政府便选择游戏娱乐产业为国家提供经济收入的途径之一,而游戏产业也不负众望,成为国民经济的重要支柱。游戏产业初露锋芒,世界多个经济强国都嗅到了金钱的味道,纷纷把游戏产业当做国家的重要支柱产业来发展,其中韩国政府的做法更甚,让电子游戏甚负担起了振兴国民经济的使命,将游戏定位为文化产业的核心,在今天看来,韩国政府的选择的确是挺明智的,其游戏产业也成为了韩国的经济命脉,给韩国带来了充足的内需和出口。1.2.2国内发展的现状中国在游戏行业相比其他国家起步较晚,1998年6月的《联众游戏世界》是中国网络游戏正式出现的开端,而国内首款自主研发的3D游戏开始于2003年。中国的游戏厂家主要集中于北京、上海、广州、深圳、成都等城市。到目前为止,我国有许多游戏厂家推出了许多有强大市场影响力的游戏作品,例如《大话西游》、《传奇》、《天龙八部》。而且,网络游戏的兴起也带动了其他相关产业的发展。虽然在国内,在3D游戏方面已经有了明显的进展和较多的研究,但是因为3D游戏引擎的开发需要很多的人力财力,一般的小型游戏公司都无力承担,所以国内自主研发的3D游戏引擎还是十分稀少,小型游戏公司都是选择其他价格相对便宜且技术成熟的游戏引擎和开发工具,例如本文所讲的Unity3D游戏引擎和与之相提并论的寒霜引擎和虚幻引擎。1.2.3未来发展的启示综上所述,通过对比国内外的发展现状,可以看出虽然我国的游戏开发还未发展到国外的水平,但是国内的发展前景还是很好的,而且现在国内的游戏开发人才也是越来越多,相信在未来我国的游戏行业会越来越好。1.3论文设计思路本论文从最初构想到分析,结合了一些游戏开发资料,设计出了一个沙盒式游戏的制作过程,其中具体介绍游戏的制作步骤,包括游戏的功能实现和一系列实现代码。论文分为六个章节,大概内容如下: 第一部分:绪论,主要阐述该毕业设计的目标和意义和国内外相关内容的研究和发展。 第二部分:大概介绍本游戏制作时所使用的的各类开发工具。 第三部分:介绍本游戏的需求分析,包括目标、任务和功能需求分析。 第四部分:介绍本游戏的总体设计。 第五部分:介绍本游戏各个组成部分的代码的实现。 第六部分:测试游戏并进行打包封装。 第七部分:对本次的游戏制作的总结和反思。

第二章系统开发工具与相关技术本章主要说明本沙盒游戏开发时所使用到的各类开发工具和与之相关的技术,并着重介绍本游戏开发所使用的的Unity3D游戏引擎。2.1Unity3D游戏引擎2.1.1Unity3D软件介绍丹麦UnityTechnologies公司开发为了更快更好地开发游戏,便开发了的一款支持多平台的综合型游戏开发工具,这个工具就是Unity3D,全球开发者都因为其成熟的开发环境和简便的使用方式而赞不绝口。它提供了目前最好的跨平台服务,在正常情况下,平台之间的各种差异性经常会影响到游戏的开发进度,但是Unity3D作为一款支持多平台的综合型游戏开发工具,可以把游戏在所有主流平台之间完美移植。为了更好地帮助游戏开发者开发和维护游戏,Unity3D提供了许多使用方便个、功能强大的工程视图,其中最基础的工程视图是project视图,hierarchy视图,inspector视图,scene视图和game视图。project视图用于查看存放游戏中的资源文件,比如模型、材质、字体等素材,还包括该游戏的各个场景;hierarchy视图用于查看已打开的游戏场景中的各个组成部分;inspector视图用于展示游戏物体的各种属性,前提是当前用鼠标选中的,否则视图不会有属性显示;scene视图用于查看存放在游戏中模型资源,游戏内所有的模型、材质、灯光都可以在此视图查看,也可以直接通过拖动project视图内的素材到此视图来创建需要用到的模型;game视图用于观察游戏的运行,在此视图无法编辑游戏物体,但可以清楚地看到游戏的运行效果,以达到临时测试运行的作用。2.1.2API接口Unity3D丰富的API可以帮助游戏开发者完成各种需求。API是一些已经定义好的公共函数,可以让游戏开发者在不需要了解内部方法的实现过程就可以得到函数输出的结果。Unity3D提供了丰富的组件和类库,让开发者可以随意调用组件去实现自己的功能。通过这些API函数,开发人员可以很方便地实现项目的初始化,熟练掌握和使用这些API对于游戏开发效率提高很重要。2.1.3物理引擎近年的游戏中,有很多游戏都开始注重对物理引擎的利用,比如绝地求生中重力对子弹的影响,人类一败涂地中角色对物体的作用等。这几年来,许多游戏都开始重视物理引擎,因为现在的玩家除了关注游戏的关卡是否好玩,游戏类型是否符合玩家心中的类型,游戏的可玩度高不高,也开始关注游戏带给玩家的真实感和代入感,而一个游戏对象的设计都尽量符合其现实物体的特性,这样游戏才会显得真实可信,这样玩家才能在游戏中获得更大的真实感。在Unity3D游戏设计的物理引擎中,刚体、碰撞、材质以及关节运动等一系列组件为引擎的组成部分。游戏物理引擎的主要作用就是模仿物体在现实生活中受到外力作用时的互相影响、互相做力的作用的表现的现象。通过该游戏平台的物理引擎得到的这些逼真的游戏体验会让你产生这就是一个在游戏里创造现实的错觉。2.1.4Unity常用生命周期的函数传统的代码程序一般都是从规定的函数入口开始运行,而Unity3D的代码是模拟一个事物的生老病死一样,用生命周期事件代替一般的流程性编译,通过编译这些生命周期内的事件。这些生命周期函数在Unity内部不断地迭代,最终就会产生游戏运行时在摄像机前表现出来的结果。下面按照生命周期介绍Unity3D中一些常用的事件函数:Start():只有脚本挂载的游戏对象在被启用的时候才能够被运行。Update():如果脚本在开始就启用了MonoBehaviour,那么在游戏运行的时候就会一帧调用一次。Update函数的作用就是更新每一帧后脚本挂载的对象的状态,一般来讲游戏都是以帧为单位进行状态更新,因为大多数游戏的逻辑都是按帧率进行执行的。FixedUpdate():如果脚本在开始就启用了MonoBehaviour,那么在游戏运行的时候就会以开发者设定的固定帧调用一次FixedUpdate函数,如果设定的固定帧是一帧,那么FixedUpdate函数执行的结果就与Update函数执行的结果一样,两个方法不同的地方就是FixedUpdate函数可由开发者去控制执行的频率但是Update函数不可以。有一点需要注意的是,在处理Rigidbody刚体的时候,应使用FixedUpdate函数去处理而不是Update函数,因为设备的性能或者是其他的原因,Update函数调用的频率有可能是不一样的,这会导致使用Update函数处理刚体的时候刚体的运动轨迹就可能会很异于现实生活,但FixedUpdate函数是以固定时间去调用,所以就不会发生这样的情况,刚体的运动轨迹看起来就会比较平滑。2.1.5用户图形界面本文中沙盒游戏的用户图形界面主要使用UGUI进行UI界面的开发。图形用户界面的英文简写是GUI,OnGUI、NGUI、UGUI等都是Unity3D中的UI的分类。Unity的GUI系统被称作UnityGUI,UnityGUI内含有多种功能齐全的UI控件,通过在UI界面中的创建控件操作,就可以同时完成控件实例化,定位和功能定义,然后开发者只需要写少量的脚本并将脚本挂载到相应的控件上,让控件可以控制运行挂载的脚本,就可以实现多种多样的功能。2.23DsMax软件3Dsmax是一款基于计算机操作系统开发的三维建模软件,由discreet公司开发,因为功能强大所以成为游戏开发中常用的游戏建模工具之一。本软件在开发出来后原本的用途是使用本软件制作出动画,所以在此之后被一些影视制作者看重,然后被进一步用于影视片中的特效制作。虽然3DsMax功能强大,在学校有学习过一些该软件相应的操作,但是对于我来说,让我建造游戏的模型还是有些勉强的,所以在在这里只是简单介绍一下3DsMax的用途,本游戏内使用的模型都是在网上找到的制作好的模型,但因为建模文件格式有可能不是Unity3D能直接导入使用的格式或者建模文件有错误,所以需要使用3DsMax检查建模是否正常,然后再导出为.fbx格式的模型文件在导入到Unity3D中使用。2.3C#开发语言C#是一款面向对象的编程语言,由微软发布出来。C#有许多特性与Java的许多类似,因此跟Java一样,C#也有许多程序员使用。虽然C#是可以跨平台运行,但是这个跨平台的前提是需要有特定的虚拟机,所以在没有虚拟机的情况下在其他平台是无法运行C#代码的,但因为Unity3D支持平台开发,而且支持使用C#进行脚本编程,所以才使C#可以多平台编译;语法清晰明了,类库使用方便,这些都是C#的有点,或许这也是Unity3D支持C#进行脚本代码开发的原因。2.4VisualStudio2019VisualStudio是在Windows平台上流行的的集成开发环境(IDE)。VisualStudio有着大多数IDE都有的功能,支持代码的编辑、调试运行和封装打包,而且还有许多其他的功能,可以帮助开发者减少开发难度;目标使用人群是编写在微软支持的所有平台上运行的代码的程序员,VisualStudio目前支持的编程语言有C++、C#、F#、R、Python、VisualBasic、TypeScript和JavaScript。

第三章游戏设计本章内容主要是本沙盒游戏的各部分组成,并进行大概的阐述,以明确本游戏开发的目标和功能需求。3.1游戏组成本沙盒游戏由两大部分组成,分别是游戏场景和游戏人物两个部分,游戏场景由游戏UI界面和游戏地形组成,是玩家可以自由查看的部分,游戏人物是玩家操控的游戏物体,是玩家用于体验游戏的游戏对象。具体游戏功能组成如图3-1所示。图3-1游戏组成部分 3.2游戏场景设计本游戏模仿Minecraft,将游戏整体分为三个场景,分别是开始场景,加载场景和游戏内场景。开始场景为UI界面,该界面模仿Minecraft开始界面的布局,以游戏标题和三个按钮组成,按钮用来进入游戏内场景和进行游戏的部分设置。加载场景插在开始场景和游戏内场景之间,让玩家有一种游戏正在加载的感觉,同时可以在加载界面加入游戏提示,用于提示玩家。加载界面用了游戏界面的截图作为背景图,且在加载条上使用了与背景图颜色相关的颜色作为加载条颜色,用Minecraft中让玩家最熟悉的草方块作为加载条图案,贴合该游戏的主题。游戏内场景就是游戏运行时的界面,是游戏中非常重要的构成,元素由与Minecraft游戏中相似的游戏道具、地形、环境、建筑等元素组成,是整个游戏非常重要的构成元素,此场景就是让玩家体验整个游戏的场景。3.2.1开始场景设计开始游戏界面与Minecraft的开始界面类似,在游戏窗口的正上方显示本游戏的名字,接着在下方的位置放置开始场景所需要的开始按钮、设置按钮和游戏退出按钮,其中点击开始按钮则进入游戏加载页面,点击设置按钮则弹出设置窗口进行游戏设置,点击退出则关闭游戏。开始界面的组成如图3-2所示。图3-2开始场景组成3.2.2加载页面设计加载页面由进度条、背景图片和游戏提示文字组成。加载进度条放在窗口总体位置的下方,然后游戏提示在进度条上方的位置,用于提示新手玩家如何玩这款游戏。待进度条到最后的时候,通过点击任意按钮跳转到游戏场景并开始游戏。加载页面组成如图3-3所示。图3-3加载场景组成 3.2.3游戏内场景设计因为本游戏为仿Minecraft的沙盒游戏,所有的游戏地形搭建都为随机生成,所以刚进入场景时没有地形。界面开始应有游戏设置的按钮,用于让玩家可以在游戏中也可以修改部分游戏设置。图3-4为游戏内场景组成的示意图。图3-4游戏内场景的组成 3.3游戏人物设计3.3.1人物模型设计因为这是一个沙盒游戏,所以游戏人物相对其他模型要求十分精细的来说就十分简单,人物只需要几个方块,调整大小后就可以拼搭成游戏所需要的游戏人物。对应所需要的人物模型我从网上找到了与Minecraft主题比较贴合的模型,但因为下载下来的模型不是Unity3D所支持的.fbx格式,因此我需用用到3DMax,将模型导入到3DMax之后再将其另存为.fbx格式导出,这样我就可以将人物模型导入到Unity3D中使用了。模型导入的方法十分简单,这里又突出了Unity3D强大的一点,我们可以直接将模型拖动到Project视窗内,Unity3D就会自动为我们导入模型到对应的文件夹内。图3-5为人物模型。图3-5人物模型3.3.2人物功能的实现导入人物模型后首先调整好人物相对游戏地形的大小,然后给人物添加控制器、刚体和碰撞体,这样任务就具有了真实的物理属性,可以在游戏中与场景物体产生碰撞。 游戏人物所需要的功能有人物移动,地形的破坏、物品的创建和素材的碰撞获取。功能的添加是用脚本实现的,在这里我选择通过给人物添加脚本做例子,在脚本里添加移动方法,让玩家可以随控制人物的移动。我默认设置了WASD键为人物前后左右的移动按键。其实Unity3D有许多非常好用的插件,例如人物控制器。使用人物控制器,我们可以减少许多代码的书写,且可以更加高效和方便让玩家地控制人物模型的移动,一般人物控制器默认的移动按键为WSAD键。如果有一些特殊的方法,我们可以使用VisualStudio2017来编写自己所需要的代码,来实现我们所需要的游戏功能。游戏人物的功能组成如图3-6所示。图3-6游戏人物功能组成

第四章游戏总体设计本章是结合前面第二章、第三章的内容来阐述游戏总体的设计,并对各部分的设计进行详细的介绍和说明,明确游戏各部分的设计明细和实现方法,是游戏实现过程更加清晰,方便进行之后游戏开发的流程,减少异常情况的发生,有利于之后游戏的完善和其他玩法的开发。4.1开始场景设计第一个场景为开始场景,包括开始游戏界面和设置界面。4.1.1开始场景开始场景是一个2D的UI界面,界面使用了Unity3D的UI系统进行制作,在hierarchy视图中右键会弹出选择选项,选择里面的UI选项,再选择Canvas画布选项,这样就可以新建一个画布组件,我们就可以在上面挂载各种各样的组件,例如Text文本、Image图片、Button按钮、Slider滑动条、Toggle选择框,在本页面我使用了图像组件设置了整个开始界面的背景图,用文本组件设置了游戏名,然后用三个按钮设置了几个点击事件,开始界面如图4-1所示,对应的点击事件如下:Start按钮:用于进入游戏加载场景。当玩家使用鼠标选择点击此按钮时就会跳转到游戏加载场景。按钮会用不同的颜色变化来提示玩家目前在把鼠标移动到按钮上方或者正在点击按钮。Setting按钮:用于打开游戏设置界面。设置界面会在点击设置按钮后在摄像机前显示,并发出弹出窗口的提示音。玩家可以在设置界面修改特效声音和查看设置操作方式等设置选项。Quit按钮:用于退出游戏。点击此按钮则停止游戏并关闭游戏窗口。点击事件基本都是由自己编写脚本后然后通过一系列操作挂载到按钮上,这样才能在点击按钮的时候触发相对应的点击事件。具体挂载脚本的操作就是先在游戏场景中右键添加一个空对象CreateEmpty,这时hierarchy视图中默认会在最后一个游戏对象后面添加对象,点击空对象让空对象的属性信息出现在inspector视图中。在inspector视图中有一个AddComponent按钮,这个按钮就是为对象添加组件或者脚本的按钮。点击AddComponent,在弹出的选项框中搜索选择自己刚刚编写好的脚本,这样就可以在空对象上挂载自己编写的脚本了,然后把空对象挂载到按钮上的点击事件,这样就可以在点击事件中选择点击后触发的事件。在开始按钮挂载脚本添加点击事件后会如图4-2所示。图4-1游戏开始场景 4-3Button添加点击事件示意图4.1.2设置场景点击设置按钮会打开游戏设置界面,制作设置界面需要创建在Canvas层级下创建一个Panel组件,命名为Setting,然后再在Setting下创建Text文本内容、Toggle选择框、Slider滑动条、Button按钮,在文本内容添加操作方式说明,然后再选择框挂载脚本这样就可以控制音效播放,在滑动条挂载脚本用于控制音效声量,然后再设置界面右上方添加设置窗口关闭按钮,在右下方添加应用按钮,然后再这两个按钮上挂载脚本添加点击事件,这样我们可以设置完后,直接点击关闭窗口按钮就会不保存修改后的设置然后将设置界面隐藏,如果想要应用设置就右下角的应用按钮,然后设置界面会在保存设置后隐藏。设置界面如图4-3所示。4-3设置界面示意图4.2加载界面 加载界面是指在进入正式游戏界面前的过渡场景,可以让玩家不会进入游戏界面后因为游戏场景正在加载而卡顿在原地无法操作。 4.2.1.加载界面的功能过渡界面的功能是在场景切换的时候,如果游戏场景资源过大,有可能会导致进入游戏场景的时候玩家会在原地等待游戏加载无法操作,这时候就需要加入游戏加载场景。因为游戏主场景的游戏对象比较多,所以只能使用异步加载SceneManager.LocalSceneAsyne()方法,因为如果直接使用SceneManager.LocalScene()方法加载场景的话会有明显的卡顿现象。用SceneManager.LocalSceneAsyne()方法加载场景,就可以在运行加载场景的同时异步加载游戏场景,这样等加载场景完成的时候就可以跳转到加载好的游戏界面了。跳转场景如图4-4所示。 4.2.2加载界面的制作与开始场景相似,也是一个UI界面,首先添加Canvas画布组件,然后在画布组件层级下添加Panel画板、Text文本内容、Slider滑动条组件。然后一样在hierarchy视图中创建一个空对象,然后在inspector视图添加自己刚刚编写好的异步加载场景方法的脚本,这样就可以在空对象上挂载自己编写的脚本了,然后把空对象挂载到按钮上的点击事件,选择对应脚本中的异步加载方法,这样就可以在点击开始游戏按钮后跳到加载场景且异步加载游戏场景了。 图4-4加载界面的示意图4.3游戏场景 玩家可以正式放开手脚去创作玩耍的地方就是本游戏的游戏场景,本沙盒游戏的游戏场景主要是由游戏地形和游戏界面组成。游戏地形是人物角色所处的地方,而游戏界面UI是游戏场景中的UI界面以及游戏菜单UI。4.3.1游戏界面的功能游戏地形是玩家进行游戏的环境,在本沙盒游戏中玩家可以对地形进行任意的操作,例如破坏、创建。而且因为本游戏地形采用的是随机无限地形生成,所以玩家可以无限采集素材,做出无限大的、属于自己的地形环境。游戏的UI界面包括血量UI、物品栏UI,背包UI和返回菜单UI。物品栏UI的作用是显示玩家可以通过快捷键使用的物品,背包UI是显示玩家目前所拥有的的素材的种类和数量,而且可以通过拖动素材将素材放入物品栏,游戏菜单UI是用于返回开始界面、进行音量控制和查看游戏操作。4.3.2游戏地形的创建因为游戏地形是用随机无限生成的方法创建的,所以本游戏地形是通过代码进行生成的。无限生成的原理是通过二维柏林噪声函数通过循环生成三维地形,方法是通过给定范围内遍历每个x和z坐标,然后用0到样本的素体voxels填充整个世界,其中样本是在坐标(x,z)处对柏林噪声函数进行采样的结果。因为计算机资源和硬件限制,我不可能在不遇到计算极限的情况下显示无限的世界,所以我只对当前的坐标为中心的范围进行采样。单纯使用柏林噪音函数生成三维地形会显得不够自然,与现实的地形有些差别,所以我将几个不同频率和振幅的柏林噪声函数相加,这样生成的函数可以生成更加符合自然地形的三维地形。这种地形生成方法叫做Octaves倍频分层叠加地形设计。生成的地形示意图如图4-5所示。 然后通过给定位置的函数值结果决定给定位置所使用的的素体voxel类型,例如,如果得到的函数值是0.5,则使用水的预制体去填充这一模块,如果是0.7则使用泥土去填充它,这样我们就可以把整个地形用各种预制体填充完整,做出一个真正的有山有水的地形。填充后的地形示意图如图4-6所示。图4-5地形生成示意图图4-6用素体填充后的地形示意图4.3.3游戏界面UI的创建游戏的UI界面包括血量UI,物品栏UI,背包UI和返回菜单UI。血量UI处于物品栏UI的上面一点的位置,显示当前为玩家人物的血量,如果有血量变动,则会调用对应的脚本,让UI会发生相应的变化,例如扣除一颗心的血量时,血量UI就会将从右开始计算的第一颗红心改变成黑心,以代表玩家扣除了一颗心的血量。血量UI示意图如图4-7所示。图4-7血量UI示意图 物品栏UI处于整个游戏窗口的正下方,会显示玩家人物背包中已有的且放入物品栏的素材,可以通过按下相应的快捷键来调用物品栏右下角对应快捷键的素材。物品栏UI的示意图如图4-8所示。图4-8物品栏UI示意图背包UI位于整个窗口的中心,背包UI默认显示状态是false,当点击打开游戏背包的快捷键时就会将显示状态改成true,这样就可以做出背包UI的打开与关闭。背包UI显示玩家人物在当前世界中获取的素材和素材的数量,当玩家获得某一素材的时候,背包里就会创建素材对应的图标,并计算素材的数量,数量显示在素材图标的右下角。如果玩家想将素材放入物品栏,可以通过使用鼠标拖动素材图标到背包UI最下方的一栏,这样就可以将素材放入物品栏。背包UI的示意图如图4-9所示。图4-9背包UI的示意图游戏设置UI跟开始界面的UI相似,设置界面需要创建在Canvas层级下创建一个Panel组件,命名为Setting,然后再在Setting下创建Text文本内容、Toggle选择框、Slider滑动条、Button按钮,在文本内容添加操作方式说明,然后再选择框挂载脚本这样就可以控制音效播放,在滑动条挂载脚本用于控制音效声量,然后再设置界面右上方添加设置窗口关闭按钮,在右下方添加应用按钮和返回开始界面按钮,然后再这两个按钮上挂载脚本添加点击事件,这样我们可以设置完后如果不想保存设置就可以点击关闭按钮直接关闭设置窗口,如果要应用设置就点击应用按钮应用设置然后关闭按钮,如果想退出游戏则可以打开设置界面,点击里面的返回菜单按钮返回到开始界面,通过开始界面的退出按钮退出游戏。

第五章游戏代码实现本章会结合前两章的内容来实现编写游戏的代码。本文不会展示本游戏实现的全部代码,但会通过阐述相关的实现逻辑来说明本游戏几个场景中主要代码脚本实现的方式。5.1游戏开始界面代码实现开始界面需要调用到脚本的地方有游戏标题、开始按钮、设置按钮、退出游戏按钮。5.1.1游戏标题游戏标题使用了颜色渐变的脚本,可以让字体颜色从一种颜色到另一种颜色渐变。该脚本是通过继承BaseMeshEffect,然后用代码编写出颜色渐变的方法,最后重载函数以实现颜色渐变的操作。然后将代码挂载到标题上就可以设置标题字体的颜色变化了。部分实现颜色渐变的代码的示意图如图5-1和图5-2所示。图5-1设置整体颜色渐变方法图5-2设置每个字体颜色渐变方法5.1.2开始按钮开始按钮主要实现的功能是界面与界面之间的跳转,这里需要调用的方法是SceneManager类的LoadScene()方法,这个方法可以在调用此方法的时候让场景跳转到游戏设定的场景,这里我设定了点击开始按钮的时候跳转到加载场景。具体代码如图5-3所示。图5-3跳转场景5.1.3设置按钮设置按钮上主要挂载的脚本代码的作用是显示和隐藏设置菜单和调整音乐音量和是否播放音乐。显示和隐藏菜单的方法是调用游戏对象属性中的GameObject.SetActive()方法,该方法可以设置该游戏对象对相机是否可视,如果为true则相机可以发现该游戏对象,玩家也就可以看到该对象出现在相机里,如果为false则无法看到该游戏对象。我们可以利用这一方法来实现设置窗口的显示和隐藏。具体代码如图5-4所示。图5-4窗口的显示和隐藏游戏音效播放和音量控制是由设置窗口中的Toggle选择框和Slider滑动条控制的,如果选择框选择上,那么游戏音效就会播放,去掉就会立刻关闭游戏音效。拉动滑动条则可以调整音效的音量。具体实现代码如图5-5所示。图5-5游戏音效的播放和音量的控制5.1.4退出按钮退出按钮上挂载的是退出整个游戏的脚本。退出整个游戏只需要调用Application.Quit()这个方法就可以退出整个游戏。我将退出游戏的代码挂载到退出按钮,使我们可以在点击退出按钮的时候就退出整个游戏。具体实现代码如图5-6所示。图5-6退出游戏脚本5.2游戏加载界面代码实现游戏加载需要调用到的脚本是异步加载脚本,使用异步加载可以让我们在加载游戏对象比较少的场景时同时加载游戏对象比较多的场景,这样我们在切换场景到游戏对象较多的场景的时候就不用等待场景加载游戏对象,直接可以进行游戏交互了。5.2.1异步加载SceneManager.LoadSceneAsync()方法是我们这个加载场景的最重要的方法,当我们进入加载场景的时候就会调用这个方法,这个方法可以帮助我们在一个场景中加载另外一个场景,这样就可以实现处于加载场景的同时利用剩余的资源去加载之后的游戏界面。但是因为现在的电脑性能都十分强大,对于加载本游戏的游戏场景不需要太多的时间,所以我们调用Mathf.Lerp()方法,用于减缓进入游戏界面的进度,这样做出来的加载界面才有使用的意义。当加载进度大于95%的时候我们就可以通过按下任意键的方式跳转到我们异步加载完毕的游戏界面。具体实现代码如图5-7所示。图5-7异步加载5.3游戏界面代码实现在本游戏界面中最主要的代码是随机地形生成、背包UI、物体破坏与创建的代码。随机地形生成是本游戏最主要,也是最重要的脚本,没有实现这个代码就没有本游戏的游戏地形,也就不可能实现本游戏的开发。背包UI的作用是显示玩家人物在当前世界中获取的素材和素材的数量,当玩家获得某一素材的时候,背包里就会创建素材对应的图标,并计算素材的数量,数量显示在素材图标的右下角。物体破坏与创建是原游戏Minecraft的基础功能,玩家可以通过对游戏地形的破坏和创建来做出属于自己独一无二的作品。这里将详细讲述一下随机地形生成代码的实现。5.3.1随机地形生成说随机地形生成之前要说两个概念,一个是chunk块,一个是voxel素体。块是地形生成的单位,将玩家周围的世界分割成相同大小的块,然后为每个块生成地形,然后将多个生成的块拼接起来就是本游戏的地形。素体是块中方块的单位,块中生成的地形的素材都是由素体组成的。当玩家进入游戏场景的时候,脚本就会加载生成玩家人物附近的地形,但是不会加载脚本范围约定外的地形,这样做的原因是为了节省计算机资源。当玩家移动人物角色或视角的时候,如果人物角色到达一定范围就会在脚本约定范围内生成原本没有生成的地形,同时销毁约定范围外的地形,这样做的原因也是为了节省计算机资源。设想一下,如果不销毁不需要的游戏对象,这会大大消耗计算机的资源,等到游戏对象堆积到一定程度,将计算机资源占用到一定程度的时候,游戏的运行将因为缺乏计算机资源而受到变得卡顿,所以。随机地形生成的部分实现代码如图5-8所示。图5-8随机生成地形部分脚本

第六章游戏测试游戏测试是游戏开发中必不可少的步骤,是保证游戏可以正常运行的操作。游戏测试不仅在游戏开发的最后阶段才会进行,在每个功能实现、场景搭建之后都会插入单独的测试方法,这样做虽然会增加游戏开发的时间,但是可以防止游戏中的小功能发生异常导致整个游戏的崩溃。同时,游戏测试也可以验证游戏的功能是否符合游戏设计时设定的需求。完成游戏测试后,游戏的综合质量可以得到保证,同时也可以完善游戏的功能,提高游戏的完成度。完成游戏后,点击Unity3D游戏开发平台左上角的File按钮,选择里面的BuildSetting选项,将三个游戏场景拉进BuildSetting窗口里的ScenesInBuild栏,然后选择以PC平台作为游戏打包后运行的平台,最后点击Build进行游戏封装打包。找到打包好的游戏双击打开,在弹出的游戏总体设置窗口里可以调整游戏的分辨率、游戏素材渲染质量、玩家人数、游戏按键这些选项。调整好设置项后点击Play按钮,游戏就正式开始了。经过测试,鼠标可以在游戏场景中正常点击各个游戏UI,玩家任务可以在游戏场景中自由行动,游戏各基本功能都没有出现Bug正常运行。快捷键的映射和按下快捷键后的反应均无异常,游戏需求里的大部分功能都基本实现,运行时没有明显的卡顿,可以正常使用。下面在三个界面中选几个功能进行测试。6.1开始界面测试在开始界面中测试设置窗口是否正常打开,各个UI是否正常。图6-1设置窗口测试过程中没有其他问题,鼠标可以正常地与UI交互,设置窗口的显示和隐藏也没有问题。6.2加载界面 加载页面需要测试的是加载进度条是否正常,加载完毕后是否进入游戏界面。图6-2加载场景经测试,进度条有正常运行,加载完毕后按下任意键会跳转到游戏界面,加载场景测试正常。6.3游戏内场景 游戏内场景主要测试游戏地形是否正常加载,人物功能

温馨提示

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

评论

0/150

提交评论