2、蒙尘,国家也是想尽办法让人们重新认识这些文物,比如中央电视台的国家宝藏;比如一些学校会组织学生一起去看博物馆;比如把历史遗迹变成旅游景区,然后在遗迹旁边做一个小小的文物展等等。关键词:文物实现技术博物馆文化历史Unity3D虚拟仿真AbstractCulturalrelicsareculturalrelicsbecausetheybearthecultureoftheirowncountryandwitnessthehistoryoftheirowncountry.Butastimewentby,theartifactssl
3、owlybecameunknown.Intodayssociety,therearetoomanychildrenbecauseofheavystudyandalotofcramschoolclasses,butdonthavetimetoknowyourcountryscultureandhistory,theonlytimetorest,willalsobeassignmentsandtoystofill,inthelongrun,themuseumwillgraduallyweave
4、onthepast,insteadofprosperity,andthisledtothemuseumofculturalrelics,butalsolessandlesspeopletopayattentiontothem.Inordertonolongerletthetreasuresdust,thecountryisalsotryingtomakepeoplere-recognizetheseculturalrelics,suchasCCTVsNATIONALTREASURE;Fore
5、xample,someschoolswillorganizestudentstogotothemuseumtogether;Forexample,turnthehistoricalsiteintoatouristattraction,andthenmakeasmallculturalrelicsexhibitionnexttothesite.Keywords:TherealizationtechnologyofculturalrelicsMuseumCulturalHistoryUnity3DVirtual
6、simulation目录1.绪论11.1选题的目的和意义11.2研究现状11.3研究内容22.技术和开发工具32.1Unity3D引擎32.1.1简介32.1.2Unity3D引擎的优点32.2使用的其他软件42.2.1Cinema4D软件42.2.23DsMax软件42.2.3VisualStudio软件42.2.4Photoshop软件52.3C#开发语言53.游戏设计73.1游戏说明73.1.1游戏简介73.1.2游戏UI操作73.1.3游戏键位操作73.1.4游戏结束73.2游戏模块划分83.3
7、模块说明分析与设计83.3.1UI界面模块83.3.2角色控制模块93.3.3摄像机模块93.3.4游戏场景模块93.3.5UI逻辑模块103.3.6流程逻辑模块103.4模块参数名称与数值设计103.5小结104.游戏实现114.1场景搭建114.1.1创建地板114.1.2创建墙壁124.1.3创建天花板124.1.4创建灯泡灯管和台灯124.1.5创建展台和玻璃罩134.1.6创建室内装饰154.1.7创建文物模型154.2创建灯光164.2.1点亮灯泡164.2.2创建粒子效果174.3UI模块实现18
8、4.3.1UI外观设计184.3.2UI控制流程194.4角色控制实现194.4.1玩家角色行为194.4.2第一人称摄像机204.5音效添加224.6Post-Processing游戏画面优化224.7小结235.游戏运行测试245.1游戏测试245.1.1设备环境245.1.2游戏运行结果245.2问题与解决方案255.3小结256.总结与展望26参考文献28致谢29广东东软学院本科生毕业设计(论文)第一章绪论1.1选题的目的和意义随着时代的进步,人们对于艺术品的追求也逐步提高,而那些有着悠久历史的古代文物艺术品却逐渐被人遗忘,
9、古代文物精美而优雅,虽然这些文物流露着古老腐朽的气息,但从制作的工艺和图案的精美程度,无一不说明古时的匠师是有着大智慧的。可是相比当下,现代工艺的艺术品,不仅优美精巧,而且新颖独特,比起那些深埋已旧古代文物更加的吸引人们的眼球。在五花八门的现代工艺品的环境下,古色古香的文物也就很难再走进大众的视野,为此我开发一款科普古代文物文化的游戏,让更多人了解认识中国古文物,中国古代的艺术品。中国古代文物科普类游戏是一款漫游为主的科普教育向游戏,游戏的场景选择为博物馆,为了让玩家有一定的代入感,建筑风格使用的是宫殿一样的建筑,玩家通过第一视角在场景中移动和浏览古文物。文物的摆放顺序由近到远,越是古老的文物
11、究现状近年来,随着人们生活水平的提高,大部分人们的物质需求基本得到满足,然后五花八门的艺术工艺品走进了大家的视野,古文物也不例外,但是人们对于古文物的认识仅仅处于一个很浅显的层次,难以了解其中的内涵,而又有更多的、更具观赏性的和充满艺术感的现代工艺品,人们自然而然就选择了后者。当然,也有为了适应这个快节奏的社会,为了让更多人了解古文物而奋斗的人,像几年前就有寻宝、国家宝藏等大型的为科普文物的综艺节目,这些节目播出后,的确引起了一部分人的兴趣,以及了解了一些文物的知识,然后想要真正见识一下的想法,又会在这个信息时代的轰炸下消失。为此,我们需要重新找一条新的科普方式,而游戏便是一个不错的想法。21
13、些插件来进行画面的提升和修正;(3).模型的创建:模型使用网上的素材和自己创建的模型相结合,配合3D建模软件和Unity自带的组件来进行制作;(4).游戏优化:代码的封装,场景的烘焙渲染,框架的搭建,使得游戏更加流畅高质量的运行;(5).UI的设计:使用Photoshop设计制作游戏UI界面;(6).音效的使用:使用谷歌翻译的读文本功能,录下文物的简介介绍,进行播报;角色走路发出的声音;背景音。第二章技术和开发工具2.1Unity3D引擎2.1.1简介Unity3D也称Unity,是由UnityTechnologies公司开发的,该公司致力于使游戏的开发变得更加的简
14、单和“平民化”,并使2D和3D交互式内容的开发变得更加的简单便捷,所以Unity3D是一个综合性很强的游戏开发软件。Unity3D可以在Windows和MacOSX下运行,可发布游戏到Windows、Mac、Android等等可以运行游戏的可发布平台上。也可以使用插件发布到网页运行游戏,是个全面且专业的游戏引擎。游戏行业现有的游戏引擎不管是商用的还是免费的都多如牛毛,其中最具代表性的游戏引擎有、虚幻4、cryEngine、寒霜、unreal等等,但是这些游戏引擎都有着各自的缺陷,比如价格昂贵、操作不便、功能不全之类的,使得游戏开发的成本大大增加。而Unity公司力求使游戏开发变
15、得“平民化”,提供了所有人都可以轻易开发出游戏的优秀的游戏开发引擎,使开发人员即使是初学者,也可以根据脑洞开发出不错的游戏。Unity有“团结”的意思。所以Unity3D的核心含义就是需要建立在团队合作基础上的相互合作才能完成一个或无数个游戏的开发。截止今日,市面上的许多游戏,都可以通过Unity进行开发实现,当然其他的游戏引擎也可以做到开发多种类型的游戏,但Unity3D却有着强大的跨平台的特性,所以许多初入游戏开发的初学者都是选择Unity3D来进行学习。2.1.2Unity3D引擎的优点说到Unity3D就立刻想到它的跨平台能力,它可以支持多种格式的导入,在C4D或3Ds
19、软件,通常用于3D游戏设计、影视特效后期、建筑设计等方面,3DsMax的强大之处在于它有很多的插件,来解决制作项目上出现的的问题。相对其他三维软件而言,3DsMax更适合新手入门,上手容易,而且使用者众多,网上的资源会比其他三维软件要多得多,相对来说性价比高,想要的效果都能做得出来,渲染也很逼真,主要是相对其他主流三维软件要稳定。而且网络中的大部分模型资源都是.max格式,需要使用3DsMax软件来打开,然后将它导出为.fbx格式的文件,然后在Unity3D中使用。2.2.3VisualStudio软件VisualStudio我们一般简称它为VS,它是微软公司旗下的软件集成开发工具
20、产品,不仅是目前Windows平台最流行的应用程序开发环境,而且还是初学者学习编程的入门软件之一,VisualStudio是一个基本完整的开发工具集,囊括了一个软件所需的大部分工具,所编写的目标代码适用于所有微软所支持的平台。VisualStudio的优势无需多言,用过的人都知道,行内有一句话去形容VisualStudio,就是“宇宙IDE”。相较于其他的软件开发工具实在是好太多了,编译速度快、内存占用低、界面好看、代码智能提示、功能多等等,支持多个计算机语言编译,最最重要的是,基本不卡,几乎不死机,相比于Eclipse、xcode真的流畅很多。同时,它也是下载安装Unity开发游戏时必
22、进行图像处理,从而达到想要的效果。PS的功能十分的强大,既可以制作游戏界面按钮的设计,又可以做场景物体的贴图,甚至可以导出法线和凹凸贴图。2.3C#开发语言C#语言是由微软公司开发的一种面向对象的高级程序设计语言,并且运行于.NetFramework之上。因为演变自C/C+的原因,C#很多的语法都和C/C+类似,并且简单易学。使用C#开发的应用程序相比起其它编程语言要更简单和快速。C#作为计算机编程语言,C#和Java、C语言等元老级编程语言相比“出生的年龄”较小,虽然C#的年龄较小,但却一点都不逊色于其他编程语言。使用C#语言编程开发更简单易懂,它继承了Java的语法和C语言的面对对象优
23、点,使得C#语言的使用者越来越多,更重要的是,C#可适配微软的开发平台,C#语言具有实用度高、范用性广等特征,对编程新手相对友好,广受编程员喜爱。在Unity3D里,是支持C#和Java两种脚本语言的,但是相较Java,C#拥有所有Java的优点和特性,而C#比起Java更加的简洁易懂,C#的使用者越来越多就足以说明C#在游戏开发方面比起Java要强大得多,而且Unity的脚本编写工具是VisualStudio,与C#同属一个公司,所以在编写脚本上也有一定的优势。第三章游戏设计3.1游戏说明3.1.1游戏简介周末得空的你,来到到了一个从未来过得博物馆,你因为好奇走了进去,你在里发现了
25、家可以通过按下键盘F键,与场景可交互对象进行交互;(3).拖拽旋转:玩家可以通过按下鼠标左键,与场景交互后,拖拽鼠标旋转物体;(4).滑轮缩放:玩家可以通过滑动鼠标中键,缩放交互后的物体;(5).游戏菜单:玩家可以通过按下TAB键,打开菜单,再按一次TAB键关闭游戏菜单3.1.4游戏结束游戏结束方式有两种,一种是玩家走到展厅门口,按F键与大门进行交互,离开博物馆,即退出游戏;另一种是玩家按下TAB键打开菜单,用鼠标点击“退出游戏”,结束游戏。3.2游戏模块划分(1).游戏UI界面模块(2).游戏角色控制模块(3).游戏摄像机模块(4).游戏场景模块(5).游戏UI逻辑模块(6).游戏流程
26、逻辑模块3.3模块说明分析与设计3.3.1UI界面模块UI的主题风格为简约风,因此UI设计基本采用环境色或浅色系为基底,暖色调作为搭配,用简洁的矩形或其他多边形的按钮以及边框设计来配合游戏场景的整体感官,让人感觉很舒服,不会觉得突兀。UI可适配不同的屏幕比例及屏幕分辨率。颜色选择参照:选用浅色为背景基调,或者直接使用场景为背景,边饰使用发光白色,按钮字色使用深棕色,游戏名称标志使用浅棕色搭配白色发光边框。其中需要使用以及控制的参数包括:各页UI界面的标识ID,按钮标识ID。开始界面布局及颜色参考:如图3-1图3-1开始界面参考3.3.2角色控制模块(1).角色的移动控制:使用WASD或
27、上下左右键分别控制玩家,前、后、左、右方向移动。玩家移动所需使用以及控制的参数有:角色当前坐标位置、方向坐标、初速度、加速度以及最大速度;(2).角色的交互方式:单击F键,使游戏玩家与场景进行交互。按住鼠标左键,可以使物体进行鼠标拖拽旋转。鼠标中键滚轮,可以使物体进行放大缩小。玩家交互所需使用以及控制的参数有:识别交互对象,交互后应该打开的场景;交互成功后,识别是场景中的那个物体,获取物体的ID;鼠标左键拖拽旋转的速度;鼠标中键滚轮放大缩小的最大值和最小值;(3).菜单栏弹出:单击TAB键,弹出菜单。弹出菜单栏所需使用以及控制的参数有:判断点击,菜单栏弹出的位置,菜单栏的大小;(4).音效设计
28、:包括走路音效,交互音效以及UI交互的音效。3.3.3摄像机模块摄像机视角为第一人称视角,摄像机的方向跟随鼠标的方向,限制摄像机的Z轴旋转,防止左右倾斜,然后把摄像机放在充当Player物体的子物体上,然后根据鼠标的坐标变化去改变摄像机视角方向,所需要参数:鼠标坐标,摄像机角度。3.3.4游戏场景模块(1).场景主题:以一个中式的博物馆展厅为主题,创建一个比较宽阔的室内场景,把物体规则的摆放,进行展出,物体排放在桌子上,用玻璃把它们罩住,从而形成一个展厅;(2).模型导入:模型基本是白膜,导入Unity3D后再通过shader来调整材质以及贴图,导入的模型面数尽量要少,太多到后期烘焙会很
30、edFloat10移动最大速度maxSpeedFloat50鼠标X坐标mouseXVaule3鼠标Y坐标mouseYVaule3X轴拖拽旋转速度xSpeedFloat250Y轴拖拽旋转速度ySpeedFloat120按钮开始游戏btnStagameClick_StaGame方法名按钮游戏说明btnGameinxClick_GameInx方法名按钮开始游戏btnEscgameClick_EscGame方法名3.5小结本章主要完成了游戏的设计思路,以及一些数据的分配,还有模块的划分,设计好了游戏的大纲,玩法和说明。设计好了各个参数的名称和作用。第四章游戏实现4.1场景搭建4.1.1创
31、建地板首先在网上找到一张适合的textures贴图,然后在unity中新建一个folder,命名为floor将贴图放到里面去。然后在场景新建一个plane,将贴图放上去,调整一下Metallic和Smoothness的值,使其可以像大理石瓷砖一样可以反射,然后再调整一下Tiling的值,然地板看上去更加自然:如下图4-1、图4-2图4-1地板图4-2Metallic和Smoothness的值接着开始调整大小,地板大小视情况而定。4.1.2创建墙壁创建一个立方体,将立方体进行拉伸,变成一面墙壁,新建一个Materials文件夹,给墙壁立方体创建一个材质,将Metallic和Smoothne
32、ss的值调低一些,然后使用Ctrl+C、V进行复制粘贴,通过移动旋转将地板围起来,形成一个密闭的房间。4.1.3创建天花板天花板是一个与地板同长宽的立方体,赋予一个与墙壁相近的材质,颜色可以偏暖色一些。4.1.4创建灯泡灯管和台灯在Cinema4D里面创建灯泡、灯管和台灯,给灯泡灯管赋予材质,然后将它们分别导出为.fbx或.dae格式的文件,导入Unity3D中去,先给灯泡创建一个新的材质,选好颜色,在shaderMainMap下,勾选Emission,使得灯泡物体可以自发光,点开HDR,找到选择好的颜色,将Intensity光照强度调高一点点,让灯泡看上去很亮的,新建一个Spotl
33、ight,让它对齐灯泡所在的位置,Spotlight的光放射的方向与灯泡方向一致,然后联组(或者在灯泡物体下,直接添加light组件,Type改成spot)。然后调整Spotlight的位置如下图:图4-3图4-3灯光Spotlight与灯泡位置调整聚光灯做好一个后,将其保存到Prefab文件夹里。然后所有的灯光有序的摆放在天花板上,吸附对齐。特殊的灯光根据需要摆放装饰。4.1.5创建展台和玻璃罩使用Cinema4D创建展台加玻璃罩,附上材质后导出模型文件,然后将导入Unity3D中的showcase文件夹,获取贴图和材质文件,点击模型的ModelGeometry,勾选Generate
34、LightmapUVs,在接下来的烘焙和渲染中需要用到(每个外来文件都要勾选)。玻璃罩效果:选择玻璃罩物体模型,打开材质,将RenderingMode改成Transparent(透明),然后调一下颜色,将透明度降低,将折射率调到最大,形成一个接近玻璃的效果,然后在场景中创建一个ReflectionProbe(反射探头)将其笼罩进整个场景,这时玻璃罩的效果就实现了。如下图:4-4、4-5图4-4玻璃材质参数图4-5反射探头参数设置4.1.6创建室内装饰添加一些挂画在场景的墙壁上,将挂画物体材质的折射率调低至三分之一左右,复制粘贴几份,然后均匀分布在两侧的墙壁上,给每一个挂画物体附上不
35、同的贴图,使每一幅挂画都是不一样的。4.1.7创建文物模型根据网上调查和自己的印象去搜索,挑选出自己认为最值得展出的文物,然后创建出它们的模型,如下图:4-6、4-7图4-6后母戊鼎(模型之一)图4-7传国玉玺(模型之一)创建和下载好模型后,将它导入Unity3D项目中,摆放在展台上吸附对齐,调整贴图和材质,利用金属性和折射率将模型的放射调整至一个适合的效果。4.2创建灯光4.2.1点亮灯泡给灯泡物体模型添加一个Spotlight(或者给灯泡物体添加Light组件,Yype改成spot聚光灯),调整位置后,修改参数:修改放光颜色为橙色,调整照射距离和大小,增加反射次数,添加软阴影。
36、如下图:图4-8图4-8Spotlight的Light组件参数然后灯泡材质球也要修改,给它添加自发光,勾选Emission,并改其颜色为橙色,调整放光强度,如下图:图4-9图4-9灯泡材质球参数其他大灯与灯泡相同操作,但是灯的颜色和形状略有不同。4.2.2创建粒子效果创建一个ParticleSystem,命名为灰尘,调整参数,让粒子碰到墙壁会反弹,打开场景时可以预载,改颜色为灰色,向四周飘散,有反光材质,数量很多。具体数据如下图:图4-10、图4-11图4-10粒子效果参数(1)图4-11粒子效果参数(2)4.3UI模块实现4.3.1UI外观设计直接使用场景正面的场景作为背景
37、图,添加是三个Button,使用预设样式,利用网上艺术字在线编辑,选用BerlinSansFB,加粗,选择颜色,勾选发光以及描边,调整一下,使其达到自己想要的效果:字体文本:如图4-12图4-12字体文本调整预设,成效:如图4-13图4-13字体成效用同样的方法去制作其他按钮的字体,做完字体后开始拼接开始界面。使用Photoshop来制作菜单栏的边框和背景,白色半透明为底,深色渐变为边框。接着制作按钮颜色,同样用Photoshop制作,灰色半透明为底色,加上黑色边框,圆角。4.3.2UI控制流程玩家可通过功能按钮来跳转界面,按“开始游戏”后,先是逐渐黑屏,进入场景逐渐亮屏,“退出游
38、戏”离开场景时,也是使用逐渐隐藏的效果,UI跳转流程如下:4.4角色控制实现4.4.1玩家角色行为玩家通过WASD或者上下左右方向键控制角色移动,其中WASD与方向键都可用Unity中GetAxis获取值,交互键可设置GetKeydown来获取F键。设PlayerMove方法来操控角色在博物馆中以初速度为Speed,最大速度为maxSpeed来移动。当玩家走到一个物体前,先判断它是否可以进行交互:如果不是,则什么也没发生;如果是,屏幕中央弹出提示,“按F键”。在可交互对象面前:如果玩家按下了F键,则进入物体浏览模式;如果玩家没有按下F键,则什么也没发生1。玩家在进入浏览模式时,可以对物体进行拖
39、拽旋转和放大缩小观察的功能11:/旋转最大角度publicintyMinLimit=-20;publicintyMaxLimit=80;/旋转速度publicfloatxSpeed=250.0f;publicfloatySpeed=120.0f;/旋转角度privatefloatx=0.0f;privatefloaty=0.0f;voidUpdate()if(Input.GetMouseButton(0)/Input.GetAxis(MouseX)获取鼠标移动的X轴的距离x+=Input.GetAxis(Mouse
40、X)*xSpeed*0.02f;y-=Input.GetAxis(MouseY)*ySpeed*0.02f;y=ClampAngle(y,yMinLimit,yMaxLimit);/欧拉角转化为四元数Quaternionrotation=Quaternion.Euler(y,x,0);transform.rotation=rotation;elseif(Input.GetAxis(MouseScrollWheel)!=0)/鼠标滚动滑轮值就会变化if(Input.GetAxis(MouseScrollWheel)0
41、)/范围值限定if(Camera.main.fieldOfView=100)Camera.main.fieldOfView+=2;if(Camera.main.orthographicSize0)/范围值限定if(Camera.main.fieldOfView2)Camera.main.fieldOfView-=2;if(Camera.main.orthographicSize=1)Camera.main.orthographicSize-=0.5F;/角度范围值限定staticfloatClampAngle(floatangle,
43、/主角的移动速度publicfloatjumpPower=5;/主角跳的高度publicfloatgravity=7f;/重力publicfloatmousespeed=5f;/鼠标快慢publicfloatminmouseY=-45f;/限制鼠标y轴publicfloatmaxmouseY=45f;floatRotationY=0f;floatRotationX=0f;/这两个存放的是鼠标输入publicTransformagretctCamera;/摄像机存放的位置/Usethisforinitial
44、izationvoidStart()playerController=this.GetComponent();/获取依附在这个物体上的CharacterController组件Screen.lockCursor=true;/鼠标隐藏/UpdateiscalledonceperframevoidUpdate()float_horizontal=Input.GetAxis(Horizontal);/将水平轴的给_horizontalfloat_vertical=Input.GetAxis(Vertical);/同上if(playerCo
45、ntroller.isGrounded)/检测是否到地面direction=newVector3(_horizontal,0,_vertical);/在地面上才能移动,这个是移动向量if(Input.GetKeyDown(KeyCode.Space)/检测你是否按下了空格键direction.y=jumpPower;/如果按下了空格键就三维向量中的y轴等于jumpPowerdirection.y-=gravity*Time.deltaTime;/玩家向下的速度playerController.Move(playerController.transform.
46、TransformDirection(direction*Time.deltaTime*speed);RotationX+=agretctCamera.transform.localEulerAngles.y+Input.GetAxis(MouseX)*mousespeed;/存放摄像机(也就是鼠标)x轴RotationY-=Input.GetAxis(MouseY)*mousespeed;/存放摄像机(也就是鼠标)y轴RotationY=Mathf.Clamp(RotationY,minmouseY,maxmouseY);/限制鼠标上下this.tr
47、ansform.eulerAngles=newVector3(0,RotationX,0);主角的y轴旋转agretctCamera.transform.eulerAngles=newVector3(RotationY,RotationX,0);/这个是摄像机上下左右。4.5音效添加当玩家控制角色移动时,会发出脚步声。当人物第一次靠近文武时,文物展台会自动播放事先利用谷歌读句录下的声源,简单介绍文物的历史背景,当人物离开一定范围后开始计时,五分钟后,如果玩家再一次靠近,则重复播报,若没有,或者玩家取消播报,则不会播放。展厅一直播放着背景音乐,知道歌曲播完或者玩家取消背景
48、音乐,如果是自动停止播放的,在五分钟后会循环播放,直到歌曲播放完毕或者玩家取消为止。玩家点击UI按钮时,会有反馈音效,按F键交互时,也有反馈音效。4.6Post-Processing游戏画面优化Unity3D2018版本的post-processing是在WindowpackageManager中下载。新建一个Post-processingProfile,添加需要的effect,然后在MainCamera添加PostProcessVolume组件,然后将新建的Post-processingProfile添加到组件的Profile上,然后调整Post-processingPr
49、ofile的参数,如下图4-14:图4-14Post-processingProfile的参数调整4.7小结本章主要制作了游戏的场景制作和角色的控制器系统,以及音效的添加。然后使用场景的烘焙渲染,代码的封装,使得游戏进一步流畅的运行。为了使场景更加好看,我还是用了Post-processing进行后期处理。第五章游戏运行测试5.1游戏测试5.1.1设备环境(1).CPU:Inteli5-6300HQ/2.30GHz(2).运行内存RAM:12G(3).系统:Windows1064位(4).分辨率:1920*1080(5).游戏引擎:Unity3d游戏开发引擎5.1.2游戏运行结果(1).UI界面:游戏UI运行成功,无卡顿现象;(2).场景跳转:场景渐隐渐现效果成功,未出现卡顿现象;(3).角色控制:按“WASD”键与上下左右方向键,都可以控制角色移动,移动鼠标时,视角也跟着同向旋转移动,旋转速度略慢,未出现卡顿现象;(4).光照效果:灯泡和灯管都正常发光,粒子效果正常运行;(5).音效控制:点击按钮会有音效反馈,可在菜单中修改静音或者音量大小。进入场景后,会有音乐播放,同样可以在菜单中修改音量。靠近文物时,会有语音播报,语音播报结束后,等5分钟,文物展台会重新播报一次