数字媒体技术-基于Unity3d 的爱国主义教育游戏开发与实现_第1页
数字媒体技术-基于Unity3d 的爱国主义教育游戏开发与实现_第2页
数字媒体技术-基于Unity3d 的爱国主义教育游戏开发与实现_第3页
数字媒体技术-基于Unity3d 的爱国主义教育游戏开发与实现_第4页
数字媒体技术-基于Unity3d 的爱国主义教育游戏开发与实现_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

基于Unity3d的爱国主义教育游戏开发与实现DevelopmentandImplementationofPatriotismEducationGameBasedonUnity3d内容摘要我国国民的素质需要通过爱国主义教育来提升。国民正确的价值观与爱国情怀都离不开爱国主义教育。在这个互联网发达的社会中,爱国主义教育的路径依然相对的简单,且教学效率比较低。市面上有许多游戏与Unity3D有着密切关联,使我们又多了一条途径去实现爱国主义教育,解决教学效率低的问题。教育类爱国主义游戏,将爱国主义教育和游戏相互融合,在教育的基础上可以增加一些学习的趣味性,强化学习者与游戏之间的互动性。本次运用了unity3D引擎来开发游戏,完成一个操作简单,内容丰富的教育类游戏。尽管我国爱国主义教育类的游戏还在初级阶段,但是未来社会对其的需求量非常之大。本款游戏在推广爱国主义教育在游戏中的应用,具有一定的价值。关键词:爱国主义教育教育类游戏互联网

AbstractWeneedtoimprovethequalityofourcitizensthroughpatrioticeducation.Thecountry'scorrectvaluesandpatriotismcannotbeseparatedfrompatriotismeducation.InthisInternet-developedsociety,theroadtopatrioticeducationisstillrelativelysimple,andteachingefficiencyisrelativelylow.TherearemanygamesonthemarketthatarecloselyrelatedtoUnity3D,sowehaveanotherwaytoachievepatrioticeducationandsolvetheproblemofinefficientteaching.Educationalpatriotismgame,theintegrationofpatriotismeducationandgamesonthebasisofeducationcanincreasesomeinterestinglearningandstrengthentheinteractionbetweenlearnersandgames.ThegamesdescribedinthisarticlewillbedevelopedbytheUnityenginetocompleteeasy-to-useandfeature-richeducationalgames.Althoughthecurrentpatrioticeducationgamesarestillintheirinfancy,thedemandfortheminthefutureisverylarge.Thisgamehascertainvalueinpromotingtheapplicationofpatriotismeducationingames.□□Keywords:Patriotismeducationeducationalgamesinternet

目录TOC\o"3-3"\t"标题,1,1,2,2,3"第一章 绪论 绪论1.1研究背景与意义我国互联网的发展突飞猛进,是因为有改革开放的强劲后盾。互联网是一个连贯网络和网络的巨大网络。按照一些规范的网络协定,允许将全球范围几十个亿的设施连接在一块构成国际网络。人类发展历史中互联网的诞生是一件具有重大意义的事件,它对人类社会的影响日益增强,使人类文明加速发展。毋庸置疑的是互联网为人类创造出一个虚拟化的网络社会,即使是远隔太平洋,彼此不认识的人都能在网络社会中进行交流。在1998年,全世界大约有一亿的人学会了使用互联网,仅仅过了2年,全世界大约有6.5亿的人使用了互联网,2019年全球大约有43亿网民。根据CNNIC在2019年6月公布的数据,中国网民的规模已达八点多亿,由此可以看出互联网的普及速度之快。互联网的飞速发展,影响着人类的生活,让人类社会变的更加高效,更加快捷。中国是一个特殊的国家,它有着丰富的文化底蕴和历史,是全世界的四大古国之一。之所以中国能始终保持着旺盛的生命力,能够克服无数难以想象的困难与险阻,是因为华夏子孙拥有悠长爱国主义传统的民族。华夏子孙能够团结在一起离不开爱国主义精神支柱,而在建设中国特色社会主义过程中,爱国主义起着重大作用。中国梦是我国追求的目标,而实现这个目标需要爱国主义教育作为驱动力,同时能够提升华夏子孙的思想精神,进而使社会得到全面发展,让各族人民的凝聚力和创造力得到质的变化。中华民族的伟大复兴与爱国主义教育是相辅相成的。习主席在十八大会议上强调要高度重视爱国主义教育,并且在多个场合进行论述,解释到我国永恒的主题是爱国主义教育。[1]陈丹.习近平关于爱国主义教育的重要命题[1]陈丹.习近平关于爱国主义教育的重要命题.思想教育研究,2019-04-25[2]金曦.新媒体背景下大学生爱国主义教育的路径选择.兰州交通大学,2015-04-1全球的不断发展,催化了互联网的发展,让互联网能为人类提供许多信息,而这些信息既有正面的影响,也会有负面的影响,对于爱国主义精神和传统思想品德观念都会造成一定的冲击。同样,社会发展也会带动爱国主义教育的发展。在互联网高速发展的时代,唯有以爱国主义教育为基础,与互联网进行融合,爱国主义教育才会愈加显著,更加具有活力。1.2论文主要内容本论文将对爱国主义教育类游戏的开发与实现进行研究,探索爱国主义与游戏相互结合的模式。摸索游戏与爱国主义教育相互结合的可能性。研究爱国主义教育类游戏玩法创新。1.3论文组织结构本论文从构思到开发与实现,结合了学习到的unity3D游戏开发的内容。制作出一款三维的爱国主义教育类游戏。游戏制作过程,包含了游戏的场景模型搭建,游戏的功能设计和游戏代码的编写。论文共分为六个章节:第一部分:绪论,介绍本次毕业设计制作的背景与意义,本次论文的主要内容。第二部分:介绍本次制作游戏所使用到的各个软件。第三部分:介绍本次制作游戏的玩法,模型的需求。第四部分:游戏的系统功能设计和各个界面的设计。第五部分:进行游戏的测试,封装。第六部分:结论和游戏的不足与需要的改进。

游戏开发原理2.1Unity3D游戏引擎2.1.1Unity3D游戏引擎介绍美国旧金山的一家视频游戏开发公司开发了一款可跨平台的游戏开发引擎Unity3D。而Unity3D能够实现跨平台操作是因为有Mono的技术支持,Mono又是以.NET框架为基础开发的,所以只使用一种编程语言开发者就可以开发出不同平台的游戏,包括移动端、PC端等。提供了一个便利高效的跨平台游戏开发引擎给开发者们。当前全球的电脑系统都是以windows和苹果系统为主,这些主流系统在unity3D中都能得到很好的兼容。当然生活中还有一些系统是不常见到的,比如Linux系统。Unity3D还支持Switch、Xbox、安卓、苹果等平台游戏。甚至一些HTML5网页游戏等新媒体平台unity3D开发引擎都能够支持。除了在开发平台游戏中起到作用,在其它领域unity3D也同样被广泛使用,如作为互动内容的综合型创作工具在建筑领域被用于建筑可视化、实时三维动画等。 Unity3D于2005年开始面向开发者,时至今日unity3D游戏引擎已经支持研发的平台数达到了27个。Unity3D在游戏开发市场已经是炙手可热的一个游戏引擎,基本上国内大部分游戏都是由unity3D游戏引擎开发的。2.1.2Uniy3D常用的生命周期函数Unity3D游戏引擎不像常规的程序直接在Main函数入口运行,而是在内部实现了自己的生命周期事件。写入这些生命周期的事件,Unity内部就会不断地迭代这些生命周期函数。下面按照脚本的执行顺序介绍游戏中比较常用的Unity事件函数。Awake():游戏对象被初始化的时候调用,无论该对象是否已被激活。Start():与Awake事件不可同时进行,但只有被激活的时候才能够执行。Update():游戏中的帧事件,因为游戏大部分都是按帧率来执行逻辑的。FixedUpdate():游戏的固定帧事件,基本同Update(),但该事件可由开发者去控制执行频率。OnEnable():在Start事件后调用,只有被激活的时候才会执行。OnDisable():当游戏对象被禁止激活的时候会调用。OnDestroy():当游戏对象被销毁的时候执行。Unity3D的脚本基本上都会继承自于MonoBehavior基类。一般不继承于MonoBehavior的类会用来写一些工具类。通常来说,它在整个程序运行的过程中都是存在的,除非手动GC释放内存。2.1.3Unity3D的API接口 API,应用程序接口。API是开发者预先定义好的函数,目的是提供给其它开发者直接访问,不再需要访问原开发者的代码,去理解内部工作的机制,避免编写无用程序,减轻开发者的编程任务。 Unity3D丰富的API接口是一个优势,它有一套完整的API函数库。通过这些API接口,开发者可以大大减少编程任务,可以很轻松的实现项目的功能需求,大大的节省了开发的时间成本,提高开发效率。 2.1.4Unity3D物理引擎介绍 为了让游戏更加真实生动,每一家公司的游戏开发引擎里都会搭载物理引擎。 Unity3D内置的是英伟达公司的Physx物理引擎,在许多的物理引擎中应用最广泛的物理引擎就是Physx,许多游戏3D大作都是采用Physx。实现游戏的刚体碰撞、布料、柔体碰撞等等真实物理现象,游戏开发者就可以使用Physx物理引擎来逼真地进行模拟,让游戏开发变的更加高效。2.1.5Unity3D优势 编辑:Unity3D具有可视化的的编辑模式,具有实时预览窗口game与属性编辑窗口。 粒子系统:Unity3D有内置粒子系统,并且功能也十分强大。Unity3D粒子系统包括了初始化模块、发射模块、形状模块、存活时间的速度模块、存活时间的限制速度模块、存活时间的受力模块、存活时间的颜色模块、颜色速度模块、存活时间的大小模块、大小速度模块、存活时间的旋转模块、旋转速度模块、外力模块、碰撞模块、子发射器模块、纹理层动画模块、渲染器模块。 环境灯光效果:Unity提供了真实的光影渲染系统,能够真实地模拟出环境光。2.2Cinema4D软件 本次设计中所使用的三维软件是Cinema4D,简称“C4D”。C4D是一款拥有丰富插件和强大运算能力的软件。近几年中,C4D深受三维设计师的追捧,由于出色的计算能力和简洁的界面使得它在广告电影等行业都一番席位。 本次游戏里的模型均是使用Cinema4D进行建模。2.2.1Cinema4D的优势Cinema4D界面简洁:3Dsmax是游戏开发中最常用的建模软件之一,但是相对于Cinema4D它的界面复杂。Cinema4D容易上手:Cinema4D是一款简单,容易上手的三维设计软件,它比3Dsmax等一些三维设计软件的简单程度要大很多。Cinema4D稳定性:Cinema4D的稳定性相较于3Dsmax更加的稳定。2.3C#开发语言 C#语言是微软在2000年推出的一款编程语言,因为是以.NET框架为基础的高级编程语言。所以拥有VisualBasic快速开发能力。微软希望通过这种语言来取代在1995年发行的java编程语言。在当代国际上C#已经成为了一种标准规范。 C#并不是一种可以跨越平台的编程语言,它只是通过Mono来实现跨越多个平台。本次我们的游戏就是使用C#进行开发,因为Unity3D有API库,所以能让我们在开发的时候减少一些繁琐事。2.4Photoshop软件 AdobePhotoshop,简称“PS”。PS是一款图像处理软件,它由美国Adobe公司开发。 PS能够将多个图片进行合成,同时还可以将图层作为遮罩。PS支持多种颜色模式比如RGB等。PS支持jpg、png、等图片文件格式,支持PSD与PSB文件格式。不仅仅支持位图,PS对文本、矢量图形、3D的视频与图形都支持。PS除了自身的功能外,还可以通过外接插件扩展来增加功能。这些插件可以为PS提供全新的功能。游戏里的开始按钮和音乐按钮是通过PS进行调色,绘制,合成。开始界面也是通过PS来合成。 游戏中所用到的贴图都经过了PS的调整。2.4.1Photoshop的优势 Photoshop预设的工具组合得十分巧,能够不使用任何外接拓展,仅仅使用软件自带的工具就能实现你想要的所有效果。 Photoshop具有很强大的可扩展性。 photoshop图像处理算法执行效率极高。Photoshop同时能够实时预览,即使一些操作计算量很大,Photoshop的图像处理执行效率还是很高。2.5Microsoftvisualstudio Visualstudio是微软公司的一款开发工具。Visualstudio是一个完整的开发工具集,它有UML工具、IDE等等。Visualstudio编写的代码支持微软的所有平台,包括MicrosoftWindows、WindowsPhone等等。 本次游戏开发所使用的版本是visualstudio2017版本。

游戏设计3.1场景计 本次系统中包括了场景一和场景二,场景一为开始界面,玩家通过开始界面进入到另一个场景进行游戏操作。场景二为玩家经行游戏操作的主场景,玩家可以在场景二中行走,触发场景二的一些按钮。3.2场景地形制作 Unity3D内置的地形系统能够满足我们本次游戏的要求,所以本次地形的制作是使用unity3D内置的Terrain。在AssetStore中下载一些植物。在Hierarchy面板中鼠标右键Create——3DObject——Terrain创建一个地形平面,在Inspector面板中调整地形大小,用Terrain中的第一个工具在地形上拉出所需要的山脉,用第三个工具给山脉进行平滑。用第四个工具给地形画出游戏中的道路。第五个工具给地形场景添加树木,第六个工具给地形场景增加草和花。EditDetails按钮可以添加在AssetStore中下载的植物。综合上面所说到的工具运用后,制作出来了我们的地形,如下3-1图。图3-1场景地形3.3场景模型制作 场景模型使用cinema4D进行建模。 3.3.1侵华日军南京大屠杀遇难同胞纪念馆模型制作 根据网上查询的资料,模型搭建了其中一部分。在cinema4D(以下简称“C4D”)中创建一个正方体,在右下角属性面板中调整正方体的大小通过位置的调整制作出地面与墙体,给其一个大理石的材质,如下3-2图。图3-2地面与墙体 在C4D中建立一个字体,内容为遇难者300000。制作11种不同语言的字。将位置进行调整放在墙面上,给字体上一个金属的材质。如下3-3图。图3-3文字内容 在C4D种创建正方体,属性面板调整大小,调整成十字石碑的一个小部分,然后通过克隆变形器复制出其余部分。制作出十字石碑的一部分,然后通过上面的方式做出十字石碑的另一部分,通过布尔运算,在模型上抠出时间数字。如下3-4图。图3-4十字石碑 最终将完成的模型进行组合。如下3-5图。图3-5纪念馆3.3.2人民英雄纪念碑模型制作 C4D中创造正方体在属性面板中调整大小,制作出地面。再用正方体调整大小,给予克隆变形器,改变克隆的位置,制作出楼梯。用正方体调整出扶手的形状,用小正方体进行布尔运算和克隆,制作出扶手。将地面、楼梯、扶手进行组合。如下3-6图。图3-6纪念馆雏形C4D中创建一个正方体转为可编辑对象,选取最上方的面进行挤压,挤压出的部分进行大小缩放,制作出顶部。选取顶部四个角进行挤压,做出翼角。选取正面的面进行内部挤压,压出放字的区域,在这区域放上人民英雄纪念碑的字。给字体添加金属材质,给石碑添加纹理贴图和石头材质。最终制作出石碑。如下3-7图。图3-7石碑将石碑和其它一起组合成人民英雄纪念碑。如下3-8图。图3-8人民英雄纪念碑3.3.3周恩来纪念馆模型制作 在AI中绘制出周恩来纪念馆的地形的线框,导入进C4D里成为样条线,添加挤压生成器,挤压出厚度,将人民英雄纪念碑中的扶手再次利用,添加地面的材质球,在法线通道添加瓷砖的法线贴图,制作出周恩来纪念馆的场景地形。如下3-9图。图3-9场景地形 创造正方体,转为可编辑对象,通过布尔运算制作出窗户。创造一个圆锥,在属性面板中将边数调整为4,转为可编辑对象,挤压出翼角。创造4个正方体,调整大小制作成柱子。并用正方体制作出草地,选取斜坡上的面,鼠标右键分裂,得到一个新对象,选择新对象右键挤压出一定厚度,制作出斜坡的草地,添加草的材质球。最终制作出周恩来纪念馆。如下3-10图。图3-10周恩来纪念馆3.3.4毛主席模型制作 本次毛主席模型是使用网络上下载的雕塑模型,雕塑模型能够展现更多的模型细节,是普通建模所不能达到的。

第四章游戏界面设计4.1场景一:游戏开始界面 场景一为开始界面,使用的是Unity3D内置的canvas制作。4.1.1游戏开始界面功能 开始游戏按钮,用来进入场景二。当鼠标移动到开始按钮,开始按钮会变成橙色。鼠标移出开始按钮,颜色会消失。 开始界面背景是一个循环播放的视频。 音乐按钮:控制开始界面的音乐播放,当按下按钮后,音乐会停止播放。 音乐控制滑条:控制开始界面的音乐音量大小。 退出按钮:点击关闭游戏。4.1.2游戏开始界面制作 制作游戏开始界面,需新建一个新场景,命名为01。 导入游戏开始界面所需的视频,并且将它们转变为MovieTexture。在Hierarchy面板右键UI->Canvas,创建一个Canvas。在Canvas下创建RawImage。新建脚本文件命名为Video_1。代码如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassvideo_1:MonoBehaviour{publicMovieTexturemovTexture; voidStart(){GetComponent<RawImage>().texture=movTexture;movTexture.loop=true;movTexture.Play();}} 将脚本文件托给RawImage,把视频文件拖入脚本中。如下图4-1所示。图4-2RawImage在Canvas下创建Button,删除Button里的text的内容,在Button添加我们准备好的精灵图。在属性面板中将Highlightedcolor中修改成我们需要的橙色。如下图4-3。图4-3修改颜色 在Canvas下创建Toggle,打开Toggle子物体,修改Background颜色为蓝色,在Checkmark添加我们准备好的音乐图标。在Label修改text的内容为Music,修改颜色为橙色。如下4-4图。图4-4修改Image 在Canvas下创建Slider,打开FillArea->Fill修改颜色为橙色。如下4-5图图4-5设置Slider在Hierarchy面板右键创建AudioSource。在AdioClip添加我们准备好的背景音乐。接下来我门创建一个空物体,改名为Scripts。我们在创建一个脚本startScript.cs。将脚本startScript.cs添加在空物体Scripts上,之后分别给Button、Toggle、Slider添加onclick事件,将空物体Scripts拖入,选择相对应的函数。 startScript脚本上我们需要实现音乐的播放停止与音量大小控制。代码如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.SceneManagement;usingUnityEngine.UI;publicvoidChangeVolume(){music.volume=sd.value;}publicclassstartScript:MonoBehaviour{ publicAudioSourcemusic; publicToggletoggle; publicSlidersd; publicvoidChangeVolume() {music.volume=sd.value; } publicvoidPlayMusic() {if(toggle.isOn){music.Play();}else{music.Stop();}}startScript实现场景切换的代码如下:publicvoidSceneChange(stringsceneName){SceneManager.LoadScene(sceneName);}在Canvas下新建button命名为退出,修改Text为退出。新建脚本,命名为Quit。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassQuit:MonoBehaviour{publicvoidBtnQuit(){UnityEditor.EditorApplication.isPlaying=false;}}拖拽脚本赋予退出按钮。如下4-6图所示。图4-6按钮赋值新建一个Text命名为标题,修改Text为爱国主义教育基地。最终开始界面效果图。如下4-7图所示。图4-7开始界面4.2场景二:游戏主场景 游戏主场景包括了返回按钮、音乐开关按钮、音量控制、实时小地图、烟花粒子效果。4.2.1返回按钮制作 在游戏主场景Hierarchy面板鼠标右键,创建一个Canvas,Canvas下创建一个Button。修改Button内text的内容为返回。 创建一个脚本,命名为back。将back脚本拖给Button。 Back脚本代码如下:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;usingUnityEngine.SceneManagement;publicclassback:MonoBehaviour{voidStart(){this.GetComponent<Button>().onClick.AddListener(OnClick);}voidOnClick(){SceneManager.LoadScene("youxi-start");}voidUpdate(){}}4.2.2实时小地图的制作通过增加小地图来使玩家可以实时观察到大范围的地形系统上各个物体的方位可以对游戏进行情况,可以让玩家在进行游戏时,更加准确判断玩家自身位置。首先在Hierarchy面板右键新建一个Image,点击Image右键新建RawImage,在project面板右键新建RenderTexture命名为minimap。如下图4-8所示。图4-8新建RenderTexture新建一个摄像机作为角色的子物体,旋转90度放在角色上方,将相机Projection的参数修改为Orthographic,将摄像机视野变为平面,将minimap拖到摄像机TargetTexture中。如下图4-9所示。图4-9设置摄像机在PS中画一张圆形白色图片,导入Unity3D命名为mask,并且转变为精灵图,用作遮罩。将mask拖到Image的SourceImage中。将minimap拖到RawImage的Texture中,并给Image添加Mask组件。如下图4-10所示。图4-10设置mask最后调整Image的大小,将其移动到右下角。如下图4-11所示。图4-11小地图4.2.3烟花粒子效果制作 本次游戏中的烟花效果是使用Unity3D内置的ParticleSystem系统。 需要在PS中准备一张烟花的图片,如下图4-12所示。图4-12烟花图片 我们需要一个粒子系统ParticleSystem,命名为烟花。在ParticleSystem属性面板中将Prewarn勾选上,调整StartLifetime粒子存活的时长,让粒子存在时间为3秒-5秒。调整StartSpeed粒子发射快慢,让粒子发射速度在合适的数值。调整StartSize粒子大小数值为3。调整Startcolor粒子初始发射颜色为黄色。给粒子增加GravityModifier粒子重力,设置数值为3。不勾选3DStartSize。如下图4-13所示。图4-13设置粒子属性 调整粒子发射每秒发射的数量Emission->RateoverTime为1。如下图4-14所示。图4-14设置RateoverTime属性 调整粒子发射的角度Shape->Angle。如下图4-15所示。图4-15设置Angle属性 开启粒子拖尾Trails,去掉粒子影响拖尾宽度SizeaffectsWidth,去掉继承粒子颜色InheritParticleColor。将widthoverTrail修改为曲线。将ColoroverTrail修改成渐变颜色由橙色渐变到透明。如下图4-16所示。图4-16设置粒子颜色 在Project面板创建两个材质球,分别命名为yanhua-head和yanhua-trails。将PS准备好的烟花图片贴在yuanhua-head的particleTexture中。将yuanhua-head放到Renderer->Material,将yanhua-trails放到Renderer->TrailMaterial。如下图4-17所示。图4-17 复制一个烟花命名为烟花2作为烟花一个子物体。去掉Looping,修改StartSpeed,修改Startcolor为橙色,将Maxparticles调整为100000。如下图4-18所示。图4-18设置粒子属性 Emission面板将RateoverTime调整为0,在Bursts添加一个list,将list中Count给设置一个75到150的范围。如下图4-19所示。图4-19调整范围 开启烟花2的SubEmission,增加2个粒子发射器分别命名为1和2。如下图4-20所示。图4-20粒子发射器 修改Trails中的颜色。如下图4-21所示。图4-21修改颜色 复制一个1并命名为3,将其作为烟花的子物体。如下图4-22所示。图4-22烟花的子物体 将3的Renderer->TrailMaterial换成yuanhua-head。如下图4-23所示。图4-23TrailMaterial换成yuanhua-head 调整1、2、3的Maxparticles的数值。 分别调整1、2、3的ColoroverLifetime、SizeoverLifetime、RotationoverLifetime。如下图4-24所示。图4-24调整后的数值 开启烟花的SubEmission,将3和烟花2作为发射器,烟花2的发射模式修改为Death。如下图4-25所示。图4-25发射器的关系 最终效果如下图4-26所示。图4-26烟花效果 4.2.4场景组合 将侵华日军南京大屠杀遇难同胞纪念馆模型,周恩来纪念馆模型,人民英雄纪念碑模型,毛主席模型,地形进行组合,得到我们游戏的主场景。如下图4-27所示。图4-27最终合成场景4.3第一人称视角制作 在Hierarchy面板新建一个空物体,命名为Player,并且添加CharacterController组件,修改slopeLimit为90,StepOffset为0.1,具体如下图4-28所示。图4-28CharacterController数值 在Player下创建一个摄像机。 开始编写脚本,新建一个脚本文件,命名为MouseLook_1,控制摄像机跟着鼠标移动。 定义一些初始量,规定角色视角的旋转范围。usingUnityEngine;usingSystem.Collections;[AddComponentMenu("Camera-Control/MouseLook")]publicclassMouseLook_1:MonoBehaviour{publicenumRotationAxes{MouseXAndY=0,MouseX=1,MouseY=2};/publicRotationAxesaxes=RotationAxes.MouseXAndY;publicfloatsensitivityX=15F;publicfloatsensitivityY=15F;publicfloatminimumX=-360F;publicfloatmaximumX=360F;publicfloatminimumY=-60F;publicfloatmaximumY=60F;floatrotationY=0F;}通过axes选择的模式来控制角色视觉旋转的范围。当axes选择为RotationAxes.MouseXAndY,角色视角X和Y轴都可以旋转。当axes选择为RotationAxes.MouseX,角色视角只有X轴可以旋转,Y轴不能旋转。当axes选择为RotationAxes.MouseY,角色视角只有Y轴可以旋转,X轴不能旋转。voidUpdate(){if(axes==RotationAxes.MouseXAndY){floatrotationX=transform.localEulerAngles.y+Input.GetAxis("MouseX")*sensitivityX;rotationY+=Input.GetAxis("MouseY")*sensitivityY;rotationY=Mathf.Clamp(rotationY,minimumY,maximumY);transform.localEulerAngles=newVector3(-rotationY,rotationX,0);}elseif(axes==RotationAxes.MouseX){transform.Rotate(0,Input.GetAxis("MouseX")*sensitivityX,0);}else{rotationY+=Input.GetAxis("MouseY")*sensitivityY;rotationY=Mathf.Clamp(rotationY,minimumY,maximumY);transform.localEulerAngles=newVector3(-rotationY,transform.localEulerAngles.y,0);}}当检测到角色有刚体Rigidbody,冻结角色旋转。voidStart(){if(GetComponent<Rigidbody>())GetComponent<Rigidbody>().freezeRotation=true;} 新建一个脚本,命名为move,控制角色移动与角色脚步声。 定义一个速度speed,定义其它。usingUnityEngine;usingSystem.Collections;publicclassmove:MonoBehaviour{publicCharacterControllercontroller;publicnewRigidbodyrigidbody;publicfloatspeed=1;publicGameObjectmisicgameobject;privateAudioSourceAs;rigidbody读取Rigidbody组件,controller读取CharacterController组件,As读取AudioSource组件。voidStart(){rigidbody=this.GetComponent<Rigidbody>();controller=this.GetComponent<CharacterController>();As=misicgameobject.GetComponent<AudioSource>();}游戏中按下W,A,S,D按键的时候,播放脚步声,松开W,A,S,D按键的时候,停止播放脚步声。if(Input.GetKeyDown(KeyCode.W)||Input.GetKeyDown(KeyCode.A)||Input.GetKeyDown(KeyCode.S)||Input.GetKeyDown(KeyCode.D)){As.Play();}if(Input.GetKeyUp(KeyCode.W)||Input.GetKeyUp(KeyCode.A)||Input.GetKeyUp(KeyCode.S)||Input.GetKeyUp(KeyCode.D)){As.Pause();}游戏中的移动是根据玩家按下W,A,S,D按键时,调用对应的语句。如:当玩家按下A时候,系统读取controller.SimpleMove,实现角色的移动。if(Input.GetKey("a")){controller.SimpleMove(transform.right*-speed);Debug.Log("a");}elseif(Input.GetKey("d")){controller.SimpleMove(transform.right*speed);Debug.Log("d");}elseif(Input.GetKey("w")){controller.SimpleMove(transform.forward*speed);Debug.Log("w");}elseif(Input.GetKey("s")){controller.SimpleMove(transform.forward*-speed);Debug.Log("s");}在Hierarchy面板鼠标右键->Audio->AudioSource。将准备好的脚步音频放进AudioClip,开启Loop,关闭PlayOnAwake,并命名为脚步声。如下图4-29所示。图4-29AudioSource数值 将move和MouseLook_1给Player,将脚步声拖进misicgameobject,修改Speed为13。如下图4-30所示。图4-30脚本Move4.4游戏交互信息窗口制作 信息窗口是本次游戏重要的一个功能,它的功能是为玩家介绍历史人物,介绍游戏中模型的历史。[3][3]王爱军,李中永,颜世波.基于Unity3D的博物馆虚拟漫游系统设计.湖南工程学院学报(自然科学版),2019-03-254.4.1周恩来纪念馆信息窗口制作新建Cube,并重命名为周恩来介绍。将属性面板中的MeshRenderer关闭,让Cube不被渲染看到。 新建一个脚本文件,并且命名为contest_zhouenlai拖拽给周恩来介绍。如下图4-31所示。图4-31 初始定义Windows是不显示,使用OnMouseEnter()事件实现鼠标指针进入控件时显示标题,OnMouseExit()事件实现鼠标指针离开控件时消失标题。usingUnityEngine;usingSystem.Collections;publicclasscontest_zhouenlai:MonoBehaviour{boolisShowTip;publicboolWindowShow=false;voidStart(){isShowTip=false;}voidOnMouseEnter(){isShowTip=true;}voidOnMouseExit(){isShowTip=false;}通过使用OnGUI函数来制作一个对话框。定义字体的大小为30,定义字体颜色为白色。通过GUI.Label设置一个标题,当鼠标移动到对应的物体时候显示标题周恩来纪念馆,鼠标移开后标题消失。GUI.Window定义一个500*500的对话框。voidOnGUI(){if(isShowTip){GUIStylestyle1=newGUIStyle();style1.fontSize=30;style1.normal.textColor=Color.white;GUI.Label(newRect(Input.mousePosition.x,Screen.height-Input.mousePosition.y,400,50),"周恩来纪念馆",style1);}if(WindowShow){GUI.Window(0,newRect(30,30,500,500),MyWindow,"周恩来纪念馆介绍");}MyWindow函数是信息内容函数,通过GUILayout.Label()将内容显示在对话框中。voidMyWindow(intWindowID){GUILayout.Label("");GUILayout.Label("");GUILayout.Label("人物介绍:周恩来");GUILayout.Label("");GUILayout.Label("");GUILayout.Label("主要成就:");GUILayout.Label("党的创建人之一和核心领导成员");GUILayout.Label("人民军队的创建人和领导人");GUILayout.Label("探索适合中国的社会主义道路");GUILayout.Label("对党的统一战线巨大贡献");GUILayout.Label("中国特色外交的奠基人");}OnMouseDown()是鼠标点击事件,当鼠标点击标题时,对话框就会弹出,再次点击标题时,对话框则会消失。voidOnMouseDown(){Debug.Log("show");if(WindowShow)WindowShow=false;elseWindowShow=true;}当鼠标无法点击标题来关闭对话框时,可以通过键盘按键Escape来关闭对话框。privatevoidUpdate(){if(Input.GetKeyDown(KeyCode.Escape)){WindowShow=false;}} 效果如下图4-32所示。图4-32信息窗口4.4.2人民英雄纪念碑信息窗口制作在Hierarchy新建一个Cube,并重新命名为人民英雄纪念碑介绍。在属性面板将MeshRenderer关闭,让Cube不被渲染看到。新建一个脚本文件,并且命名为context_jinianbei拖拽给人民英雄纪念碑介绍。如下图4-33所示。图4-33脚本文件context_jinianbei初始定义Windows是不显示,使用OnMouseEnter()事件实现鼠标指针进入控件时显示标题,OnMouseExit()事件实现鼠标指针离开控件时消失标题。usingUnityEngine;usingSystem.Collections;publicclasscontext_jinianbei:MonoBehaviour{boolisShowTip;publicboolWindowShow=false;privatevoidUpdate(){if(Input.GetKeyDown(KeyCode.Escape)){WindowShow=false;}}voidStart(){isShowTip=false;}voidOnMouseEnter(){isShowTip=true;}voidOnMouseExit(){isShowTip=false;}通过使用OnGUI函数来制作一个对话框。定义字体的大小为30,定义字体颜色为白色。通过GUI.Label设置一个标题,当鼠标移动到对应的物体时候显示标题人民英雄纪念碑,鼠标移开后标题消失。GUI.Window定义一个500*500的对话框。voidOnGUI(){if(isShowTip){GUIStylestyle1=newGUIStyle();style1.fontSize=30;style1.normal.textColor=Color.white;GUI.Label(newRect(Input.mousePosition.x,Screen.height-Input.mousePosition.y,400,50),"人民英雄纪念碑",style1);}if(WindowShow)GUI.Window(50,newRect(50,50,500,500),MyWindow,"人民英雄纪念碑介绍"); MyWindow函数是信息内容函数,通过GUILayout.Label()将内容显示在对话框中。}voidMyWindow(intWindowID){GUILayout.Label("");GUILayout.Label("");GUILayout.Label("");GUILayout.Label("");GUILayout.Label("建立背景");GUILayout.Label("");}voidOnMouseDown(){Debug.Log("show");if(WindowShow)WindowShow=false;elseWindowShow=true;}} 效果如下图4-34所示。图4-34信息窗口4.4.3侵华日军南京大屠杀遇难同胞纪念馆介绍信息窗口制作在Hierarchy新建一个Cube,并重新命名为侵华日军南京大屠杀遇难同胞纪念馆介绍介绍。在属性面板将MeshRenderer关闭,让Cube不被渲染看到。新建一个脚本文件,并且命名为contest_nanjing拖拽给侵华日军南京大屠杀遇难同胞纪念馆介绍介绍。如下图4-35所示。图4-35脚本文件contest_nanjing初始定义Windows是不显示,使用OnMouseEnter()事件实现鼠标指针进入控件时显示标题,OnMouseExit()事件实现鼠标指针离开控件时消失标题。usingUnityEngine;usingSystem.Collections;publicclasscontest_nanjing:MonoBehaviour{boolisShowTip;publicboolWindowShow=false;privatevoidUpdate(){if(Input.GetKeyDown(KeyCode.Escape)){WindowShow=false;}}voidStart(){isShowTip=false;}voidOnMouseEnter(){isShowTip=true;}voidOnMouseExit(){isShowTip=false;}通过使用OnGUI函数来制作一个对话框。定义字体的大小为30,定义字体颜色为白色。通过GUI.Label设置一个标题,当鼠标移动到对应的物体时候显示标题侵华日军南京大屠杀遇难同胞纪念馆,鼠标移开后标题消失。GUI.Window定义一个500*500的对话框。voidOnGUI(){if(isShowTip){GUIStylestyle1=newGUIStyle();style1.fontSize=30;style1.normal.textColor=Color.white;GUI.Label(newRect(Input.mousePosition.x,Screen.height-Input.mousePosition.y,400,50),"侵华日军南京大屠杀遇难同胞纪念馆",style1);}if(WindowShow)GUI.Window(50,newRect(50,50,500,400),MyWindow,"侵华日军南京大屠杀遇难同胞纪念馆介绍");}voidMyWindow(intWindowID){GUILayout.Label("");GUILayout.Label("");GUILayout.Label("");GUILayout.Label("");GUILayout.Label("");}voidOnMouseDown(){Debug.Log("show");if(WindowShow)WindowShow=false;elseWindowShow=true;}}效果如下图4-36所示图4-36信息窗口4.4.4毛主席信息窗口制作在Hierarchy新建一个Cube,并重新命名为毛主席介绍。在属性面板将MeshRenderer关闭,让Cube不被渲染看到。新建一个脚本文件,并且命名为maozhuxi拖拽给毛主席介绍。如下图4-37所示。图4-37脚本文件maozhuxi初始定义Windows是不显示,使用OnMouseEnter()事件实现鼠标指针进入控件时显示标题,OnMouseExit()事件实现鼠标指针离开控件时消失标题。usingUnityEngine;usingSystem.Collections;publicclassmaozhuxi:MonoBehaviour{boolisShowTip;publicboolWindowShow=false;privatevoidUpdate(){if(Input.GetKeyDown(KeyCode.Escape)){WindowShow=false;}}voidStart(){isShowTip=false;}voidOnMouseEnter(){isShowTip=true;}voidOnMouseExit(){isShowTip=false;}通过使用OnGUI函数来制作一个对话框。定义字体的大小为30,定义字体颜色为白色。通过GUI.Label设置一个标题,当鼠标移动到对应的物体时候显示标题毛主席,鼠标移开后标题消失。GUI.Window定义一个500*500的对话框。vo

温馨提示

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

评论

0/150

提交评论