Chapter 5 第5章 3D 游戏场 景 在3D 游戏世界中,可以将很多丰富多彩的游戏元素融合在一起,构建出完整的3D 场 景。比如起伏的地形、郁郁葱葱的树木、蔚蓝的天空、漂浮在天空中的朵朵祥云、凶恶的猛兽 等。这些绚丽的3D 游戏场景让玩家置身游戏世界,忘记现实,给人以沉浸感。本章主要讲 解在3D 游戏场景中创建场景地形的方法、创建光源阴影的方法、添加角色控制的方法、添 加环境效果的方法、添加影音效果的方法、系统资源管理的方法以及资源商店等内容,并将 游戏元素整合起来,设计开发3D 游戏场景综合项目。 5.1 游戏场景概述 不可否认,一款游戏的可玩性是衡量其成功与否的最主要标准,这一点从《魔兽世界》的 成功就可以看出。玩家对一款游戏的第一印象是非常重要的,它决定着玩家是否继续玩下 去,这时才能展现出游戏性,所以游戏场景设计的好坏也是评价一款游戏成败的标准。 Unity引擎提供了3D 基础模型创建功能,但游戏中的大多数人物和建筑模型都是在 3dsMax、Maya等专业3D 模型制作软件中完成后再导入Unity中整合。在创建场景地形 方面,Unity引擎功能相当强大,图5.ity引擎开发的《游戏场景。 1就是基于Un仙剑奇侠传》 1《 图5.仙剑奇侠传》游戏场景 122 5.2 创建场景地形 Unity引擎有一套功能强大的地形编辑器,支持以笔刷方式精细地雕刻出山脉、峡谷、 平原、盆地等地形,可以让开发者实现游戏中任何复杂的游戏地形。 5.1 使用高度图创建地形 2. 高度图是通过导入一幅预先渲染好的灰度图来快速建模地形。地形上每个点的高度被 表示为一个矩阵列中的值。灰度图是一种使用2D图形来表示3D图形的高度变化的图片。 近黑色的、较暗的颜色表示较低的高度;近白色的、较亮的颜色表示较高的高度。通常可以 用Photoshop导出灰度图,格式应为RAW格式,Unity引擎可以支持16位的灰度图。 Unity引擎提供了地形导入、导出高度图的选项。单击Setingstool工具,找到标记为 ImportRAW和ExportRAW的按钮。其中ImportRAW按钮允许从标准的RAW格式 中读取或写入高度图,并且兼容大部分图片和地表编辑器。 1.创建地形 选择菜单栏中的GameObject→3DObject→Terain命令,窗口内会自动产生一个平 面,它是地形系统默认使用的基本原型。在Hierarchy视图中选择主摄像机,可以在Scene 视图中观察到游戏地形。如果想调节地形的显示区域,可以调整摄像机或地形的位置与角 度,使摄像机位于平面上的合适位置,2所示。 效果如图5. 图5.n效果图 2 Terai 2.调整地形参数 创建完地形后,Unity引擎会默认地形的大小、 宽度、厚度、图像分辨率、纹理分辨率等数值,这些数 值是可以修改的。在Hierarchy视图中选择创建的地 形,在其Inspector视图中找到MeshResolution属性, 如图5. 3所示。该属性视图的参数与选项设置功能 如表5.图5.3 MeshResolution属性 1所示。 123 表5.n属性参数 1 MeshResolutio 英文名称中文名称功能详解 TerainWidth 地形宽度全局地形总宽度 TerainLength 地形长度全局地形总长度 TerainHeight 地形高度全局地形允许的最大高度 DetailResolution 细节分辨率全局地形所生成的细节贴图的分辨率 DetailResolutionPerPatch 子地形模块细节分辨率每个子地形块的网格细节分辨率 3.导入高度图 第1步:在Hierarchy视图中选中Terain对象,单击其Insector属性中的Setinsp4所示。 g tool工具,找到TextureResolutions后,单击ImportRaw按钮添加地形,如图5. 图5. 4 导入地形高度图 第2步:设置地形参数,如图5.具体参数含义如表5. 5所示,2所示。 图5. 5 设置地形参数 表5.高度图地形属性参数 2 英文名称中文名称功能详解 Depth 深度根据文件格式来设置,可以是8位或16位 Resolution 分辨率定义地形分辨率大小 124 续表 英文名称中文名称功能详解 ByteOrder 字节顺序根据文件格式来设置,可以是Mac或是Windows FlipVerticaly 垂直翻转确定Unity是否沿 X 轴垂直翻转导出的高度贴图 TerainSize 地形大小Unity导入的高度图应用到的地形的大小 第3步:设置好后,在Se视图中即可观察到基于高度图创建出的地形效果,如图5. cen6 所示。 图5. 6 使用高度图创建地形的效果 5.2 使用地形编辑器创建地形 2. 在Unity引擎中,除了使用高度图来创建地形外,还可以使用笔刷绘制地形。选择菜单 栏中的GameObject→3DObject→Terain命令,可以为场景创建一个地形对象。初始的地 表只有一个巨大的平面,但在Unity引擎中,可以使用地形编辑器来轻松添加地形及植被。 地形编辑工具一共有CreateNeighborTerains、Paint Terain、PaintTres 、PaintDetails、TerainSetings5个,如 图5.每个工具都可以激活一个不同的子菜单。图5.7 地形编辑工具 7所示, 1.CreateNeighborTerains工具 CreateNeighborTerains工具用于快速扩展现有地形,可以沿着空白边界快速添加匹 配的地形平铺,如图5. 8所示。 2.PaintTerain工具 PaintTerain工具允许修改地形。它可以使用光标来雕刻地形的高度,或以贴图方式 将纹理绘制到地形上。光标采用的画笔形状,可以从几个内置形状中选择,也可以使用自定 义纹理。在Inspector视图中,还可以更改画笔的大小和不透明度(应用效果的强度)。然后 单击或拖动地形,以创建不同的形状和纹理。 125 图5.reateNeighborTerains工具的效果 8 使用C (1)RaiseorLowerTerain———快捷键F1 。 如图5. 使用这个工具时,高度将随着光标在地形上扫过而升高,9所示。如果在一处固 定光标,高度将逐渐增加,类似图像编辑器中的喷雾器工具。如果按下Shift键,高度将会 降低。不同的刷子可以创建不同的效果。使用笔刷大小(BrushSize)滑块可以控制工具的 大小,使用不透明度(Opacity) 其属性如图5. 滑块决定笔刷应用于地形时的强度, 10所示。 图5.aiseorLowerTerain工具的效果 9 使用R 图5.n工具属性 10 RaiseorLowerTerai 126 (2)PaintHoles———快捷键F8 。 PaintHoles工具可以隐藏部分地形,用于在地形上为洞穴和悬崖等地形结构绘制洞 口,如图5.BrushSize)滑块控制工具的大小,使用不透明度 11所示。使用笔刷大小( 12所示。(Opacity)滑块决定将笔刷应用于地形时的强度,其属性如图5. 图5.aintHoles工具的效果 11 使用P 图5.s工具属性 12PaintHole (3)PaintTexture———快捷键F4 。 PaintTexture工具可以在地形的表面添加纹理图片,创造着色和良好的细节。由于地 形是巨大的对象,实践中的标准做法是使用一个无空隙的重复的纹理,成片地覆盖表面。可 以绘制不同的纹理区域来模拟不同的地面,如草地、其属性如图5. 沙漠和雪地, 13所示。 单击EditTerainLayers按钮,并在其下拉菜单中选择CreateLayer命令,在弹出的窗 口中添加纹理图片,如图5.第一个添加的纹理将作为背景而覆 盖地形,如图5.14所示。添加纹理图片后, 可以继续选择CreateLaye并 15所示。如果想添加更多的纹理图片,r命令, 使用刷子工具,通过设定刷子的尺寸、不透明度以及目标强度(TargetStrength)实现不同纹 理的贴图效果,如图5. gh16所示。 (4)SetHeit———快捷键F2 。 SetHeight工具可以手动设置高度。它简单地拉平整个地形到选定的高度,会降低当 127 图5.13 纹理贴图属性图5.n纹理贴图 14 Terai 图5. 15 纹理贴图覆盖效果 图5. 16 不同纹理贴图效果 128 前高于目标高度的地形区域,并升高低于该高度的区域,这对于在场景中创建高原以及添加 平台和台阶) 如图5.etHeigh 人工元素(如道路、都很方便, 17所示。St下有两个按钮,一个 是FlatenTile,另一个是FlatenAl, 18所示。它们的区别是:FlatenTile 其属性如图5. 是将地平面抬高到指定高度,FlatenAl 是将整个地形抬高。 图5.etHeight工具的效果 17 使用S 图5.t工具属性 18SetHeigh (5)SmoothHeight———快捷键F3 。 SmoothHeight工具并不会明显地抬升或降低地形高度,但会平均化附近的区域。这 缓和了地表起伏,避免了陡峭变化的出现,类似于图片处理中的模糊工具。例如,如果已经 在可用集合中使用了一个噪声较大的刷子绘制了细节,则会在地表塑造尖锐、粗糙的地形, 接下来就可以使用SmoothHeight工具来缓和。使用时可以使用笔刷大小(BrushSize)滑 块控制工具的大小,使用不透明度(Opacity)滑块控制笔刷应用于地形时的强度。使用前后 的效果如图5.20所示, 21所示。 19和图5.其属性如图5. 129 图5.othHeight工具平滑前的效果 19 使用Smo 图5.othHeight工具平滑后的效果 20 使用Smo 图5.t工具属性 21SmoothHeigh 130 (6)StampTerain———快捷键F7 。 22所示。 StampTerain工具用于在当前高度贴图的顶部标记笔刷形状,其属性如图5. 使用时,在Hierarchy视图中选中Terain地形,然后在其Inspector视图中单击Paint Terain工具,从下拉菜单中选择StampTerain。 图5.n工具属性 22StampTerai 3.PaintTres工具 Unity引擎中的地形编辑工具可以绘制树木,可以像绘制高度图和纹理那样绘制树木 到地形上。Unity引擎使用公告板技术来优化渲染效果,所以一个地形可以拥有上千棵树 组成的茂密森林,同时保持在可接受的帧率, 23所示。使用时, aintTres按 如图5.单击P 钮,并且选择EditTres下拉菜单中的AddTre,在弹出的窗口中选择一种树木资源,然后 在地表上用绘制纹理或高度图的相同方式来绘制树木。按住Shift键可以在区域中移除树 木,其属性如图5.其中对应的参数属性如表5. 24所示,3所示。 图5.aintTres工具的效果 23 使用P