基于Unity3D的迷宫解谜游戏设计与实现_第1页
基于Unity3D的迷宫解谜游戏设计与实现_第2页
基于Unity3D的迷宫解谜游戏设计与实现_第3页
基于Unity3D的迷宫解谜游戏设计与实现_第4页
基于Unity3D的迷宫解谜游戏设计与实现_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

摘要□□随着生产力的高速发展,人们的经济能力和消费水平日益增长,伴随的是人对自我情感和自我满足的需要增大,在工作学习之余通过游戏来满足自己变得习以为常。游戏产业在一个拥有着以前从未有过的黄金时期,借助高度功能集成的游戏引擎便捷的进行游戏开发,使得游戏开发也变得不再神秘。其中,Unity引擎的可扩展性以及社区资源数量上有着很大的优势,在本课题中也将使用Unity引擎并且借助于高度扩展性插件fungus进行3D的迷宫解谜类的剧情游戏开发。如今市面上的剧情类游戏大多是将玩家往一个剧情做引导,本课题将剧情以迷宫为载体进行开展,本游戏是让玩家通过自己去发现疑点。在主线上埋伏另外的剧情,以隐晦的方式将第二剧情的线索藏在迷宫的角落,以此刺激对剧情敏感度高的玩家。并尝试把游戏做成一个剧情的闭环,引发玩家思考,通过探索游戏最终提炼出——关爱抑郁症患者的主题。□□关键词:Unity3D迷宫解谜剧情游戏fungus插件抑郁症第二剧情Abstract□Withtherapiddevelopmentofproductivity,people'seconomicabilityandconsumptionlevelareincreasing.Alongwiththeincreaseofpeople'sneedsforselfemotionandselfsatisfaction,itbecomescommonforpeopletosatisfythemselvesthroughgamesafterworkandstudy.Thegameindustryinagoldenagehasneverbeenbefore,withthehelpofhighlyfunctionalintegratedgameengineforconvenientgamedevelopment,makinggamedevelopmentnolongermysterious.Amongthem,unityenginehasgreatadvantagesinscalabilityandcommunityresources.Inthisproject,unityenginewillalsobeusedand3Dmazepuzzlegamedevelopmentwillbecarriedoutwiththehelpofthehighlyextensibleplug-infengus.Nowadays,mostoftheplotgamesonthemarketaretoguidetheplayerstoaplot.Thistopicwillcarryouttheplotwithmazeasthecarrier.Thisgameistolettheplayersfinddoubtsbythemselves.Ambushanotherplotonthemainline,hidetheclueofthesecondplotinthecornerofthemazeinanobscureway,soastostimulatetheplayerswithhighsensitivitytotheplot.Andtrytomakethegameintoaclosed-loopplot,arousetheplayers'thinking,andfinallyextractthethemeofcaringforpatientswithdepressionthroughexploringthegame.Keywords:Unity3DLabyrinthpuzzleFungusplugin depressionHidetheplot广东东软学院本科毕业设计(论文)绪论1.1课题背景随着时代的发展计算机技术的发展和互联网的普及,游戏的趋势从单机逐渐衍生出多人在线游戏,游戏的互动越来越显得真实,游戏的艺术性对玩家而言越发重要。游戏的发展很好的填补了现代人空余出来的时间,互联网和游戏载体即游戏硬件高速发展为游戏产业营造了一个良好的需求市场。12月17日,在2019年度中国游戏产业年会上,中宣部出版局副局长冯士新在致辞中透露,今年以来,国家新闻出版署已批准出版运营游戏1468款,基本满足了企业正常发展需求[11]。根据会议发布的2019年度中国游戏产业报告,中国游戏产业实际销售收入达到230.8十亿人民币,同比增长7.7%。7.7%的增速相比去年的5.3%有所作为提升,在总量调控等多重政策环境影响下,中国传统游戏文化产业结构正在经历这样一个大浪淘沙的阶段[12]。市场对游戏的深度和思想力量要求也越来越高,游戏市场对优秀的剧情游戏如久旱逢甘霖一般饥渴。益智游戏既属于商业策略游戏,又属于休闲益智游戏,是一种以游戏中设置的线索为主题,以解决游戏中最终的益智游戏为主题的游戏,情节一般比较华丽,剧情引人入胜,在现代人对游戏的高要求下,解谜游戏的市场需求也空前旺盛。由此,基于Unity3d的迷宫解谜游戏本身有着巨大的优势,在当前游戏市场的要求下一款主打剧情解谜的3D迷宫游戏也将在在游戏市场大放异彩,同样的,未来一段时间内游戏市场对解谜游戏的需求依旧强烈。1.2选题目的及意义随着游戏行业的高速发展,近些年的游戏也从以前单一的开发模式逐渐多样化,开发的游戏类型还是以mobo为主流,但其他类型的游戏同样的也得到了很好的发展机会。游戏的深度和玩法更能捕获玩家的游玩性,一些浅显的游戏生存力也难以持久,而剧情类游戏很好的弥补了对游戏深度的补充。一个好的剧情游戏应该是开发者与玩家的一场对话,是开发者引领玩家思想的路程。一个好的剧情电影像是讲故事一样的告诉观看者,从而使观看者跟随剧情发展去思考,观看者只能去猜测剧情,进行思考,最后通过观测决定答案的正确与否,这对观看的人的体验来说是不够充分的,甚至很难代入其中去设身处地地思考。而剧情游戏则很好的解决了剧情电影的绝对性和片面性,电影是绝对线性的剧情游戏,游戏是可以选择的立体电影。这是剧情类作品的进化,可以使玩家更加切身处地地体会剧情的变化,游戏提供了一个剧情的世界,玩家可以进入当中作为主角去感受每一处变化。从这看,剧情游戏已经不是一种剧情类作品所需要的技术了,它是剧情类作品呈现在现实生活的一种艺术。本课题论文将开发构建一个万象丛生的3D迷宫场景,其中玩家将以第一人称视角体验剧情游戏的魅力,为训练空间思维能力,提出进行迷宫游戏通过沉浸式的视角,且迷宫模型本身是可旋转的,可以最高的效率和效果来锻炼空间思维能力[13]。并根据故事残留的线索去找寻真相,找到每一个故事中的重要片段并同时根据各种线索的结合进行解密。让玩家切身处地地感受解谜游戏的乐趣,在最后结合每一个片段串联起故事的真相,理解游戏人物的心路变化和感情起伏,引发玩家共感人物,并引发玩家对游戏所引申出来的意义思考。1.3研究方向为了使玩家更加代入地进入游戏的世界并获得深层次的游戏体验,搭建一个能引发玩家思考的迷宫。本次游戏进行开发的研究发展方向主要为以下几点::1.加强角色背景设计,使玩家心理贴近角色内心活动,创作符合逻辑却又在玩家意料之外的剧情走向。通过迷宫这一题材让玩家在做探索场景的同时探索自身推动剧情发展,将迷宫探索和剧情推动更自然地结合。2.利用Unity引擎的开发功能结合故事剧情发展制作支持剧情发展的迷宫,并从中探索如何提升游戏开发的简洁性。3.对游戏模式在剧情方面进行创新的研究,在主线剧情下面隐藏暗线剧情,根据玩家获取线索的不同决定剧情发展的走向,隐藏暗线剧情的关键线索但又在主线剧情中埋下相关的伏笔,刺激玩家的剧情敏感,引导玩家走向暗线剧情做更深层次的剧情展开,以此获得更加深刻的游玩体验。1.4章节简介第一章主要介绍了本课题背景以及研究的目的、意义,并且对研究的方向做了简要阐述。针对目前该类型的游戏做了调查和分析,确定了游戏的核心是与玩家的交流,借游戏这个形式输出内容引发玩家思考。第二章主要介绍了unity3d是什么,以及为什么选择使用Unity3d来开发本游戏。在项目当中还使用了一些其他软件进行辅助开发,本章也针对这些软件进行了介绍,第三章是对游戏的玩法和操作进行了说明,并详细的介绍了故事发生的背景,各个人物的信息,从玩家游玩的角度阐述剧情发展。在解谜游戏的基础上结合剧情对游戏的结尾方式进行了创新,根据玩家的游玩方式推动故事往不同方向发展,开展出两条世界线,一条浮在明面上的世界线,另一条藏在明线下的暗线。第四章将具体讲解我们进行本次游戏的开发的过程,其中包括迷宫的设计、场景的搭建、人物的导入、UI系统的运用、对话框功能的实现、迷宫与剧情的结合和其他具体功能的实现。第五章则将测试整个游戏在开发完成之后的功能实现正常与否、BUG检验、资源占用情况。第六章会对整个课题研究进行总结,对此次课题研究所遇到难点的解决方案进行分析,制作过程中发现的问题以及本人对未来游戏开发行业的期望。

第二章Unity游戏引擎与使用软件介绍2.1Unity游戏引擎在本章节中将会简单的介绍Unity引擎,描述Unity的操作界面,并简略地介绍本次游戏开发过程中常用到的函数,以及介绍Unity引擎开发游戏的优势。2.1.1Unity引擎简介Unity(也称Unity3D)是一套包括图形、声音、物理等功能的游戏引擎,由丹麦的UnityTechnologies公司开发的一个让玩家便携创建诸如实时三维动画、建筑可视化、三维视频游戏等类型互动内容的多平台的游戏开发工具[10]。提供了一个强大的关卡编辑器,支持大部分主流3D软件格式,使用C#JavaScript等高级语言实现脚本功能,使开发者无需了解底层复杂的技术,快速地开发出具有高性能、高品质的游戏产品[14]。Unity是目前主流的游戏开发引擎,是一个全面整合的专业游戏引擎。Unity类似于TorqueGameBuilder,Virtools或Director,Blendergameengine等利用交互的图型化开发环境为首要方式的软件。Unity是跨平台3D游戏引擎,支持的平台包括PCMacLinuxWebiOS、Adroid、Xbox360、PlayStation3等大部分主流游戏平台,还可以将游戏直接导出为Flash格式放到网页上[15]。2.1.2Unity的使用界面Scene(场景)视图:该面板是统一编辑器面板,显示所有在模型场景中使用的东西,照相机,材料等,在这里可以进行观察和调整,搭建和构造游戏所需呈现的画面。Game(游戏)视图:该面板数据显示的是游戏运行时的画面,是游戏公司发布后玩家所能看到的内容,可以通过根据网络游戏面板的效果在场景面板模型进行分析相应的调整。Hierarchy(层次)视图:该面板用于研究显示我国当前发展放在场景面板中的所有的物体对象,以及对象之间的关系。该视图可用来管理当前场景对象的层级,设置父子关系和分立关系。Project(项目)视图:此面板用于显示游戏项目中游戏资源的管理,如材料、模型、字体等。Inspector(检视)视图检测视图:用于显示在场景中当前对象的各种组件参数,该面板数据用于呈现各个研究对象的固有属性,而游戏的整体性能,如对象,标签,位置坐标的名称。2.1.2Unity引擎的优势跨平台:Unity是跨平台3D游戏引擎,包括目前主流的PCMacLinuxWebiOS、Adroid、Xbox360、PlayStation3等大部分游戏平台都支持在Unity上进行开发。开发一次,可导出到多个平台,大量节省了游戏开发的成本和投向市场的时间。易于上手:视图功能对开发者友好,拥有可视化的界面,能在运行过程中时实编辑,编辑过程中也可运行游戏调试,实时查看游戏效果。运行过程中也可对编辑对象进行调整,运行时的调整会在运行停止后失效。对新手Unity也有相应的学习资料提供,自带的例子简单易懂。在官方有详细的文档说明,更在2018年之后更新了带有中文语言的版本,大大的降低了部分学习者的上手难度。开发模式清晰:Unity的开发模式是一个基于Component(组件)的GameObject(对象)系统。在Unity中,几乎所有功能的实现都是依靠Component(组件)完成的,但又不脱离GameObject(对象),GameObject(对象)成为一个空壳,通过Component(组件)的附着使其变得丰富。这种开发模式对开发者进行游戏开发过程来说思路非常清晰。社区资源丰富:AssetStore的出现,这是之前其它引擎不具备的,Unity的社区商店带有丰富的资源,并且在网络上也能够轻易的获取到Unity支持的资源格式,这为制作游戏带来了极大的便利。功能齐全:Unity可实现动画、精灵、音效,简单的模型搭建和模型调整,脚本实现等,功能及其齐全,缩短开发时间,Unity引擎简单易用,几乎集成了游戏开发的所有功能。2.2使用的软件介绍2.2.1Maya软件AutodeskMaya是美国Autodesk公司推出的世界顶级的三维动画制作软件,应用方向包括专业的角色动画,电影特技,影视广告等。Maya工作灵活,功能完善,制作效率极高,渲染真实感极强,是电影级别的高端制作软件[16]。Maya最多见于动画公司,还有影视企业。Maya在windows系统,linux系统和oxs系统都高度适用。各项目之间的配合和运作衔接有度,Maya非常受用于动漫、影视企业的工作辅助。Maya集成了Alias、Wavefront最先进的动画及数字效果技术。它不仅包括一般三维和视觉效果制作的功能,而且还与最先进的建模、数字化布料模拟、毛发渲染、运动匹配技术相结合[17]。Maya也是Unity游戏开发中必要的辅助软件。在一些大型游戏的制作上,Maya强大的图像渲染能力和动画制作都很好的弥补了Unity开发游戏中精美度的不足。在我们的项目中,Maya也充当着必不可少的重要作用。2.2.23dMax软件3DStudioMax,也被叫做3dsMAX或3dMax,是Discreet公司开发的(之后Autodesk公司将其合并)基于PC系统的三维动画渲染和制作软件[18]。作为资深的CG软件,3dMax拥有完整的商业产业链,在影视后期、CG广告、环境艺术、汽车展示、工业效果、城市规划、游戏制作、VR游戏、影视动画等方面有广泛应用3dMax也是Unity游戏开发中必要的辅助软件。在一些大型游戏的制作上,3dMax强大的建模精细能力很适合用来搭建游戏中的场景。在我们的项目中,3dMax也充当着必不可少的重要作用。3dMax和Maya为我们游戏开发中的起到了极大地辅助作用,在模式搭建,动画制作以及格式转换上有不可或缺的作用。由于场景的模型制作仍然需要耗费大量的时间,所以在本次的游戏开发过程中将会使用部分Unity资源商店的内容以及其他来源的模型。2.2.3VisualStudio软件简称VS,全称MicrosoftVisualStudio。是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如集成开发环境(IDE)、UML工具、代码管控工具等等[9]。VS为我们的游戏开发中的脚本编写提供了莫大的帮助,VS的预编写功能使我们游戏开发便携了许多,以及VS的代码报错功能也减轻了我们游戏开发中找寻BUG所消费的精力,是Unity游戏开发中不可或缺的一个工具。2.3游戏平台选择本次开发的游戏平台为Windows,考虑到性能的限制以及平台的使用量,本次的游戏开发将会在Windows上进行,并且游戏支持的平台也为Windows。并且由于Unity的高兼容性,可以在后期针对不同的平台进行优化之后,再单独上线其他的版本。

第三章游戏设计介绍在开始使用Unity3D方面的构思。在本章节中将会介绍游戏设计背景、游戏基本规则、游戏世界的介绍,玩家的剧情视角、游戏的设计意义等。3.1游戏设计背景传统解谜游戏在往往更多的是偏向于以文字游戏的方法去展开剧情,这样的解谜游戏会使玩家在游玩时的乐趣和探索性的趣味减少,从而中间劝退很多玩家。以此为启发,我将剧情的开展放在了每一个谜题当中,并不是以一个讲故事的方式去向玩家介绍剧情,而是让玩家以第一视角亲身经历其中解开每一个谜题的同时对剧情的了解也更加清晰。减少旁白的介绍方式,而是去引导玩家走主线剧情,这样既增加了这款游戏的趣味性,也使玩家更加的声临其中。3.2游戏基本规则3.2.1游戏规则玩家通过搜寻迷宫中的线索来找到走出迷宫的路径,在搜寻路径的过程中找寻每一道门的钥匙,其中玩家的进度将推动剧情的发展,剧情也能给到玩家走出迷宫的提示。3.2.2操作说明在本次开发的游戏中,玩家可以通过键盘进行操控角色。键盘可进行的操作为:W往前移动,A向左移动,D向右移动,S向后移动鼠标可用来触发事件及移动视角。鼠标可进行的操作为:鼠标右键可对游戏内的道具进行点击及拖拽到物品栏,鼠标右键也能对NPC点击触发事件,继续对话,可对GUI进行点击实现各个功能的设置。3.3游戏世界介绍3.3.1人物介绍486:玩家在本次中的名字,486突然降临到这个世界,降临的过程中让他失去了对自己的记忆,同样的对这个迷宫世界一样感到迷茫,在寻找迷宫的出口的路上486找到了自己来到这个迷宫的意义和真相。可可:迷失在迷宫的小女孩,写了一封求救信在等待一个人的来临,是486要进行拯救的对象,也是486来到迷宫世界的原因,是游戏的第一个剧情的核心人物。老头:可可的父亲,一个面向对象的程序员,年轻时的梦想是开发出一款梦幻游戏,在游戏领域取得不扉成绩。但也因此放在家庭的时间减少,对可可的状况并不知情。之后可可不在之后,一直在找寻可可,从家里找不到之后就跑进了迷宫,同样迷失在迷宫里。486问你在这里找多久了,老头抬手发现了自己的表不见了,说了句,不知道啊,身上什么都没有,可能是掉落在迷宫的某处。到这里老头突然对486说:你一定不能在迷宫迷失自己,你要记得你存在的意义。486想起了小女孩的信,跟老头道了别就继续去找了。486不知道的是,老头本身的秘密是486第二个结局的故事线解密的答案。Papa: 在可可很小的时候,那时可可的爸爸妈妈都还在一起,在游乐园玩了一天之后爸爸为可可赢取的玩具。之后可可的爸爸妈妈经常吵架直到离异,爸爸又经常不在家,apa成为了可可的心理支柱。papa是一只可爱的恐龙,在可可因病离世之前一直陪伴着可可。3.3.2场景介绍游戏以一个迷宫为背景,迷宫的主色调是低沉的灰色,凸显出现代的设计风格。在迷宫中放置一个房子、许多大树、门及各种小道具。设计的模式是为了体现出向往外面的美好世界中却被现代建筑包围的一个氛围,当中的一个房子搭建成的“家”也同样被放置在迷宫中间。3.3.3道具介绍一封泛黄的信:看到这封信的时候486开始想起了他是个侦探,是来拯救信中的女孩子的,这位小女孩子名叫可可,而他的名字叫做486。从此开始了拯救小女孩的剧情。小树:在这道长长的围墙尽头的一颗小树相框:小女孩跟一个一个年轻人的合影照片:小女孩躲在树的后面的照片3.4玩家剧情视角3.4.1可可主线剧情:486突然降临到了这个迷宫世界,他对自己的出现感到迷茫,甚至他不知道自己是谁,不明所以的486开始向前迈开脚步,来面对这个世界。486顺着这条路走着,在一个拐角486发现了一张泛黄的纸,好奇的486捡起了这张纸。在捡起这张纸的时候,486想起来了他的身份,知道了他的名字叫做486,他是来拯救这个小女孩的,而这也是一张小女孩的求救信。纸上的内容也映入眼帘,小女孩透露出的无助更加让486坚定了他的任务。486继续往前走着,他在路上遇到了一只叫Papa的熊猫,Papa告诉他,“可可走之前,一个人在家里等着啊、等着啊”。486继续往迷宫深处走,接着486遇到了一个老头,他说他一直在找可可,可是一直找不到,并且老头坚信可可一直在这里,请求486帮他一起找,486答应了老头的要求。486在迷宫的一个角落发现了一颗小树,围墙上看到了外面的树和天空,他对此感到疑惑,是谁在这个地方搭建的迷宫,486结束了猜想继续踏上寻找小女孩的道路。486从围墙上面看到了这座迷宫的某个地方有座房子,486开始猜想那会不会就是Papa所提到的可可之前一直待着的地方,那会不会可可还在里面呢。486找到了通往房子的门,但却打不开,486想应该是老头出门前锁上了。486回去找老头要钥匙,但老头的东西都不见了。486在迷宫的其他地方继续走着,在某个角落里发现了一把银色的钥匙。486拿到钥匙开了门进去了院子,在房子里发现了一个相框,一张是小女孩和一个男人的合照,小女孩笑的很开心照片却是裂开的。另外一翻过来时却还有另一张照片,486小女孩躲在树的后面的照片。486想起了路上的那颗孤独的小树,小树明明在路的尽头,可这里的位置似乎不对。486在树的后面发现了另外的一段路,小女孩在路的尽头写着什么。486过去安慰可可并把她带回了家说可可的爸爸在找可可,让可可回家等待。可可对486恋恋不舍,486把可可安置好了之后也完成了任务从而结束了游戏。至此第一剧情结束,486和可可都获得了一个美满的结局。3.4.1486身份剧情:486在院子里发现了老头的表,从而知道了现在的时间是2020年4月18日下午3点,486觉得有些不对劲,突然486一阵惊醒,想起来了可可信是在50年前的时候写的。发现了可可的求救信息距离现在50年的时间了。486感到一阵揪心的疼。冷静下来之后486回忆起来了之前的种种不对劲的感觉,想起来了老人说的话,小女孩之前的在写的东西,486不愿相信这一切,但486想起来了可可之前写的东西没有带走。486去小女孩在的大树那里,他要知道真相。可可在纸上写着:不要过去草丛那边。486不听劝告,来到了草丛那边的世界。在这里486发现了那张相框照片的另一半,知道了可可的双亲离异的情况,可可在那时爸妈的争吵中变得不再哭泣。486发现了Papa也在这里,这里的Papa告诉486,可可之前患上了抑郁症,只对Papa说话,后来的某一天,可可写了一封信之后便离开了人世。Papa告诉486,Papa这个名字是可可把它当成了可可的爸爸,而可可的爸爸却时常不在家,对可可也少了很多的关心。486继续往前走着,尽头是一封信,是可可的爸爸写的,老头在信里对自己忽略可可的感受做着忏悔。486开始对老头感到气愤。一阵指责之后,老头对486说,486就是可可的爸爸也就是老头,486不愿相信。老头让486去迷宫的尽头看一看,486发现了尽头就是486刚开始背后的那道不一样的墙的背面。上面写满了的是485划正,486说我还要继续去里面找可可,可可还在房子等我。老头跟486说,你再进去会迷失自己的,486没有听老头的话,拿笔写上了第486道笔画,486回头重新进入了迷宫。至此第二剧情结束。本次游戏将致力于在不影响第一剧情的情况下开发第二剧情的世界线,通过玩家获取的线索不同剧情展开也不同,走向的结局也会不同。

第四章游戏设计与实现在本章节中将会介绍整个游戏的设计与实现。从基本的角色移动、第一视角的实现、迷宫世界的搭建、游戏交互的实现都有进行一个较为详细的讲解。本章也将从我开发游戏的视角进行介绍,其中包括我对一些游戏开发遇到的困难的处理,也代表了我开发本次游戏的心路历程。在我思考毕设做什么的时候,我出乎意料的很快就下了决心——做一个迷宫解谜剧情游戏。在所有游戏中,我认为解谜游戏是最能让我一想起可以独立开发便热血澎湃的。我相信做游戏开发的人都有一个自己可以独立开发自己一个游戏的梦想,可以将自己的想法全部付诸其中,我始终相信游戏是开发者与游戏交流自己思想的一种语言,而这次机会也让我有了全面学习Unity的想法和热情。我个人偏爱剧情类的电影,这也让我对游戏开发中的剧情设计抱有热情。本次游戏开发更多的是对本游戏剧情的设计,剧情设计上也始终贯彻着“意料之外,情理之中”的剧情设计理念,力求给玩家留下一个印象深刻的作品,并在游戏的过程中引发玩家的思考。4.1迷宫路线的设计迷宫的搭建最开始我找了一些相关的资料说明,我发现可以用算法进行随机迷宫的搭建,我找了一些随机迷宫的算法进行学习,比如:递归分割算法、深度优先算法和随机Prim算法,但最终实现的模式跟我预想的不是特别合适。于是我回归了最原始的方法,先照着我大概的剧情需求去绘制迷宫,初步绘制的迷宫及路线如图4-1所示。图4-1,迷宫路线初稿根据我设想剧情设置,还需要再迷宫里面添加房子,其中还有第二剧情的路线需要设置,这幅迷宫就很好的满足了我对剧情的初期设想。之后我再从里面延伸出了新的地图路线,具体思路图如图4-2所示。因为在做毕业设计的制作时我已经在实习期,新版的地图也是午休时突发灵感绘制而成的草图,所以为了体现设计最开始的样子,我在这里直接放置了我的设计草图。图4-2,迷宫路线终稿4.2迷宫环境的搭建4.2.1迷宫Floor和Walls的搭建至此我们开始使用Unity进行我们的迷宫游戏的开发,首先我们新建项目,并将其命名为route,新建一个平面命名为Floor,调整Transform数据如图4-3。图4-3,Floor的Transform组件为其添加材质,使平面看起来有草地的效果,呈现效果如图4-4所示。图4-4,floor的效果图创建一个墙取名为Wall,调整Transform数据与Floor相匹配,并为其添加材质使其看起来有砖墙的感觉,效果下图所示:图4-5,Wall的效果图到这里我们开始搭建迷宫的墙壁,我以这块Wall为模板,将砖墙通过复制,移动,调整大小的方式搭建出了迷宫的墙壁,并将这些Wall整合为一个父类,命名为Walls。创建过程中为了使砖墙的位置和我们的迷宫保持一致,我将迷宫的初稿也就是图4-1作为贴图附加到Floor上,Floor的长宽比例也是照着初稿的迷宫格式进行设置好的。这样照着Floor的贴图进行搭建的迷宫可以在搭建的过程中实习纠错,能保证Wall的位置不会出现偏差。搭建出来的过程如下图所示。图4-6,迷宫搭建过程图4.2.2院子的搭建院子在我的剧情设计中需要有一个房子和一个室内的家居环境,在这里我将资源文件从Maya中导入到Unity中进行搭建,却发现资源文件在这里显示不出来。之后我了解到Unity支持的文件格式与Maya的文件格式不一致,Unity支持的文件格式主要为fbx,而Maya的文件默认为mb的格式。将资源文件用Maya进行格式转换,导出为fbx,导出界面如下图,重新导入Unity进行搭建。图4-7,FBX格式转换树和草丛的资源模型也同样按上面的方法导入我们的项目文件,不过需要将max的格式文件另外导入3dsMax中进行格式转换。以四颗,不同的树为模板,搭建起在院子内的树,使其围绕在房子周围稍微高于迷宫的墙,也让房子稍微高于迷宫的墙,让玩家在接近院子的时候就能看到院子的房子和树,给到玩家一定的视觉线索。在迷宫的围墙外我们也放置一圈的树,给玩家营造出身处自然的感觉,经过调试使玩家在迷宫中的很多位置都看得到围墙外的树。草丛将其先放置在第二剧情的路线开始的入口,具体设计在后面第二剧情的地方重点介绍。迷宫世界的基本环境搭建完成,如下图所示。图4-8,迷宫环境其中,房子的内部构造如图4-9所示。图4-9,室内家居图4.2.3天空盒子的制作选择“MainCamera”,添加“Skybox”,添加路径为“Component”-“Rendering”-“Skybox”。将6张提前导入的图片按方向添加到Skybox,效果如下图。图4-10,天空盒子效果4.3角色的第一人称视角实现和基本移动的实现4.3.1角色的第一人称视角实现创建一个Capsule以代替玩家,命名为Player,将其Transform调整到如图4-11所示,使其模拟角色高度并放置在游戏开始位置。将其调整到游戏开始位置。图4-11,Player的Transform组件信息创建一个Camera将其绑定在玩家Capsule上,高度调节大概在玩家头部的位置,后期可进行微调。这时候运行游戏就已经能看到玩家的视角了,注意玩家Camera的层级要比项目中其他的Camera层级高才能在游戏运行的时候显示出来。然后我们新建一个脚本,命名为MouseLook,在其中我们创建一个根据鼠标方向移动来进行旋转的动作,主要功能代码如下:定义枚举数据类型,有利于在组件处选择设置publicenumRotationAxes{MouseXANDY=0,MouseX=1,MouseY=2}声明公有变量:publicRotationAxesaxes=RotationAxes.MouseXANDY;publicfloatsensitivityHor=9.0f;publicfloatsensitivityVert=9.0f;//垂直方向的镜头转向(这里给个限度最大仰角为45°)publicfloatminimumVert=-45f;publicfloatmaximumVert=45f;//垂直角度的私有变量privatefloat_rotationX=0;响应鼠标的旋转命令,使用GetAxis()获取鼠标的输入信息,使用if函数判断Axes下拉菜单选择了哪个选项,并根据不同选项情况实行不同的代码voidUpdate(){ if(axes==RotationAxes.MouseX){//鼠标水平旋转transform.Rotate(0,Input.GetAxis("MouseX")*sensitivityHor,0);}elseif(axes==RotationAxes.MouseY){//鼠标垂直旋转//基于鼠标增加垂直角度_rotationX-=Input.GetAxis("MouseY")*sensitivityVert;//限制垂直角度的最大最小值_rotationX=Mathf.Clamp(_rotationX,minimumVert,maximumVert);//Y的角度一致floatrotationY=transform.localEulerAngles.y;//使用存的旋转值创建新的Vectortransform.localEulerAngles=newVector3(_rotationX,rotationY,0);}else{//鼠标水平垂直旋转_rotationX-=Input.GetAxis("MouseY")*sensitivityVert;_rotationX=Mathf.Clamp(_rotationX,minimumVert,maximumVert);floatdelta=Input.GetAxis("MouseX")*sensitivityHor;floatrotationY=transform.localEulerAngles.y+delta;transform.localEulerAngles=newVector3(_rotationX,rotationY,0);} }其中加入禁止对玩家进行物理选择的代码:voidStart(){Rigidbodybody=GetComponent<Rigidbody>();if(body!=null)body.freezeRotation=true;}将脚本MouseLook挂靠在Player上并设置Axes为MouseX,并将脚本MouseLook挂靠在绑定Player的Camera的上并设置Axes为MouseY,这样就可以实现玩家的第一人称视角。注意不能将MouseLook直接绑定在Player设置Axes为MouseXANDY,这样会在加上移动脚本之后,导致作为Player的Capsule在进行上下视角移动时Player的重心发生偏移导致玩家移动的bug。并且bug是在之后进行玩家移动脚本实现后才出现的bug,导致我前期找不到bug出现的原因并进行多次的调试才找到了解决的方案,影响了游戏开发的整体进度。这个bug也警示了我游戏开发任何一个模块都要认真对待不能以人的角度使用对我们而言最简单的实现方式,而是要作为一个机器去思考功能的实现,不能存在“想当然”的想法。4.3.2角色的基本移动的实现将系统默认赋予玩家Capsule的CapsuleCollider碰撞器移除,用更符合角色的CharacterCollider代替,它可以允许玩家对象表现的更像一名玩家角色。创建脚本FPSInput,将其附加到Player声明公有变量,定义速度和重力 publicfloatspeed=6.0f;publicfloatgravity=-9.8f;响应按键的位移并将重力添加给移动代码 voidUpdate(){floatdeltaX=Input.GetAxis("Horizontal")*speed;floatdeltaZ=Input.GetAxis("Vertical")*speed;Vector3movement=newVector3(deltaX,0,deltaZ);movement=Vector3.ClampMagnitude(movement,speed);movement.y=gravity;movement*=Time.deltaTime;movement=transform.TransformDirection(movement);_charController.Move(movement);}至此角色已经搭建好了第一人称视角和基本的移动,在3dsMax中完成主角模型的格式转化并将该模型附加到Player上,该模型后面也将作为可可父亲的形象出现在游戏中,玩家角色正式配置完成。可在迷宫中进行移动和初步探索,玩家对象也可跟随视角的移动改变方向,使玩家对象及模型始终面朝运行Player的Camera方向,运行时Scene视图和Game视图的截图如下。图4-12,Scene视图图4-13,Game视图4.4游戏UI系统4.4.1玩家主界面UI的设计 在追求极致简约的理念下,为了让玩家把更多精力放在游戏本身的内容上,我把主界面的UI系统简化成一个放在主界面右边的物品栏,如下图所示。通过锚点将物品栏相对屏幕放置在右边,不会因为屏幕的分辨率改变而导致物品栏脱离主界面右边界。具体功能实现将在章节4.5进行介绍。图4-14,主界面UI4.5门、钥匙和物品栏系统的实现 将准备好的门的模型导入游戏项目中,并在院子门口放置好门的模型,为门添加材质使其看起来达到门的视觉效果。将门的主板和门把命名为door,整体模型命名为men。效果如下图所示。图4-15,门的效果图创建两个动画OpenDoorAnim、CloseDoorAnim,分别为开门、关门的动画,在Animator窗口中设置动画的状态,其中图4-16下半部分为OpenDoorAnim、CloseDoorAnim的关键帧位置,上半部分为动画的状态的切换关系。图4-16,Animator窗口完成上边所有设置之后,就可以通过编写代码进行控制OpenDoorAnim、CloseDoorAnim动画状态的切换。 现在我们开始制作钥匙,将准备好的钥匙资源导入游戏项目中,调整大小适宜,将其命名为ys。创建一个脚本ysCtr附加到ys,编写脚本ysCtr使ys真的实现钥匙的功能。ysCtr代码如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassysCtr:MonoBehaviour{ //定义一个私有变量,判断是否可以获取钥匙privateboolIsCanGet;//声明一个公有变量,区别是哪把钥匙publicintIndex;//声明一个公有变量,为了链接到我们获取钥匙时可收到的提示信息publicGameObjectDescripeUI; //Usethisforinitialization voidStart(){IsCanGet=false;DescripeUI.SetActive(false);DescripeUI.GetComponent<ShuoMingJieMian>().SetYS(this); } //Updateiscalledonceperframe voidUpdate(){ if(IsCanGet&&Input.GetButtonDown("Fire1")){Rayray=Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHithit;if(Physics.Raycast(ray,outhit)){Debug.Log("hit"+);if(hit.collider.isTrigger==false&&hit.collider.gameObject.tag=="WuPing")DescripeUI.SetActive(true);}} }publicvoidOnTriggerEnter(Colliderc){Debug.Log("enter:"+gameO);if(c.gameObject.tag=="Player"){Debug.Log("Coll-2");IsCanGet=true;}}publicvoidOnTriggerExit(Colliderc){Debug.Log("Coll-exit-1");if(c.gameObject.tag=="Player"){IsCanGet=false;}}} 为钥匙添加两个碰撞器,一个是玩家是否进入允许对钥匙进行的点击范围的碰撞器,一个是获取钥匙点击的碰撞器。第一个碰撞器调整到直径刚好是走廊宽的范围,第二个碰撞器调整到钥匙实体大小。点击钥匙之后需要出现一个提示窗口,于是我打算创建一个可以在点击钥匙之后弹出的说明窗口,我在Canvas上创建一个Image命名为DescriptUI,以Image为父级创建一个Bottom和Text,Bottom做点击关闭说明界面的效果,而Text做说明界面的说明文本支持。还可以在DescriptUI上选择我们想要的说明界面的背景图片。新建说明界面的脚本命名为ShuoMingJieMian。在ys的ysCtr组件上将DescriptUI拖进来,ys的所需的功能组件界面如下图。图4-17,钥匙碰撞器点击之后跳出的说明界面的对象DescriptUI,需要显示提示信息并在接受点击之后关闭界面,所支持的代码如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;//说明界面//publicclassShuoMingJieMian:MonoBehaviour{privateButtonbtn;publicysCtrys; //Usethisforinitialization voidStart(){btn=GetComponentInChildren<Button>();btn.onClick.AddListener(()=>{GameObject.FindWithTag("WuPingLang").GetComponent<wupinglang>().SetImageActive(ys,true);ys.gameObject.SetActive(false);GameObject.Destroy(gameObject);}); } //Updateiscalledonceperframe voidUpdate(){ }publicvoidSetYS(ysCtrysCtr){ys=ysCtr;}}院子的钥匙附带着两条线索,一条是主线的线索提醒玩家前往院子探索,另一条是引导玩家去了解可可父亲的第二剧情的线索。说明界面的样式调整如图4-18,其中我们利用锚点将每一个UI对象都固定在了相对镜头屏幕大小的位置,在变换不同的显示设备时不会因为分辨率的不同而导致UI对象位置发生改变设置锚点可以使UI对象自适应屏幕分辨率从而保持相对位置不变。图4-18,获取物品提示界面在钥匙物体被点击之后会弹出说明界面,同时3D钥匙物品会销毁,而玩家需要感知到以及获取了钥匙则需要物品栏的2D钥匙图片显示出来,这里编写wupinglang以获取物品栏的钥匙显示与否的信息,代码如下。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclasswupinglang:MonoBehaviour{publicList<Image>images;privateList<ysCtr>yss;//Usethisforinitialization//初始化钥匙列表,隐藏钥匙图片voidStart(){yss=newList<ysCtr>();if(null!=images){foreach(variteminimages){item.gameObject.SetActive(false);}} } //Updateiscalledonceperframe voidUpdate(){ }//设置哪吧钥匙图片是否可见publicvoidSetImageActive(ysCtrys,boolactive){images[ys.Index].gameObject.SetActive(active);yss.Add(ys);}//检查是否有钥匙publicboolCheckYS(intindex){foreach(variteminyss){if(item.Index==index){returntrue;}}returnfalse;}}需要注意的是,游戏的设计中涉及到了几个门与钥匙的系统,即我们需要获取几把“钥匙”,我们需要在附加在物品栏的wupinglang脚本组件上Size的位置设置好“钥匙”的数量,并将对应的“钥匙”图片放置到物品栏的位置上。目前只做一个门与钥匙的系统,所以我们将Size设置为1,并为其附加上相应的钥匙图片。效果如下图,之后其他的“门与钥匙”的系统都可将这个作为模板直接引用。图4-19,wupinglang脚本组件钥匙物品与说明界面的链接做好了,与物品栏的链接也做好了,接下来需要确保门能在识别到物品栏有钥匙的时候打开,而在识别到物品栏没有钥匙的情况选择不打开门。创建一个脚本DoorCtl附加到men上,需要声明哪个门对应哪个钥匙,为了方便在游戏开发时选择钥匙,这里选择声明一个共有变量来链接到对应钥匙的位置。调用Animator中的函数,通过设置bool值,即可改变游戏对象的动画状态。主要代码如下。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassDoorCtl:MonoBehaviour{publicysCtrys;privatewupinglangwpl;privateAnimatoranim; //Usethisforinitialization voidStart(){wpl=GameObject.FindWithTag("WuPingLang").GetComponent<wupinglang>();anim=GetComponent<Animator>(); } //Updateiscalledonceperframe voidUpdate(){ }publicvoidOnTriggerEnter(Colliderc){if(c.gameObject.tag=="Player"){if(wpl.CheckYS(ys.Index)){anim.SetBool("open",true);}}}publicvoidOnTriggerExit(Colliderc){if(c.gameObject.tag=="Player"){anim.SetBool("open",false);}}}需要注意的是需要给门创建碰撞器,不然的话只要玩家角色经过门就会自动打开,这显然不是这游戏想要的效果。创建SphereCollider组件并勾选上IsTrigger。将对应钥匙物品拖进Ys中,door的Inspector界面如下图所示。图4-20,门的Inspector至此一个简单的“门与钥匙”系统建造完成,其中还完成了一个由物品栏构成的简介UI主界面的实现。实现了在捡到钥匙之时提示界面(说明界面)的成功弹出,玩家将在迷宫中探索,并能通过进入钥匙的获取范围的时候去对钥匙进行获取,物品栏识别对应该钥匙的拾取信息之后显示出本来就放在物品栏界面的该物品的UI,最后能依靠对应“钥匙”进入对应的“房间”,后面也将以这个“门与钥匙”的系统进行我们游戏不同剧情的开展。4.6游戏角色对话 在做游戏的角色对话这一块,本游戏的开发采用fungus对话系统插件实现。使用fungus对话系统的时候以为只能做一些简单的玩家与NPC对话,却发现fungus插件能实现的功能还有游戏对话的顺序,通过加入条件判断使得对话与游戏的进度相匹配,还能做选择性对话,这里为了不做剧情的透露本游戏将不采取这个功能。除此之后,fungus插件甚至还能用提前准备好的声音、动画、UI等进行游戏的交互,fungus功能强大,为游戏开发者提供了不一样的方法实现游戏运行的众多功能。4.6.1建立玩家与NPC的简单对话功能 Fungus插件在Unity的AssetStore中就可以直接下载进行导入,在Tools列表找到Flowchart并创建。打开Flowchart的编辑窗口,新建一个对话框模块命名为NPCPapa,为其编写对话,并将NPC和玩家的名字区别开。对话框内容如下图所示。图4-21,NPCPapa对话编写 这里添加了一个条件是为了NPC适应不同剧情发展而出现不一样的对话内容。之后需要为每个NPC附加上BoxCollider和SphereCollider,并将SphereCollider调整到走廊大小,将SphereCollider的IsTrigger勾上为了不阻碍玩家的移动。接下来为NPC编写代码,主要代码如下。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingFungus;publicclassNPC1:MonoBehaviour{publicstringChatName;//当前是否可以对话privateboolCanChat=false; //Usethisforinitialization voidStart(){ } privatevoidOnTriggerEnter(Colliderother){CanChat=true;}privatevoidOnTriggerExit(Colliderother){CanChat=false;}//UpdateiscalledonceperframevoidUpdate(){ }privatevoidOnMouseDown(){Say();}voidSay(){if(CanChat){//开始对话FlowchartflowChart=GameObject.Find("Flowchart").GetComponent<Flowchart>();//对话是否存在if(flowChart.HasBlock(ChatName))//执行对话flowChart.ExecuteBlock(ChatName);}}}将该脚本NPC1附加到各个NPC的组件中,并将属于每个NPC的对话内容绑定在该脚本组件上,为玩家角色及各个NPC设置名字及名字颜色以区别发言对象,其中也暗示了老头的名字颜色与486的名字颜色一致,这里作为一个后面剧情小提示藏在对话框中。图4-22,Flowchart的编辑窗口 为了使NPC对话内容与剧情发展保持一致,这里加入了一个bool变量Cantalk,初始值为false,当一个NPC对话结束后,另一个NPC的特定对话内容才为true。这支持了我们各个NPC同时在场又不影响游戏剧情进度,使得我们剧情发展合理,玩家获取的线索不出现无用线索。图6-23,条件对话的设计对话框效果如下图所示。图6-24,对话框效果4.7迷宫剧情的开展 在本游戏中,最大的创新就是在剧情的开展方式上做了创新,与传统解谜游戏不同的是,一般解谜剧情类游戏都是将玩家往一个剧情方向去带,而本游戏也将玩家往一个剧情去带,这里主要考虑了不同玩家对剧情的敏感度不同。针对剧情敏感度较高的玩家,本游戏设置了在主线剧情下的主剧情衍生,是与第一剧情不同的剧情但又不是独立存在的一个剧情,可以理解为第一剧情的衍生剧情,但在这里更像是对第一剧情的解谜剧情。 具体实现提供前面提到的“门与钥匙”的系统实现。4.6.1第一剧情 关键人物:可可 主要任务:离开迷宫、找到可可 主要事件:事件集事件与可可的联系奖励事件A1捡到可可的求救信可可的求救信想起了自己的名字事件A2遇见老头可可的父亲确认了可可就在迷宫,接到把可可接回家的任务事件A3与Papa对话可可心爱的玩具提示最后见到可可的地方在家里事件A4发现长廊尽头的小树可可的所在(可可的位置在树的后面,但被玩家视野里并不可见)事件A5找到钥匙可可家的钥匙可进入可可的家事件A6进入院子可可的家发现了可可位置的线索事件A7发现房子里的相框可可长廊尽头与树的合照发现了照片长廊的比看到的长廊还要长,得出了长廊尽头还有空间的设想事件A8找到可可可可本人第一剧情结束,玩家可结束游戏离开迷宫事件A9发现房子后面的表无开启第二剧情的“钥匙” 功能实现: 事件A1、A2、A3、A4、A6、A7通过NPC对话模块的功能实现,事件A5、A6、A9通过“门与钥匙”模块的功能进行实现。4.6.1第二剧情 关键人物:老头/可可的父亲/486(玩家角色),可可 主要任务:找寻486存在的意义,迷宫的真相主要事件:事件集事件道具发现事件0发现房子后面的表表(老头遗落的时间)可可的求救信距今50年事件B1进入迷宫的新路线探索迷宫真相新路线是老头人生介绍事件B2发现老头的日记老头的日记老头年轻时在虚拟现实行业的大放异彩事件B3看到现实裂开的照片裂开的家庭照片老头家庭不和,离异事件B4再次遇见PapaPapa得知了可可离世原因是抑郁症(引申第二剧情主题——关爱抑郁症患者)事件B5进入可可内心世界Papa感受可可的无助和等待事件B6发现抑郁症报道关于抑郁症的报纸科普抑郁症,并以现实看到抑郁症的危害事件B7看到一个画满图案的黑板黑板发现了黑板上的图案是487笔“正”字事件B8遇见找回时间的老头表告诉了486真相,迷宫是老头建的,目的是为了拯救之前没能见到最后一面的可可事件B9与老头争执发现了自己的真实身份就是老头(可可父亲)。老头劝告486不要进去,否则会迷失自我事件B10486不听劝告回头进入迷宫;老头写下第486笔“正”字虚拟门486新的目的是去寻找在家等着486的可可穿过虚拟的门,回到起点,老头获得了新的名字489,完成循环。 功能实现: 事件0、事件B4利用了前面提到的“门和钥匙”功能实现,把Papa作为“钥匙”获取,并成为进入可可内心世界的钥匙。其余事件以对话的形式呈现爱你,但限定了对话进行的顺序以保证剧情的发展贴合玩家的心理变化和现实逻辑。其中事件B3作为当中的抑郁症报道也将作为事件B7之后的“钥匙”,玩家之有在获取了“钥匙”,才能进入对应的“门”里。 剧情设计意义: 本篇章中对第一剧情的解谜,通过剧情发展引发玩家思考,通过玩家角色的与老头一体的情感使玩家共感对可可的感情。而通过剧情的发展一步步的回到原点,也解释了玩家进入游戏的意思以及迷宫存在的意思,最终形成一个剧情闭环,使迷宫成为一个连通的闭环迷宫。也通过剧情的一步步进行逐级提炼出本游戏的主题是——拯救抑郁症,最后升华成486(老头)的自我拯救。

第五章游戏测试一个游戏策划到发布,游戏测试环节必不可少。如果游戏没有经过测试便给玩家游玩,可能出现的bug将极大地影响玩家的游戏体验。游戏测试可以将游戏开发中未发现的bug或可能出错的bug进行检验,也可以通过游戏实质游玩效果来检验游戏开发的完成度。游戏测试环节也是游戏正常运作及玩家游戏体验的保障。5.1功能测试本次测试主要以人工试玩测试为主。由于开发过程中有可能出现未预测出现的BUG,所以以下数据都是人工直接测试的结果。功能测试项目是否通过测试角色第一人称视角移动正常角色基础移动正常点击道具时提示界面弹出正常提示窗口的关闭正常点击道具,道具消失正常点击道具,物品栏出现道具UI正常点击NPC进行对话正常NPC对话内容随剧情变化正常物品栏没有“钥匙”无法进入“门”正常界面跳转正常动画的播放正常5.2资源占用测试测试环境:处理器:Intel(R)Core(M)15-6300hqCPU@2.30GHZ内存:12.0GB(11.9GB可用)显卡:NVIDIAGeForceGTX960M系统:Windows10家庭中文版测试的情况如下:处理器占用率:最高48%,平均30%内存占用:400.1MB显卡使用率:最高33%,平均25%以上结果来自软件测试,各方面数值属于正常情况,测试通过。

第六章总结与期望本课题研究的基于Unity3d的迷宫解谜游戏设计与实现至此已经完成,回想起最初选择毕业设计项目的时候,我对于毕设做什么比较迷茫,然后开始思考着做什么可以体现出我大学所学的知识,但最后我出于对解谜类游戏和对剧情类电影的兴趣,选择了本身并不是特别擅长基于Unity3d游戏开发类型。在完成项目的过程中,我给自己制定了对应的学习计划和对项目定下了分段的目标。学习Unity开发的路上,我利用实习之余的时间在互联网上观看教程、查阅相关学科的教材和回顾教授Unity课程的老师之前的PPT、学习资料进行学习,学习的过程是枯燥且长期的,但是中间每次功能的实现都能让我感到充实且欣悦。即便枯燥也要坚持去学习,这样才能在干渴的土地上汲取到所缺失的水分。在项目制作期间,对于每个Bug的出现从恐惧到习以为常到可以从Bug中找到解决方案,大概这就是以Bug治Bug吧。而对于这个项目由于时间的限制和个人能力有限,其实并没有像我最开始抱着满腔热情所期待那么的好,不过对于剧情的设计却是我在上、下班,洗澡睡觉时都会思考的一个环节,闭环剧情结合游戏的创新是我比较满意的点。我始终认为游戏是开发者的思想与玩家思维的一种交汇的方式,游戏也必将成为一种新的艺术呈现在世界面前。在之后我也将不断学习,不断思考,我相信今后我将掌握更多的技能支持我去开发更加好的游戏。

参考文献褚治广,李万杰,张兴,等.基于Unity的“平行空间”冒险解谜游戏的开发设计[J].辽宁工业大学学报:自然科学版,2018,38(06):27-30.卢文静.分镜解谜游戏《致命框架2》[J].计算机与网络,2017(14).黄志辉.基于心流理论的游戏交互研究[D].佚名.解密佳作《未上锁的房间3》[J].电脑迷,2015,000(024):91-91.余梦君.飞往“彼岸世界”的拟态蝴蝶[D].胡睿鑫.剧情动画短片剧本中的戏剧冲突设计研究[D].2019.张雁捷.游戏剧情与操作的时长配比和难度界定[D].耿英华,朱姝.剧情动画在电子游戏中的作用[J].广东技术师范学院学报(自然科学版),2010,031(004):38-41.MicrosoftVisualC6.0_搜索_互动百科.薄星晨,林佳奇,庄鸿昌.基于unity3d的纪念碑谷手机游戏中出现的视觉欺骗[J].通讯世界,2017(2):265-266.2018中国游戏业:挺过“煎熬时刻”迎来版号重开-博客科技的专栏-博客中国游戏市场今年销售收入832亿元4G将带来新动力.吴浩炜,黄昊,朱嘉仑,陈圆,谢修娟.基于Unity3D的训练空间思维的迷宫手游的设计与实现.

《电子技术与软件工程》2019.11.Unity简介-AiCoding-博客园.Unity3D介绍、安装、展示-qq_31971935的博客-CSDN博客.Maya基础与应用实用教程txt免费下载_读后感_在线阅读_读书人图书资料库.《立体构成及应用》第七章:立体构成的造型组合训练.游戏特效设计用哪些软件?-土地公文库.

致谢本论文在撰写与本项目在开发中,我得到了我的导师陈伟淦老师热心帮助,感谢我就读专业的吴志达老师的教授的Unity相关知识。令我可以独立的开发自己想像出来的游戏并实现它。大学四年即将结束,说到致谢,我想借助这里感谢自己,在大学遇到的诸多困难当中感谢自己并没有放弃自己,感谢自己让我成为一个更好的人。感谢广东东软学院这个平台给我学习和展现自己的机会,也感谢大学期间所遇到的形形色色的人或事,在这个充满个性的平台并没有迷失自己,能保持住自己的个性也能做到包容理解。 在论文完成过程中,当我遇到难点时,感谢我的朋友为我提供学习材料并解疑答惑。也谢谢一直关心着、支持着我的人,在此向你们表示深深的感谢。

电脑故障检测卡代码表

1、特殊代码"00"和"ff"及其它起始码有三种情况出现:

①已由一系列其它代码之后再出现:"00"或"ff",则主板ok。

②如果将cmos中设置无错误,则不严重的故障不会影响bios自检的继续,而最终出现"00"或"ff"。

③一开机就出现"00"或"ff"或其它起始代码并且不变化则为主板没有运行起来。

2、本表是按代码值从小到大排序,卡中出码顺序不定。

3、未定义的代码表中未列出。

4、对于不同bios(常用ami、award、phoenix)用同一代码代表的意义不同,因此应弄清您所检测的电脑是属于哪一种类型的bios,您可查阅您的电脑使用手册,或从主板上的bios芯片上直接查看,也可以在启动屏幕时直接看到。

5、有少数主板的pci槽只有一部分代码出现,但isa槽有完整自检代码输出。且目前已发现有极个别原装机主板的isa槽无代码输出,而pci槽则有完整代码输出,故建议您在查看代码不成功时,将本双槽卡换到另一种插槽试一下。另外,同一块主板的不同pci槽,有的槽有完整代码送出,如dell810主板只有靠近cpu的一个pci槽有完整代码显示,一直变化到"00"或"ff",而其它pci槽走到"38"后则不继续变化。

6、复位信号所需时间isa与pci不一定同步,故有可能isa开始出代码,但pci的复位灯还不熄,故pci代码停要起始代码上。

代码对照表

00.已显示系统的配置;即将控制INI19引导装入。

01处理器测试1,处理器状态核实,如果测试失败,循环是无限的。处理器寄存器的测试即将开始,不可屏蔽中断即将停用。CPU寄存器测试正在进行或者失败。

02确定诊断的类型(正常或者制造)。如果键盘缓冲器含有数据就会失效。停用不可屏蔽中断;通过延迟开始。CMOS写入/读出正在进行或者失灵。

03清除8042键盘控制器,发出TESTKBRD命令(AAH)通电延迟已完成。ROMBIOS检查部件正在进行或失灵。

04使8042键盘控制器复位,核实TESTKBRD。键盘控制器软复位/通电测试。可编程间隔计时器的测试正在进行或失灵。

05如果不断重复制造测试1至5,可获得8042控制状态。已确定软复位/通电;即将启动ROM。DMA初如准备正在进行或者失灵。

06使电路片

温馨提示

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

评论

0/150

提交评论