虚拟现实技术与应用(第2版)课件 第6-9章 地图系统-射击游戏- 实践延展_第1页
虚拟现实技术与应用(第2版)课件 第6-9章 地图系统-射击游戏- 实践延展_第2页
虚拟现实技术与应用(第2版)课件 第6-9章 地图系统-射击游戏- 实践延展_第3页
虚拟现实技术与应用(第2版)课件 第6-9章 地图系统-射击游戏- 实践延展_第4页
虚拟现实技术与应用(第2版)课件 第6-9章 地图系统-射击游戏- 实践延展_第5页
已阅读5页,还剩176页未读 继续免费阅读

下载本文档

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

文档简介

虚拟现实技术与应用第六章地图系统—射击游戏Metaverse01预制体制作资源导入与导出项目编译游戏资源制作02……地形引擎03SUPPORTINGTEXTHERE04SUPPORTINGTEXTHERE绘制地形添加植被绘制细节地形参数设置自动寻路音效音效组件介绍音效参数详解使用音效组件粒子系统添加粒子系统粒子系统的应用05射击游戏开发.射击游戏场景设计第一人称设置预设子弹且连续发射添加音效添加爆炸特效目标对象销毁第六章地图系统—射击游戏目录CONTENTS游戏资源制作

该案例选用Unity2019.3.5版本,一个游戏需要多种类型的资源,包括模型、动画、音效、视频、特效等,基于游戏前期的需求设计,使用脚本,围绕游戏主题和关卡将这些资源整合,最终成为用户眼前看到的交互式程序

游戏场景中,经常会多次使用同一个对象,比如待射击的对象、路障,这些对象有相同的外表、属性等,如果每个对象都逐一新建,会加大开发的时间成本,Unity提供的预制体功能给了我们解决这个问题的办法。重复使用的对象可以以预制体的方式存在于资源库中,这样当需要使用同类对象时,可以直接将预制体拖入场景中,大大节约了开发的时间成本。1.预制体的新建和修改打开第四章项目中的Scene1,该场景中有很多相同的对象,比如装饰柱、装饰球、花盆等,之前制作的方法是先同类型对象中的一个,再对其进行复制,现在我们可以用预制体的方式完成同类型物品的制作。1)新建预制体在Assects下新建一个Prefabs文件夹,左键选中loceker1拖至Prefabs文件夹,在Prefab文件夹中新生成一个可以看到缩略图的对象,这个就是预制体。同时可以看到层次面板中的Locker1由原来的灰色变成了蓝色,而其他非预制体的对象仍然是灰色,这就是预制体对象和非预制体对象的区别之一。2)预制体的使用当前场景中有四个装饰柱,现在可以通过拖拽更多预制体进场景的方式在场景中添加更多的预制体。效果如图所示。游戏资源制作

3)预制体的修改预制体除了方便我们快速生成同类型对象外,还有一个最便捷之处是当我们要修改物体时,可以直接对预制体进行修改,修改应用后可以直接显示在同类型所有对象上,这样就不需要一个个手动修改对象,大大提高了修改速度。例如我们现在需要修改装饰柱上自发光的颜色,可以在预制体文件夹找到选择预制体Locker1,点击右侧的OpenPrefab,这时看到层次面板已经不在场景的级别,而是进入到了Locker1的级别,选择ball1,在右侧材质的设置中修改自发光的颜色从蓝色变成红色,修改完成后,可以看到场景中四个装饰柱的球颜色都从蓝色变成了红色,如图所示。资源导入与导出

游戏开发需要大量的资源,Unity就是使用这些资源布置场景,通过代码进行交互,完成一个项目的设计与开发。所需资源包括静态的图片、纹理贴图、3D模型和动画等。资源一般通过自己构建后从外部导入或者直接从官方商城下载。1.资源导入外部资源导入有三种方法,第一种是直接将资源复制到根文件夹下;第二种是通过ImportPackage;第三种是通过官方资源商城导入。现在我们以StandardAssets(官方系统资源)为例,通过三种方式分别阐述资源包的导入方法。1)直接复制在Assects面板空白处右击,在弹出的窗口中选择“ShowinExplorer”,同时选择已经下载好的StandardAssets,直接复制到项目Assets的根文件下,如图所示。资源导入与导出

2)通过ImportPackage导入找到菜单栏上Assets下的ImportPackage,在弹出的对话框中选择StandardAssets.unitypackage,点击打开进行导入,导入完成后可以在Assets面板中看到导入的资源,资源导入与导出

3)官方商城下载Unity给我们提供了官方商城,和手机上的商城一样,在Unity的官方商城可以下载需要的资源,有免费资源和收费资源两种,用户可以根据自己的需求以及Unity的版本下载所需资源。首先,在菜单栏Windows下找到AssetStore,在Scene窗口的右侧会生成一个AssetStore窗口,官方商城是全英文显示,右上角有收藏、购物车等功能,用户可以在搜索栏搜索自己想要查找的资源关键字。Unity官方有个丰富的资源包叫“StandardAssets”,这个包也是本章后面制作地形时,多次用到的资源素材。(StandardAssets在2018后未更新,因此在2018以后的Unity版本中使用该资源包,某些地方需要做重新修改脚本)在搜索栏中输入“StandardAssets”,可以看到有很多相关的资源,右侧还有资源包相关的价格、版本等,用户可以根据自己的需求设定资源的条件,如图6.7所示。选中资源包后,可以进行资源包的介绍界面,我们可以看到资源包的支持的版本号、文件大小等相关信息,在资源包的右侧有一个Import按钮,点击该按钮可以导入资源包。资源导入与导出

2.资源导出当要把已完成的场景连同资源导出并可以用Unity软件打开这些场景资源时,可以选择资源导出的方法。和资源导入相似,选择菜单【Assets】-【ExportPackage】,在弹出的对话框中,勾选要导出的资源,点击【Export】,设定导出的文件夹即可,如图所示导出的资源后缀名是.unitypackage,图标和Unity官方图标一样。这种资源包可以再次通过Unity的【ImportPackage】导入,导入完成后可以继续开发制作场景。项目编译

如果我们需要生成一个用户可以直接点击使用的版本,就要对项目进行编译,有时还会需要资源导出,下面分别就这两点进行说明。1.项目的导出项目编译是生成一个用户可以直接使用的版本,用户无法用Unity打开项目,只能双击应用程序的图标打开,Unity支持多平台发布,几乎包含了所有的平台,目前主流Android,OS平台,Android平台可以直接使用Unity自行打包,但iOS平台需要借助Mac电脑进行打包。编译的一般步骤如下:第一步,一个项目中一般包括多个场景,一定要先打开准备编译的场景。第二步,点击菜单【File】-【BulidSettings】,点击【AddOpenScenes】,添加要编译的场景。第三步,选择编译的平台,在右侧设置平台的相关参数。第四步,点击左下角的【ProjectSeeting】设置项目的一些基本信息,包括Audio音频、InputManger输入输出的方式、运行设置等。例如可以选择【ProjectSeeting】-【Player】设置公司名称、版本号、项目图标等。项目编译

第五步,回到编译窗口,点击【Bulid】后,选择编译文件保存的路径,完成编译。也可以选择【BulidAndRun】,该功能是编译完成后立刻运行运用程序,和【Bulid】有些许差别。编译后的文件会根据不同平台显示不同的文件信息,比如Windows平台下的就会生成图左所示的信息,WebGL平台下就会生成图右所示的信息。需要注意的是,当我们发给用户时,一定要连同整个编译文件一并发给用户,不能只发.exe文件或.html文件。01预制体制作资源导入与导出项目编译游戏资源制作02……地形引擎03SUPPORTINGTEXTHERE04SUPPORTINGTEXTHERE绘制地形添加植被绘制细节地形参数设置自动寻路音效音效组件介绍音效参数详解使用音效组件粒子系统添加粒子系统粒子系统的应用05射击游戏开发.射击游戏场景设计第一人称设置预设子弹且连续发射添加音效添加爆炸特效目标对象销毁第六章地图系统—射击游戏目录CONTENTS地形引擎

Unity3D自带地形引擎,可以轻松绘制游戏地形。通过地形引擎可以绘制地形的地貌、添加植被等,为做出一款精彩的游戏做好准备。Unity3D自带地形引擎,可以轻松绘制游戏地形。通过地形引擎可以绘制地形的地貌、添加植被等,为做出一款精彩的游戏做好准备。组件的五个功能从左到右依次是CreatNeighborTerrains、PaintTerrain笔刷工具、PaintTrees树木描绘工具、PaintDetails细节描绘工具、TerrainSettings地形设置工具等,如图6.15所示。1.CreatNeighborTerrain:创新建地形工具。在当前已创建的地形旁边创建新的地形。2.PaintTerrain:笔刷工具,是地形创建中最重要的工具之一。该工具包含RiaseorLowerTerraing升降地形、PaintHoles画洞工具、PaintTexture画纹理、SetHeight设置地面高度、SmoothHeight设置平滑、StampTerrain固定高度地形引擎

【SetHeight】:在开发时,为了能够刷出山谷和山峰,通常要先把地形抬高,也就是选择SetHeight,设定Height的高度,点击右下角“Flatten”后完成高度的设置,如图6.16所示。这时,地形高于地平面50,高度差值就是之后可以设置的山谷深度。【RiaseorLowerTerraing】:升降地形画地形时,先设置笔刷大小,点击左键可画出山峰,按住shift键,同时点击鼠标左键可以降低山峰的高度直至地平面。地形引擎

【PaintHoles】:坑洞绘制。可以在地形上遮罩出一些区域,还可以通过代码控制这些遮罩。一般要结合ProBuilder和Polybrush等Unity的内置工具,才能快速创类似山洞、巢穴、湖泽等地貌。【PaintTexture】:当地貌的外观完成后,可以进行纹理的设置。纹理设置之前,可以先将选用的材质导入,导入方法可以直接复制在项目的根文件夹下,也可以通过导入包的方式导入。这里可以使用之前StandardAssets标准资源包中的素材。选择“PaintTexture”,点击EditTerrainLayers,在弹出的对话框中选择“CreateLayer”,选择对应素材,Unity默认添加的第一个地形图层将用来配置填充地形纹理。可以通过调整Texture对应的属性值,调整贴图的效果。地形引擎

Unity也支持创建多个地形图层,并通过下方的Brushes工具,调整笔刷大小后,选择指定的材质,单击并在地形上拖动光标来创建平铺纹理的区域。【SmoothHeight】:平滑地形,使地形的尖锐部分变得平滑。平滑后的效果对比如下图所示。【StampTerrain】:地形图章。在当前高度贴图之上标记画笔形状。添加植被

在给场景添加植被前,确保Assets中已有相关的植被模型,之前我们已经导入了StandardAssets,其中有植被素材。如果以后新建的项目没有该素材,可以通过导入外部包的方式导入到项目中。导入方法一:选择【Assets】—【ImportPackage】-【-CustomPackage】,将外部素材导入;方法二,在右侧Assets资源面板的空白处单击,点击【ShowinExplorer】,找到素材存储的根目录,直接将素材复制在该目录下。设置笔刷大小,右下方选择EditTrees,在弹出的窗口中选择AddTrees,选择合适的树木预制体,点击ADD后,回到场景中进行添加。在Settings设置中可以对笔刷大小、树的密度、树的高度等值进行设置,设置完成后,回到场景中,会看到鼠标经过的地方有一片圆形阴影,点击鼠标左键,即可完成树木的绘制。添加植被

完成绘制后,如需改变树木模型或者新增其他的树木模型,可以点击EditTrees的AddTree、EditTree和RemoveTree进行添加和修改、删除。选择AddTree,可以增加一些3D小花,美化场景,效果如图6.29所示。同样是上图,在视角放大以后,看不到刚刚刷的树木,这是unity为了优化性能而采取的手段,超过一定距离后植被就不显示或降低显示细节。可以在Terrain下设置有关参数。绘制细节

如果想给场景中添加一些草地或者花草,选择PaintDetails,和之前刷树木一样,需要先导入花草的模型,设置笔刷大小后,进行细节的描绘。但是和刷树木不同的是,树木全部3D对象,而草是2D的纹理贴图。地形参数设置TerrainSetting中是关于地形的基础设置,包括地形的分辨率、树木放置、风力、灯光烘焙的基础参数等。1.地形参数的修改新建一个地形,默认地形的分辨率为1000*1000,该参数可以在MeshResolution中进行修改。2.高度图的设置在Unity3D中编辑地形有两种方法:一种是通过地形编辑器编辑地形,另一种是通过导入一幅预先渲染好的灰度图来快速地为地形建模。地形上每个点的高度被表示为一个矩阵中的一列值。这个矩阵可以用一个被称为高度图(heightmap)的灰度图来表示。灰度图是一种使用二维图形来表示三维的高度变化的图片。近黑色的、较暗的颜色表示较低的点,接近白色的、较亮的颜色表示较高的点。通常可以用Photoshop或其他三维软件导出灰度图,灰度图的格式为RAW格式,Unity3D可以支持16位的灰度图。Unity提供了为地形导入、导出高度图的选项。单击Settingstool按钮,找到标记为ImportRAW和ExportRAW的按钮。这两个按钮允许从标准RAW格式中读出或者写入高度图,并且兼容大部分图片和地表编辑器。地形参数设置3.树木以及细节设置

Draw:是否绘制地形细节。如果取消这个选项,地形细节将全部都不显示,花草树木什么的都看不见啦。

DetailDistance:细节距离。当地形细节物体离镜头超过这个距离时,就不会被绘制在屏幕上。

DetailDensity:细节密度。默认为1,如果把这个值调小,过密的地形细节将会不被绘制。比如用地形画刷涂一坨的草,可能显示的就只有几根。

TreeDistance:树木距离。类似细节距离,超过这个距离的树木不会被绘制在屏幕上。

Billboard:公告板起点。公告板技术是3D游戏中用的非常多的一种技术,主要是用于控制场景中的Texture的方向,让他始终以一定的角度对着我们的镜头(一般是垂直于镜头)。如我们在3D游戏中看到的怪物的蓝、红和怪物名字、一些花草树木等,无论我们在哪个方向看它总是对着我们。

FadeLength:渐隐长度。

MaxMashTrees:最大树木网格数。地形参数设置4.风力设置

Speed:风速。亲自动手测试运行过游戏的同学肯定会发现,刷上去的草皮是会有随风波动的效果的,调节这个参数可以影响草摇动的速度。

Size:大小。

Bending:弯曲程度。其实就是草摆动的幅度。

GrassTint:草皮染色。这个功能挺有意思的,如果你观察过田野或者草原,一定会发现当清风吹拂的时候,植物会高低起伏,就好像海浪一样。并且摇曳的花草会在两种颜色中不断变换。修改这个参数,可以让草地的颜色随着摇摆而变化。自动寻路在很多游戏中,敌人经常要在复杂的地形中追着主角跑。这就需要敌人不仅要绕开这些障碍物,还得要找到目标点最近的路线。如果让我们自己手动实现这个算法是比较有挑战性的。Unity提供了一个非常实用的寻路功能,只需要较少的代码即可实现复杂的功能。在Unity中可以用来创建自动寻路功能的组件是NavMeshAgent,将该组件附加在游戏中一个可移动的对象上,可以使该对象通过使用NavMesh(即导航网格)在Scene中导航。

AgentType:Agent的类型,决定了Agent可以在哪些NavMeshes上移动,改变AgentType将重置Agent的当前路径。

BaseOffset:游戏对象的垂直相对位移。即agent的Y轴偏移,正值往下,负值往上。

Speed:寻路时的最大移动速度。

AngularSpeed:寻路时的最大转向速度(最大角速度)。值越大,agent的转向越迅速。

Acceleration:当agent寻路时的最大加速度。单纯物理意义上的加速度,控制速度变化的快慢。

StoppingDistance:制动距离。当agent与目标点的距离小于它时会自动停下来以免越过目标点。

AutoBraking:该属性设置为true时,agent会在到达StoppingDistance时直接停下。否则会出现当agent速度太快冲过目标点时,会缓慢的回到目标点的现象。

Radius:躲避半径。相当于agent的私人空间,在这个半径内其它障碍或agent无法穿过。

Height:高度。低于该值的障碍agent都无法穿过。

Quality:质量。一般设置成HighQuality。

Priority:优先级。低优先级的agent会给高优先级的agent让路。自动寻路的创建方法是首先给构建一个寻路的地形,并将地形以内的对象全部勾选静态,否则会影响地形的生成;其次选择【Window】-【AI】-【Navigation】,对地形进行烘焙,生成自动导航的地形网格;最后给移动的对象编写代码并运行即可。01预制体制作资源导入与导出项目编译游戏资源制作02……地形引擎03SUPPORTINGTEXTHERE04SUPPORTINGTEXTHERE绘制地形添加植被绘制细节地形参数设置自动寻路音效音效组件介绍音效参数详解使用音效组件粒子系统添加粒子系统粒子系统的应用05射击游戏开发.射击游戏场景设计第一人称设置预设子弹且连续发射添加音效添加爆炸特效目标对象销毁第六章地图系统—射击游戏目录CONTENTS音效组件介绍Unity在音效方面提供了一类Audio组件,用于设置声音源和声音效果,包括AudioListener音频监听器组件、AudioSource音频源组件等。1.AudioListener组件AudioListener是游戏中的声音接收器,一般相机会默认自带一个AudioListener组件,它可以接收游戏中的所有音乐和音效(只要其所附加的游戏物体在音效的影响范围内),此外,每一个Scene中仅有一个AudioListener。2.AudioSource组件AudioSourc组件主要用来播放游戏场景中的AudioClip,AudioClip就是导入到Unity中的声音文件。Unity可导入的音频文件格式有.aif,.wav,.mp3和.ogg。此外,AudioSource还可以设置一些播放声音的效果,增强游戏场景中的声音效果音效参数详解AudioSource组件是在音效类组件种使用频率较高的组件,因为该组件可以对声音的效果进行多种设置,可以通过添加组件的方式给对象添加AudioSource组件。该组件重要的参数含义:⚫AudioClip:音频片段。这里需要提前将音频素材导入到项目,这里直接选取即可。⚫Output:音源输出。设置为空时,即代表输出到AudioListener。⚫Mute:是否静音。即音源在继续播放,但是被静音。与关闭音源的区别时,当恢复时,播放的进度不同。⚫PlayOnAwake:启动播放开关。如果勾选的话,那么当GameObject加载并启用时,立刻播放音频,即相当于此音源GameObject的组件中Awake方法作用时开始播放。如果不勾选的话,需要手动调用Play()方法执行播放。⚫Loop:循环播放开关。当勾选时,如果音频播放结束,将从头开始再次循环播放。⚫Priority:播放优先级。决定了当前音源在当前场景存在的所有音源中的播放优先级。⚫3DSoundSettings:3D音频设置。该设置使用频率较高,特别是通过VolumeRolloff(声音衰减模式)的选择,可以设置声音在不同距离上的衰减速度。使用音效组件1.添加AudioSource组件的方式和添加其他组件方法一样,首先将音频文件导入到Unity资源文件夹,通过菜单【GameObject】—【CreateEmpty】,创建一个空对象;选中此对象,选择【Component】—【Audio】—【AudioSource】来添加音源脚本组件;在Inspector面板中,将导入的音频片段赋给音源组件;2.AudioSource组件的常用函数⚫Play():播放音频剪辑。⚫Stop():停止播放。⚫Pause():暂停播放。3.任务:运行场景自动播放背景音乐,点击Q键停止播放,点击R键重新开始播放。具体步骤如下:第一步,打开AutoRun场景,在场景中新建一个空对象GameObject,命名为Audio。第二步,将准备好的音频素材导入到Assets资源包中。第三步,选择Audio,在Inspector中通过添加组件的方式添加AudioSource组件。第四步,在AudioSource组件的第一个参数AudioClip设置为第二步导入的音频资源。第五步,新建A_Audio.cs。第六步,将A_Audio.cs赋给Audio。第七步,点击开始按钮,场景运行,背景音乐播放,当点击Q键,播放暂停,点击R键,重新开始播放。如果没有声音,看看是不是AudioListener组件被不小心删除了。01预制体制作资源导入与导出项目编译游戏资源制作02……地形引擎03SUPPORTINGTEXTHERE04SUPPORTINGTEXTHERE绘制地形添加植被绘制细节地形参数设置自动寻路音效音效组件介绍音效参数详解使用音效组件粒子系统添加粒子系统粒子系统的应用05射击游戏开发.射击游戏场景设计第一人称设置预设子弹且连续发射添加音效添加爆炸特效目标对象销毁第六章地图系统—射击游戏目录CONTENTS添加粒子系统

在玩游戏时,我们看到有些技能在发射出去时,会产生很绚丽的爆炸或者喷射效果,这就是粒子系统给我们带来的视觉上冲击。Unity有一个内置的ParticleSystem粒子系统可以实现这些功能,除了在视觉上创造美感以外,粒子系统也可以和C#脚本产生交互。Unity内置的粒子系统组件和组件添加的方式一样,可以直接挂载在预先制作好的GameObject身上,再通过选择该对象,点击右侧的Inspector面板的【AddComponent】—【Effects】—【ParticleSystem】添加组件。ParticleSystem组件比较复杂,所以Inspector被分为许多可折叠的子部分或组件,分别包含一组相关属性。此外,可以通过Inspector中的OpenEditor按钮,使用单独的Editor窗口,同时编辑一个或多个系统。添加粒子系统ParticleSystem组件的常用属性如下:⚫Duration:粒子播放的时长。以秒为单位,设置为10,粒子就会播放10秒。⚫looping:循环播放。⚫prewarm:预热粒子发射。勾选此选项必须先勾选looping选项,这样当粒子开始发射的时候,不是从数量0开始,而是像已经发射一个周期一样。⚫StartDelay:延迟多长时间开始发射粒子。⚫StartLifetime:粒子的生命周期。也就是每一个粒子的存活时间,比如说设置为100,就可以看到这个粒子100秒,它将在100秒后被销毁。⚫StartSpeed:开始速度。⚫3DStartSize:3D开始大小,具有X,Y,Z三种大小。⚫PlayOnAwake:是否在游戏一启动就播放。⚫MaxParticles:最大的粒子数量,粒子系统最多发射的粒子数量,超过就停止发射。⚫StopAction:结束动作。当粒子结束播放时,是如何操作Gameobject的,是disable还是Destroy,或什么都不做None。粒子系统的应用通过以上讲解,大家对粒子系统有了进一步的任务,下面通过一个实例来看看如何让通过脚本控制粒子效果。应用实例:场景运行时,运行粒子效果,点击N键暂停,点击M键继续运行粒子效果,点击K键放大粒子。具体步骤如下:第一步,打开AutoRun场景,在场景中再新建一个空对象GameObject,命名为Particle。第二步,选择Particle,在Inspector中通过添加组件的方式添加ParticleSystem组件。第三步,在ParticleSystem设置参数如图所示。第四步,新建A_Particle.cs。第五步,将A_Particle.cs赋Particle。第六步,点击开始按钮,场景运行,运行粒子效果,点击N键暂停,点击M键继续运行粒子效果,点击K键粒子放大。01预制体制作资源导入与导出项目编译游戏资源制作02……地形引擎03SUPPORTINGTEXTHERE04SUPPORTINGTEXTHERE绘制地形添加植被绘制细节地形参数设置自动寻路音效音效组件介绍音效参数详解使用音效组件粒子系统添加粒子系统粒子系统的应用05射击游戏开发.射击游戏场景设计第一人称设置预设子弹且连续发射添加音效添加爆炸特效目标对象销毁第六章地图系统—射击游戏目录CONTENTS射击游戏场景设计首先将资源包导入到根文件夹下,方便之后游戏制作时获得需要的素材。第一步,新建一个场景,命名为Shootgame,在Hierarchy面板中右击鼠标在3D选择栏中新建一个Terrain。在Inspector面板找到Terrain组件,点击画笔选择SetHeight增加地图厚度,选择RaiseorLowerTerrain制作高山和盆地(按住shift),选择SmoothHeight平滑高山和盆地的棱角。第二步,选择PaintTexture制作地图表面,点击EditTerrainLayer选择CreateLayer,选择一个合适的素材。在Size中设置数值使素材更加真实。射击游戏场景设计第三步,点击树木选择EditTrees,点击AddTeers选择树木和花朵的素材,在Settings中设置笔刷改变树木和花草的数量和密度,自行选择布置地图。第四步,在根文件中选择房子的模型,将模型拖入场景,选择适合的大小。第一人称设置第五步,设置第一人称视角,可以有多种制作方法:方法1:在StandardAssets中选择第一人称FPSController预制体拖入Hierarchy层次面板中,选择枪的模型,将该模型拖入场景,选择适合的大小。将枪挂在第一人称之下。方法2:将枪的模型拖入到场景中,并将MainCarema挂在枪下,作为一个子层级,按照之前的方式新建第一人称移动的代码,并将代码挂给枪,(为了让MainCarema顺利地放在FPSController下方,可以先在观察监视器面板FPSController的位置,将该位置值复制给MainCarema,再将MainCarema移动到FPSController下方)最终效果图如图所示。注意当把MainCarema挂在枪下时,一定要注意看看MainCarema的方向是否和枪口一致,同时检查一下当枪该自身坐标系是否符合点击WASD键分别向前、向左、向后、向右移动,否则当我们挂在好第一人称代码时,可以会出现运动方向和我们预测不一致的结果。当然,也可以通过更改代码WASD分别控制的坐标轴方向解决这个问题。预设子弹且连续发射第六步,右击枪,再枪的下一层级新建一个空物体命名为null,将null移动到枪口。新建一个球体(不是枪的子层次,与枪同级),命名为Bullet,将球体移动到枪口位置,并给Bullet添加刚体Rigidbody组件,因为后期代码中将通过调用刚体组件发射子弹。这里要特别注意子弹的自身坐标系,要和空物体保持一致,否则发射的方向会发生错误。第七步,将球体从Hierarchy层次面板中拖到Assets下,此时已经生成一个预制体。将Hierarchy层次面板中的球体删除。第八步,在场景中放置一些对象作为敌人Enemy(可以从UnityAssetStore中下载,大家注意下载的模型一定要检查一下是否有碰撞体,因为后面我们将通过碰撞检测事件来激发动作,同时要修改碰撞范围,以免子弹撞击范围太小,没有交互效果。素材包已提供了一些模型可用,这一步也可以简单一些直接用Unity自带的Cube作为射击目标)。第九步,在物体的位置设置粒子效果(可以在StandardAssets中找到现成的粒子效果,也可以自己制作)。设置好后隐藏掉粒子效果,原因是游戏运行时是看不到特效的,当射击到对象时,特效显示。注意粒子效果和Enemy是同一层级的,不能成为Enemy的子级。添加音效第十步,给空物体null添加AudioSource组件,此时不需要将音频拖入AudioClip,因为会在代码中指定当射击时发出声音。新建Copy.cs,代码附在空物体null上。该代码是用生成预制体的方式不断生成子弹,记得要给变量赋值。添加爆炸特效第十一步,子弹打在“敌人身上”,敌人消失,粒子出现。新建Enemy_Disappear.cs,代码附在物体Enemy上。这里通过标签找对对象,所以要给子弹的预制体添加一个“zidan”的标签。这里的粒子效果不能设置为循坏,否则爆炸后粒子特效一直不会消失,不符合常理。目标对象销毁第十二步,实现子弹碰到物体后子弹消失。新建Shoot.cs,代码附在子弹上。将代码赋给预制体子弹上,同时给被射击的对象添加一个enemy的标签。至此,一个简单的射击游戏就完成了,大家还可以给设计游戏设计更多的关卡提高难度,下面就看你的了!Metaverse本章小结TheFutureIsHere.AreYouready?本章以射击游戏为例,围绕地形引擎、音效组件、粒子系统,描述了如何用Unity3D创建一款属于自己的3D游戏。在绘制地形时,既可以在Unity中直接设计,也可以将外部的高度图直接导入场景中。音效可以烘托游戏的氛围,提高沉浸感。粒子系统则能够给人耳目一新的感觉和强烈的视觉震撼效果。虚拟现实技术与应用第七章图形用户界面—一套完整的UI系统框架Metaverse01UUGUI系统介绍02……

常用的UGUI系统对象03SUPPORTINGTEXTHERESUPPORTINGTEXTHERE

Canvas控件Image控件Panel控件Text控件Button控件InputField控件Tollge控件UGUI综合实例登陆模块menu模块考试须知模块测试题模块.第七章图形用户界面—一套完整的UI系统框架目录CONTENTSUGUI系统介绍

该案例在选用Unity2019.3.5版本,GUI指的是图形用户界面。Unity3D中的图形系统分为OnGUI、NGUI、UGUI等,这些类型的图形系统内容十分丰富,包含游戏中通常使用到的按钮、图片、文本等控件。OnGUI系统是Unity最早期采用的系统,是通过代码驱动的GUI系统,每个控件都是通过代码创建,后期OnGUI系统进展到了NGUI系统,NGUI是严格遵循KISS原则并用C#编写的Unity(适用于专业版和免费版)插件。在Unity4.6以后Unity官方推出了新的UGUI系统,采用全新的独立坐标系,是U3D提供的一套快速且高效的创建UI系统的框架。01UUGUI系统介绍02……

常用的UGUI系统对象03SUPPORTINGTEXTHERESUPPORTINGTEXTHERE

Canvas控件Image控件Panel控件Text控件Button控件InputField控件Tollge控件UGUI综合实例登陆模块menu模块考试须知模块测试题模块.第七章图形用户界面—一套完整的UI系统框架目录CONTENTSCanvas控件

Canvas控件又称“画布”,类似于我们日常使用的白纸,所有的控件必须在Canvas下才可以绘制出来,一个场景中可以有多个Canvas,通过设置Canvas的顺序,得到不同的渲染效果。1.基本属性1.Canvas属性Canvas下一般有四个组件,第一个是RectTransform组件,灰色为当前不可用,在Canvas下新建控件后,每个控件可以在RectTransform下调整位置等信息;Canvas是画布的主要参数,包括渲染模式、画布的绘制顺序等;CanvasScaler组件用于设置处于不同组件下Canvas画布中的元素的缩放模式,常用于UI的适配中;GraphicRaycaster组件用于射线的检测。(1)RenderMode属性设置的画布的渲染模式,其中有三种渲染模式。1)ScreenSpace-Overlay模式:直接在屏幕上渲染显示画布的内容,即使没有摄像机或者画布不在摄像机范围类,对应的UI一定会绘制到屏幕上。在这种模式下内部是集成了一个摄像机,但无法操控这个摄像机。此Canvas下的元素一定绘制在屏幕的最上面(相比ScreenSpace-Camera和WorldSpace),不会被其他模式的Cava或2D/3D物体遮挡。这种模式下的Canvas排序按Canvas组件的SortOrder排序,数值越大,越在上层。如果屏幕调整了大小或者改变了分辨率,此Canvas会自动调整大小。该模式下主要参数如下:

PiexelPerfect:使UI元素像素对应,边缘更加清晰。

SortOrder:渲染顺序,如果设有多个Canvas,会出现遮挡的情况,此时可通过SortOrder对其进行排序,越大越靠近屏幕。

TargetDisplay:目标显示器,指定最终渲染到的显示器,也就是分屏,常用于多屏开发显示。比如有两个屏幕,一个大的显示屏挂在墙上作为展示屏,另一个小屏幕可以作为输入屏幕拿在手中进行控制。

AdditionalShaderChannes:附加着色通道,决定Shader可以读取哪些相关数据。Canvas控件2)ScreenSpace–Camera模式:在这种模式下,是将画布放置在距离摄像机一定距离的视野中,画布的内容都是通过摄像机来绘制,此时的画布会跟随着摄像机的移动而移动。当摄像机被禁用时画布也不会显示出来。该模式下主要参数如下:

RenderCarema:对应的渲染相机,也就是该Canvas显示在哪个Camera前面,不同的Camera渲染顺序可能不同。例如小地图的设置,可以在这里选择渲染小地图的摄像机。

PlaneDistance:设置摄像机距离画布的距离。

SortingLayer:渲染层级,影响渲染顺序。

OrderinLayer:同一渲染层级下的渲染顺序。3)WorldSpace模式:这种模式下画布会被当做世界空间中的一个模型来处理,它不会跟随摄像机的移动,超出摄像机视野则不会再被显示出来,这种模式下可以手动的设置画布的位置以及画布大小,画布不会再自动适配,常用于制作血量条等。Canvas控件(2)CanvasScaler组件:CanvasScaler也是屏幕适配的主要方式,一般通过该组件就可以完成适配,如果有需求,还可以通过Screen.height和Screen.width获取屏幕长宽,然后代码控制UI位置及缩放。UIScaleMode有三种缩放模式:1)ConstantPixelSize模式:固定像素大小,不论屏幕分辨率尺寸大小如何变化,像素保持原有大小不变。

ReferencePixelPerUnit:Unity的1个单位代表多少个像素。2)ScaleWithScreenSize模式:屏幕自适应常用方式

ReferenceResolution:参考分辨率,进行屏幕适配,自动缩放UI大小时,将以此作为参考。3)ConstantPhysicalSize模式:固定物理尺寸,这个模式很少用到。(3)GraphicRaycaster组件:关于UI射线检测的设置。

IgnoreReversedGraphics:是否忽略反转图片的检测。

BlockingObjects:在Canvas前面,可以遮挡射线检测的物体。

BlockingMask:遮挡射线检测的层级。Image控件

Image控件是用来放置图片的控件,除了两个公共的组件RectTransform与CanvasRenderer外,默认的情况下就只有一个Image组件。SourceImage:用于设置面板的背景,要显示的源图像,要想把一个图片赋给Image,需要把图片转换成Sprite(精灵)格式,转化后的精灵图片就可拖放到Image的SourceImage中了。这里的必须选用纹理格式为Sprite(2DandUI)的图片资源。Color:用于设置颜色和透明度。Material:材质,图片叠加的材质。RaycastTarget:射线投射目标,是否作为射线投射目标,关闭之后忽略UGUI的射线检测。另外,和Image控件类似的一个控件是RawImage控件,该控件可以显示任何纹理,而Image只能显示一个Sprite精灵。Panel控件

Panel控件又叫面板,实际上就是一个容器,可以容纳其他的控件。拖动该控件的4个角或者4条边可以放大缩小控件,如图7.13所示。一个Canvas可以有多个Panel控件,每个Panel控件容纳多个其他类型控件,当移动Panel控件时,其他控件也会跟随移动,这样就可以更快速便捷地进行UI布局。Panel控件自带Image组件,可用于设置面板控件的背景,除了Image控件具备的属性外,多了一个ImageType属性,是用来选择图片显示的类型。分为Simple(基本的):图片整张全显示,不裁切,不叠加,根据边框大小会有拉伸;Sliced(切片的):图片切片显示;Tiled(平铺的);FillCenter(填充中心)。Text控件

Text控件也称为标签,Text区域用于输入将显示的文本。它可以设置字体、样式、字号等内容,UGUI中创建的很多UI控件都有一个支持文本编辑的Text控件,如图7.14所示。Font:设置字体,Windows下unity自带字体为Arial,该字体是英文字体,并不包含中文字体,因此如果在应用或者游戏中使用Arial字体,在某些机型上可能显示不全,为此我们需要下载一个外部.ttf格式的字体到Unity内。Font:设置字体,Windows下unity自带字体为Arial,该字体是英文字体,并不包含中文字体,因此如果在应用或者游戏中使用Arial字体,在某些机型上可能显示不全,为此我们需要下载一个外部.ttf格式的字体到Unity内。

FontStyle:设置字体样式。

FontSize :设置字体大小。

LineSpacing:设置行间距(多行)。

RichText:设置富文本。

Alignment:设置文本在Text框中的水平以及垂直方向上的对齐方式。

HorizontalOverflow:设置水平方向上溢出时的处理方式。分两种:Wrap(隐藏);Overflow(溢出)。

VerticalOverflow:设置垂直方向上溢出时的处理方式。分两种:Truncate(截断);Overflow(溢出)。

BestFit:设置当文字多时自动缩小以适应文本框的大小。

Color:设置字体颜色。。Button控件

Button控件即按钮,是应用中最常使用的控件之一,用户通过Button控件的点击来触发相应的事件,完成与虚拟环境的交互。Button是一个复合控件,该控件下会自动生成一个Text子控件,通过此子控件可设置Button上显示的文字的内容、字体、文字样式、文字大小、颜色等。Button控件下挂有一个Image组件和Button组件,Image组件主要用于设置Button的外观,例如按钮的背景图片、颜色等;Button组件用于设置按钮的常用属性。

Interactable:是否启用交互,如果把其后的对钩去掉,此Button在运行时将不可单击,即失去了交互性。

Transition:过渡方式,分为四种:①None:没有过渡方式;②ColorTint:通过颜色改变过渡;③SpriteSwap:通过Sprite精灵改变实验过渡,需要使用相同功能、不同状态的贴图;④Animation:通过动画过渡。其中,ColorTint是最常用也是最常见的过渡方式。主要参数如下所示:

TargetGraphic:设置目标图像。

NormalColor:设置运行时颜色

HighlightedColor:设置高亮色。

PressedColor:设置单击时颜色。

DisabledColor:设置禁用时颜色。

ColorMultiplier:设置颜色倍数。

FadeDuration:设置变化持续的时间。Button是UI中使用频率最高的组件,用户常常通过Button控件来确定其选择行为,当用户单击Button控件时,Button控件会显示按下的效果,并触发与该控件关联的游戏功能。如点击按钮,Text文本的内容变化;点击按钮,Image图片更换等等。Button控件具体步骤如下:第一步,新建一个场景,选择2D模式,在Hierarchy层次面板中新建一个Button(此时会自动生成一个画布),调整Button的大小,使Button处于Canvas的正下方。第二步,选择Button控件,在子层级Text中修改属性Text的值是“确定”,适当修改文本大小。第三步,在Canvas下添加一个Text控件,修改该控件的Text内容为“欢迎使用”,适当修改文字大小。第四步,新建A_ButClick.cs。第五步,A_ButClick.cs挂载在Canvas上,并把对象Text赋予变量Text1。第六步,选择Button控件,在右侧的Inspector面板中找到Button组件,点击OnClick()右下方的“+”号,这里是设定Button的代码挂载的对象和对应的方法。上一步代码挂给了Canvas,因此这里选择Canvas,方法选择A_ButClick下的Queding。第七步,运行程序,点击按钮后,Text文本从“欢迎使用”变成了“再见”。InputField控件

InputField控件是一个复合控件,包含Placeholder与Text两个子控件。

Interactable:设置是否启用InputField组件。勾选表示输入字段可以交互,否则表示不可以交互。

Transition:设置当正常显示、突出显示、按下或禁用时输入字段的转换效果。Transition下的参数可参考上一个Button控件。

Navigation:设置导航功能。

TextComponent:设置此输入域的文本显示组件,用于显示用户输人的文本框。

Text:设置此输入域的初始值。

CharacterLimit:设置此输入域最大的输入字符数,0为不限制输入字符数。

ContentType:此输入域的内容类型,包括数字、密码等,常用的类型如下:①Standard:允许输人任何字符,只要是当前字体支持的即可;②Autocorrected:自动校正输入的未知单词,并建议更合适的替换候选对象,除非用户明确地覆盖该操作,否则将自动替换输入的文本;③IntegerNumber:只允许输入整数;④DecimalNumber:允许输入整数或小数;⑤Alphanumeric:允许输入数字和字母;⑥Name:允许输入英文及其他文字,当输人英文时能自动提示姓名拼写;⑦EmailAddress:允许输入一个由最多一个@符号组成的字母数字字符串;⑧Password:输入的字符被隐藏,只显7K星号;⑨Pin:只允许输入整数。输入的字符被隐藏,只显示星号;⑩Custom:允许用户自定义行类型、输入类型、键盘类型和字符验证。

LineType:设置当输入的内容超过输入域边界时的换行方式,包括三种,①SingleLine:超过边界也不换行,继续向右延伸此行,即输入域中的内容只有一行;②MuhiLineSubmit:允许文本换行。只在需要时才换行;③MultiLineNewline:允许文本换行。用户可以按回车键来换行。

Placeholder:设置此输入域的输入位控制符,对于任何带有Text组件的物体均可设置此项。Tollge控件

Toggle控件也是一个复合性的控件,包含一个Background和一个Label控件。Background是一个图像控件,而其子控件Checkmark也是一个图像控件,其Label控件是一个文本框,通过改变它们所拥有的属性值,即可改变Toggle的外观,如颜色、字体等。⚫IsOn:设置复选框默认是开还是关。⚫ToggleTransition:设置渐变效果。⚫Graphic:用于切换背景,更改为一个更合适的图像。⚫Group:设置多选组。在开发中发现,一个画布下可以放置多个Toggle控件,运行时,这几个Toggle控件可以同时被勾选,这种情况多选题可以,如果只能有一个选项就可以使用ToggleGroup组件来控制,ToggleGroup组件就是对同一组复选框进行约束,使每次只能打开一个复选框。01UUGUI系统介绍02……

常用的UGUI系统对象03SUPPORTINGTEXTHERESUPPORTINGTEXTHERE

Canvas控件Image控件Panel控件Text控件Button控件InputField控件Tollge控件UGUI综合实例

登陆模块menu模块考试须知模块测试题模块.第七章图形用户界面—一套完整的UI系统框架目录CONTENTSUGUI综合实例这是一个基于Unity3D实现的简易考题系统,该系统有一个登陆页面,用户名是admin,密码也是admin。当用户输入错误,系统提出重新输入,输入正确后跳转到menu页面,menu页面的功能是用来选择希望跳转的场景,点击场景名,可进入对应的场景。场景1中是考试须知,该场景中有一个滚动文本框,用来显示考试须知的内容;场景2是与Unity相关的选择题,回答错误会跳到回答错误页面,回答正确会给出提示。流程图如下所示:

登录模块

1.登录页面第一步,新建项目,将场景改成2by3方便制作用户界面。在Scene面板中选择2D模式,在Game面板中选择合适的分辨率。将素材图片复制到Textures中,在Project面板中点击图片,更改类型为Sprite,点击Apply添加成功。第二步,在Hierarchy面板中右击鼠标在UI选择栏中新建一个Canvas。第三步,右击Canvas新建一个Panel,将Panel命名为main-Panel,右击main-Panel新建一个Image,在SourceImage选择框中选择背景图片素材。

登录模块第四步,右击main-Panel新建一个Text,将Text命名为Text-username,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“Username:”。第五步,右击main-Panel新建一个Text,将Text命名为Text-Password,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“Password:”。第六步,右击main-Panel新建一个InputField,将InputField命名为InputField-username,将输入框移动到合适的位置,设置输入框和框内字体大小,展开InputField在Placeholder中输入文本“输入用户名”。第七步,复制InputField-username,更名为InputField-Password并移动到合适的位置,更改Placeholder中的文本为“输入密码”,第八步,右击main-Panel新建一个Button。将Button命名为Button-Enter,将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“Enter”。可以自行设置button的颜色,

登录模块2.登录错误页面第九步,隐藏main-Panel,右击Canvas新建一个Panel,将Panel命名为Panel-Wrong,右击Panel-Wrong新建一个Image,自行设置背景图片。第十步,右击Panel-Wrong新建一个Text,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“输入不正确,请重新输入!”。第十一步,右击Panel-Wrong新建一个Button。将Button命名为Button-Wrong,将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“确定”。3.用户信息验证第十二步,新增一个脚本“Main.cs”,输入判断用户信息的代码。第十三步,将Main.cs挂给Cavas,点击登陆页面的Button,将Denglu()的方法给Button的Onclick事件。第十四步,设置登陆错误页面到登陆页面的返回功能。menu模块1.考试场景选择页面第十五步,隐藏Panel-Wrong,右击Canvas新建一个Panel,将Panel命名为Panel-menu,右击Panel-menu新建一个Image,自行设置背景图片。第十六步,右击Panel-menu新建一个Text,将Text命名为Biaoti,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“这里将显示所选择的场景名”。第十七步,右击Panel-menu新建一个Text-menu,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“点击此处进入相应场景”。(选择哪个场景,点击这里就可以进入对应场景)第十八步,右击Panel-menu新建一个Button。将Button命名为Button-ksxz,将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“考试须知”。第十九步,右击Panel-menu新建一个Button。将Button命名为Button-ceshiti,将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“测试题”。menu模块2.menu模块的交互功能第二十步,在Main.cs中新增如下代码;publicGameObjectksxz;publicGameObjectceshiti;以上两句是定义“考试须知页面”和“测试页面”这两个跳转对象;第二十一步,点击Button-ksxz,可以在Text-menu显示“考试须知”,在Main.cs中新增如下代码:publicTextbiaoti;publicvoidKsxz()//第一幕标题改变的代码

{

biaoti.text="考试须知";}在menu页面选择Button-ksxz,添加OnClick(),拖入Canvas,选择上面新建的方法。实现点击考试须知按钮,标题变成考试须知。第二十二步,点击Button-ceshiti,可以在Text-menu显示“考试题”。考试须知模块1.考试须知页面第二十三步,隐藏Panel-menu,右击Canvas新建一个Panel,将Panel命名为Panel-ksxz,右击Panel-ksxz新建一个Image,自行设置背景图片。第二十四步,右击Image新建一个Text,自行编辑一段考试须知文字(尽量多到当前的Text文本框承载不下),使文本框覆盖Image;在Image控件右侧点击“AddComponent”,添加一个Mask组件,多出的文字消失了。第二十五步,在Image控件右侧点击“AddComponent”,添加一个ScrollRect组件,将Text拖至Content选择框中。第二十六步,右击Image控件,新建一个子控件Scrollbar。刚刚建好的Scrollbar在画面上一般是横向的,而且比较小,我们可以调整其方向和大小。选择Scrollbar,在右侧检视面板,找到Direction的设置,选择垂直的“BottomToTop”,再将Scrollbar放置在右侧合适的位置。第二十七步,点击Image,在右侧检视面板,找到之前新增的ScrollRect,将Scrollbar拖到VerticalScrollbar中,进度条会自动和文本匹配。拖拽Scrollbar,可以显示被遮罩隐藏的文本。第二十八步,右击Panel-ksxz新建一个Button。将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“返回”。我们可以在该页面顶端加一个标题,写上“测试须知”。考试须知模块1.2考试须知模块交互第二十九步,返回按钮的功能(返回到menu)。在Main.cs中新增如下代码:publicvoidKsxzfanhui()//第二幕的返回代码

{

ksxz.SetActive(false);menu_panel.SetActive(true);}选择返回按钮,添加OnClick(),拖入Canvas,选择返回Panel-menu的方法。第三十步,在menu页面设置跳转场景文本Text-menu,添加Button组件,是该文本成为一个可交互的按钮,在main.cs中添加跳转到任意场景的代码。测试题模块1.测试题页面第三十一步,隐藏Panel-ksxz,右击Canvas新建一个Panel,将Panel命名为Panel-ceshiti,右击Panel-ceshiti新建一个Image,自行设置背景图片。第三十二步,右击Panel-ceshiti新建一个Text,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“测试题”。第三十三步,右击Panel-ceshiti新建一个Text(1),将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“Unity3D支持下类哪种编程语言?”。第三十四步,右击Panel-ceshiti新建一个Toggle,将复选框移动到合适的位置。一个Toggle包含Background和Label两个控件,选择Label控件,在右侧检视面板,设置text文本为“C语言”,可以调节该文本的大小和字体。第三十五步,复制三个Toggle,将复选框移动到合适的位置,更改文本为“python”、“C#”、“C++”。第三十六步,右击Panel-ceshiti新建一个子控件Button。将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“确定”。第三十七步,如果是单选题,也就是每次只能选中一个复选框,就需要在Panel上添加一个ToggleGroup组件。选择Panel-ceshiti,在右侧监视面板,选择AddComponent,输入ToggleGroup并添加。第三十八步,为每个Toggle设置Group的来源。以Toggle1为例,选择Toggle1,在右侧监视面板,设置Group为Panel-ceshiti(ToggleGroup),如图7.57所示。这样就可以设置为单选了。Toggle2-Toggle4以同样的方法设置。测试题模块2.恭喜过关页面第三十九步,隐藏Panel-ceshiti,右击Canvas新建一个Panel,将Panel命名为answer-right,右击answer-right新建一个Text,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“恭喜过关”。右击answer-right新建一个Button。将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“返回”。3.回答错误页面第四十步,隐藏Panel-ceshiti,右击Canvas新建一个Panel,将Panel命名为answer-wrong,右击answer-wrong新建一个Text,将文本框移动到合适的位置,设置文本框和框内字体大小,输入文本“回答错误”。右击answer-Wrong新建一个Button。将按钮移动到合适的位置,设置按钮和按钮内字体大小,输入文本“确定”。4.代码实现单选题判断功能判断选择题是否回答正确,因为答案分别用了四个复选框,之前我们已经在Panel-ceshiti上添加ToggleGroup组件,将四个Toggle的Group选为ToggleGroup,实现四个复选框一次只能选一个答案。第四十一步,设置判断答案是否正确,正确的答案应该是Toggle3设置的C#,因此在Main.cs中添加代码。publicvoidAnswerRight()//第一幕回答正确转场的代码

{if(Toggle3.isOn==true){ceshiti.SetActive(false);right_panel.SetActive(true);}else{ceshiti.SetActive(false);wrong2_panel.SetActive(true);}}在代码之前要先定义Toggle对象,定义语句是“publicToggleToggle3;”,并将对应的Toggle组件拖到对应的选框中。选择提交按钮,将AnswerRight()赋给该按钮的OnClick()事件。测试题模块第四十二步,设置恭喜过关页面的返回功能,返回到menu页面。publicvoidRightfanhui()//回答正确页面的返回代码

{right_panel.SetActive(false);menu_panel.SetActive(true);}第四十三步,设置错误页面的返回功能,返回到ceshiye页面。publicvoidWrongfanhui()//回答错误页面的返回代码

{wrong2_panel.SetActive(false);ceshiye.SetActive(true);}第四十四步,将除了main-Panel的界面都隐藏,运行游戏检查跳转。Metaverse本章小结TheFutureIsHere.AreYouready?Unity的图形用户界面是一个可视化的UGUI系统,通过常用控件,如Canvas、Panel、Image等的介绍,大家基本能掌握如何创建一个游戏或虚拟现实应用的UI界面,但大家要特别注意的是UI设计重点不在这些控件的使用,而是界面形式的美感、风格以及逻辑和效率,最终要用户既得到视觉上的舒适感,也有了使用上的便捷性。虚拟现实技术与应用第八章综合实例—传统家具制作虚拟仿真实验Metaverse01需求分析项目功能介绍系统功能与需求分析02……

虚拟仿真实验开发03SUPPORTINGTEXTHERESUPPORTINGTEXTHERE

工作室场景搭建工作室场景漫游登陆注册功能.榫卯拼接模块工具学习模块协程协程的相关概念协程的实现.第八章综合实例—传统家具制作虚拟仿真实验目录CONTENTS系统功能与需求分析近些年随着计算机技术的发展,网络给人们的生活带来了巨大的改变,尤其是现在一些网络平台给人们带来许多便捷,得到了人们的肯定。在线教育平台的推出更是受到了很多人的关注以及欢迎。当今社会对高校毕业生的实践能力要求越发高,各种现代信息技术和优质实验资源是增强学生实践能力的重要手段。而传统的实验教学一方面存在时间、空间以及实验台套数的限制,另一方面还存在实验原理、实验周期过程等限制。虛拟仿真实验是虚拟现实技术与学科专业深度融合的产物,为学生提供具有良好沉浸感和获得感的虛拟仿真实验环境,激发学生学习兴趣,促进学生多学科、多专业知识点融会贯通的能力,需求分析本项目是要设计开发一个传统家具制作虚拟仿真实验,为了使大家更好地理解系统功能,先简单介绍一下传统家具地制作过程。传统家具制作一般会用到大量的工具,包括凿子、刨子、铲子、墨斗等,另外中国传统家具制作中有一项很重要的工艺叫做“榫卯拼接”。榫卯是木结构的建筑和家具用来连接各个模块的接头部分,其中,“榫”又叫榫头,指木质接头中突出的部分,

温馨提示

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

评论

0/150

提交评论