Unity 3D 地形系统概述
在三维游戏世界中,通常会将丰富多彩的游戏元素融合在一起,比如游戏中起伏的地形、郁郁葱葱的树木、蔚蓝的天空、、凶恶的猛兽等,营造出身临其境的游戏沉浸感,让玩家置身游戏世界,忘记现实。
地形作为游戏场景中必不可少的元素,作用非常重要。Unity 3D 有一套功能强大的地形编辑器,支持以笔刷方式精细地雕刻出山脉、峡谷、平原、盆地等地形,同时还包含了材质纹理、动植物等功能。
通过地形编辑器可以让开发者实现游戏中任何复杂的游戏地形。
不可否认,可玩性是衡量一款游戏成功与否最主要的标准,这一点从《魔兽世界》的成功就可以看出。
玩家在玩一款游戏过程中第一印象是非常重要的,第一印象决定了玩家是否想继续玩下去,在玩家玩下去的同时才能展现出游戏的可玩性,所以游戏的场景设计也是评价一款游戏的标准。
场景涉及人物、地形以及各类型的建筑模型。大多数人物模型和建筑模型都是在 3ds Max、Maya 等专业的三维模型制作软件中做出来的。
虽然 Unity 3D 也提供了三维建模,但还是相当简单。不过在地形方面 Unity 3D 已经相当强大,下图就是基于 Unity 3D 开发的游戏场景。
Unity 3D 创建地形
地形的创建十分简单。执行菜单 GameObject
→ 3D Object
→ Terrain
命令,窗口内会产生一个平面,该平面是地形系统默认使用的基本原形。
在 Hierarchy 视图中选择主摄像机,可以在 Scene 视图中观察到游戏地形。
如果想调节地形的显示区域,可以调整摄像机或地形的位置与角度,让地形正对着我们。
地形参数
Unity 3D 创建地形时采用了默认的地形大小、宽度、厚度、图像分辨率、纹理分辨率等,这些数值是可以任意修改的。
你可以选择创建的地形,在 Inspector 视图中找到 Resolution
属性面板,如下图所示。
Resolution 属性面板的参数列表。
参数 | 含义 | 描述 |
---|---|---|
Terrain Width | 地形宽度 | 全局地形总宽度。 |
Terrain Length | 地形长度 | 全局地形总长度。 |
Terrain Height | 地形高度 | 全局地形允许的最大高度。 |
Heightmap Resolution | 高度图分辨率 | 全局地形生成的高度图的分辨率。 |
Detail Resolution | 细节分辨率 | 全局地形所生成的细节贴图的分辨率。 |
Detail Resolution Per Patch | 每个子地形块的网格分辨率 | 全局地形中每个子地形块的网格分辨率。 |
Control Texture Resolution | 控制纹理的分辨率 | 把地形贴图绘制到地形上时所使用的贴图分辨率。 |
Base Texture Resolution | 基础纹理的分辨率 | 远处地形贴图的分辨率。 |
Unity 3D 使用高度图创建地形
在 Unity 3D 中编辑地形有两种方法:
- 通过地形编辑器编辑地形。
- 通过导入一幅预先渲染好的灰度图来快速地为地形建模。
地形上每个点的高度被表示为一个矩阵中的一列值。这个矩阵可以用一个被称为高度图(heightmap
)的灰度图来表示。
灰度图是一种使用二维图形来表示三维的高度变化的图片。近黑色的、较暗的颜色表示较低的点,接近白色的、较亮的颜色表示较高的点。
通常可以用 Photoshop 或其他三维软件导出灰度图,灰度图的格式为 RAW 格式
,Unity 3D 可以支持 16 位
的灰度图。
Unity 提供了为地形导入、导出高度图的选项。
- 单击
Settings tool
按钮,找到标记为Import RAW
和Export RAW
的按钮。
- 这两个按钮允许从标准
RAW 格式
中读出或者写入高度图,并且兼容大部分图片和地表编辑器。
案例构思
在 Unity 3D 中支持 RAW 格式
的高度图导入。
RAW 格式
相当于各种图片格式的“源文件”,它的转换是不可逆的。
注:
- 在 Photoshop 软件中可以使用滤镜功能制作高度图。
本案例根据在 Photoshop 中制作好的高度图导入 Unity 3D 系统,自动生成地形。
案例设计
本案例通过 Photoshop 中制作好的高度图在 Unity 3D 中创建一个简单的地形,在地形参数列表里设置导入高度图的信息,导入的高度图地形效果如下图所示。
案例实施
- 创建地形。执行
GameObject
→3D Object
→Terrain
菜单命令。
- 在 Inspector 面板中单击
Import Raw 按钮
添加地形,如下图所示。
- 设置地形参数,如下图所示。
- 进行测试,即可观察到基于高度图创建出来的地形效果,如下图所示。
参数列表
参数 | 含义 | 描述 |
---|---|---|
Depth | 深度 | 根据文件格式设置,可以是8位或16位。 |
Width | 宽度 | 设置高度图的宽。 |
Height | 高度 | 设置高度图的高。 |
Byte Order | 字节顺序 | 根据文件格式设置,可以是Mac 或Windows 。 |
Terrain Size | 地形大小 | 定义地形的大小。 |
Unity 3D 使用笔刷绘制地形
在 Unity 3D 中,除了使用高度图来创建地形外,还可以使用笔刷绘制地形。
刚创建的初始地表只有一块巨大的平面。Unity 3D 提供了一些归纳于地形菜单栏的工具,可供游戏开发者在该平面上创建很多地表元素。
地形菜单栏一共有7个按钮,含义分别为
- 编辑地形高度。
- 编辑地形特定高度。
- 平滑过渡地形。
- 地形贴图。
- 添加树模型。
- 添加草与网格模型。
- 其他设置。
如下图所示,每个按钮都可以激活相应的子菜单对地形进行操作和编辑。
地形高度绘制
在地形编辑器中,前 3 个工具用来绘制地形在高度上的变化。
左边第一个按钮激活 Raise/Lower Height 工具
,如下图所示。
当使用这个工具时,高度将随着鼠标在地形上扫过而升高。如果在一处固定鼠标,高度将逐渐增加。这类似于在图像编辑器中的喷雾器工具。
如果鼠标操作时按下 Shift 键
,高度将会降低。不同的刷子可以用来创建不同的效果。
例如:
- 创建丘陵地形时,可以通过
soft-edged
刷子进行高度抬升。
- 而对于陡峭的山峰和山谷,可以使用
hard-edged
刷子进行高度削减。
Paint Height
,类似于Raise/Lower 工具
,但多了一个属性Height
,用来设置目标高度,如下图所示(左边第二个)。
- 当在地形对象上绘制时,此高度的上方区域会下降,下方的区域会上升。
- 游戏开发者可以使用高度属性来手动设置高度,也可以使用在地形上
Shift + 单击
对鼠标位置的高度进行取样。
- 在高度属性旁边是一个
Flatten 按钮
,它简单地拉平整个地形到选定的高度,这对设置一个凸起的地平线很有用。
Paint Height
绘制的地表包含高出水平线和低于水平线的部分,(例如在场景中创建高原以及添加人工元素——道路、平台和台阶等)都很方便。
Smooth Height
并不会明显地抬升或降低地形高度,但会平均化附近的区域。这缓和了地表,降低了陡峭变化,类似于图片处理中的模糊工具(blur tool)。
Smooth Height
可以用于缓和地表上尖锐、粗糙的岩石。参数列表如下:
参数 | 含义 | 描述 |
---|---|---|
Brushes | 笔刷 | 设置笔刷的样式。 |
Setting | 设置 | |
Brushes Size | 笔刷尺寸 | 设置笔刷的大小。 |
Opacity | 不透明度 | 设置笔刷绘制时的高度。 |
Height | 高度 | 设置绘制高度的数值。 |
地形纹理绘制
在地形的表面上可以添加纹理图片以创造色彩和良好的细节。
由于地形是如此巨大的对象,在实践中标准的做法是使用一个无空隙地(即连续地)重复的纹理,在表面上用它成片地覆盖,可以绘制不同的纹理区域以模拟不同的地面,如草地、沙漠和雪地。
绘制出的纹理可以在不同的透明度下使用,这样就可以在不同地形纹理间形成渐变,效果更自然。
地形编辑器左边第四个按钮是纹理绘制工具,单击该按钮并且在菜单中执行 Add Texture 命令
,可以看到一个窗口,在其中可以设置一个纹理和它的属性。
添加的第一个纹理将作为背景使用而覆盖地形。如果想添加更多的纹理,可以使用刷子工具,通过设置刷子尺寸、透明度及目标强度(Target Strength)选项,实现不同纹理的贴图效果,如下图所示。
参数列表:
参数 | 含义 | 描述 |
---|---|---|
Brushes | 笔刷 | 设置笔刷的样式。 |
Setting | 设置 | |
Opacity | 不透明度 | 设置笔刷绘制时的高度。 |
Textures | 纹理 | 设置绘制地形纹理图片样式。 |
Brush Size | 笔刷尺寸 | 设置绘制纹理的笔刷的大小。 |
Target Strength | 目标强度 | 设置所绘制的贴图纹理产生的影响。 |
树木绘制
Unity 3D 地形可以布置树木。可以像绘制高度图和使用纹理那样将树木绘制到地形上,但树木是固定的、从表面生长出的三维对象。
Unity 3D 使用了优化(例如,对远距离树木应用广告牌效果)来保证好的渲染效果,所以一个地形可以拥有上千棵树组成的茂密森林,同时保持可接受的帧率。
单击 Edit Trees 按钮
并且选择 Add Tree 命令
,将弹出一个窗口,从中选择一种树木资源。
- 当一棵树被选中时,可以在地表上用绘制纹理或高度图的方式来绘制树木,按住
Shift 键
可从区域中移除树木,按住Ctrl 键
则只绘制或移除当前选中的树木。树木绘制面板如下图所示。
- 参数列表:
参数 | 含义 | 描述 |
---|---|---|
Tree Density | 树木密度 | 设置树的间距。 |
Setting | 设置 | |
Tree Height | 树木高度 | 设置树的高度,勾选Random选项 ,可以出现树木高度 在指定范围内随机变化的效果。 |
Lock Width to Height | 锁定树木的宽高比 | 锁定树木宽高比。 |
Brush Size | 笔刷尺寸 | 设置种植树时笔刷的大小。 |
Tree Width | 树木宽度 | 设置树的宽度,勾选Random选项 ,可以出现树木宽度 在指定范围内随机变化的效果。 |
Random Tree Rotation | 树木随机旋转 | 设置树木随机旋转一定的角度。 |
草和其他细节
一个地形表面可以有草丛和其他小物体,比如覆盖表面的石头。草地使用二维图像进行渲染来表现草丛,而其他细节从标准网格中生成。
在地形编辑器中单击 Edit Details 按钮
,在出现的菜单中将看到 Add Grass Texture
和 Add Detail Mesh 选项
,选择 Add Grass Texture
,在出现的窗口中选择合适的草资源,如下图所示。
参数列表:
参数 | 含义 | 描述 |
---|---|---|
Detail Texture | 细节纹理 | 指定图片作为草的纹理。 |
Min Width | 最小宽度 | 设置草的最小宽度值。 |
Max Width | 最大宽度 | 设置草的最大宽度值。 |
Min Height | 最小高度 | 设置草的最小高度值。 |
Max Height | 最大高度 | 设置草的最大高度值。 |
Noise Spread | 噪波范围 | 控制草产生簇的大小。 |
Healthy Color | 健康颜色 | 设置草的健康颜色,此颜色在噪波中心处较为明显。 |
Dry Color | 干燥颜色 | 设置草的干燥颜色,此颜色在噪波中心处较为明显。 |
Billboard | 广告牌 | 草将随着摄像机同步转动,永远面向摄像机。 |
地形设置
单击地形编辑器最右边的按钮可以打开地形设置面板,如下图所示。该面板用于设置地形参数,如下表所示。
基本地形参数:
参数 | 含义 | 描述 |
---|---|---|
Draw | 绘制 | 绘制地形。 |
Pixel Error | 像素容差 | 显示地形网格时允许的像素容差。 |
Base Map Dist | 基本地图距离 | 设置地形高度的分辨率。 |
Cast Shadows | 投影 | 设置地形是否有投影。 |
Material | 材质 | 为地形添加材质。 |
树和细节参数:
参数 | 含义 | 描述 |
---|---|---|
Draw | 绘制 | 设置是否渲染除地形以外的对象。 |
Detail Distance | 细节距离 | 设置摄像机停止对细节渲染的距离。 |
Detail Density | 细节密度 | 设置细节密度。 |
Tree Distance | 树木距离 | 设置摄像机停止对树进行渲染的距离。 |
Billboard Start | 开始广告牌 | 设置摄像机将树渲染为广告牌的距离。 |
Fade Length | 渐变距离 | 控制所有树的总量上限。 |
Max Mesh Trees | 网格渲染树木最大数量 | 设置使用网格形式进行渲染的树木最大数量。 |
风参数:
参数 | 含义 | 描述 |
---|---|---|
Speed | 速度 | 风吹过草地的速度。 |
Size | 大小 | 同一时间受到风影响的草的数量。 |
Bending | 弯曲 | 设置草跟随风弯曲的强度。 |
Grass Tint | 草的色调 | 设置地形上的所有草和细节网格的总体渲染颜色。 |
风域
地形中的草丛在运行测试时可以随风摆动,如果要实现树木的枝叶如同现实中一样随风摇摆的效果,就需要加入风域。
执行 GameObject
→ 3D Object
→ Wind Zone
菜单命令,创建一个风域,风域的参数如下图所示。
参数列表:
参数 | 含义 | 描述 |
---|---|---|
Mode | 风域模式 | 设置风域模式:Directional模式下整个场景中的树木都受影 响,Spherical模式下只影响球体包裹范围内的树木。 |
Main | 主风 | 设置主要风力,产生风压柔和变化。 |
Turbulence | 湍流 | 设置湍流风,产生一个瞬息万变的风压。 |
Pulse Magnitude | 波动幅度 | 定义风力随时间的变化。 |
Pulse Frequency | 波动频率 | 定义风向改变的频率。 |
风域不仅能实现风吹树木的效果,还能模拟爆炸时树木受到波及的效果。
需要注意的是,风域只能作用于树木,对其他游戏对象没有效果。场景中不同模式下的风域参数设置如下表所示。
Unity 3D 环境特效
一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程。
Unity 3D 游戏开发引擎为了能够简单地还原真实世界中的场景,其中内置了雾特效并在标准资源包中添加了多种水特效,开发人员可以轻松地将其添加到场景中。
需要注意的是,由于 Unity 5.0 以上版本在默认情况下都没有自带的天空盒,只有包,所以当需要使用天空盒资源时,需要人工导入天空盒资源包。
水特效
- 在 Project 面板中右击,执行
Import Package
→Environment
命令导入环境包,在打开的窗口中选中Water 文件夹
即可,然后单击Import 按钮
导入。
- 导入完成后,找到
Water 文件夹
下的Prefab 文件夹
,其中包含两种水特效的预制件,可将其直接拖曳到场景中,这两种水特效功能较为丰富,能够实现反射和折射效果,并且可以对其波浪大小、反射扭曲等参数进行修改。
Water(Basic)文件夹
下也包含两种基本水的预制件,如下图所示。
基本水功能较为单一,没有反射、折射等功能,仅可以对水波纹大小与颜色进行设置,由于其功能简单,所以这两种水所消耗的计算资源很小,更适合移动平台的开发。
雾特效
Unity 3D 集成开发环境中的雾有 3 种模式,分别为 Linear(线性模式)
、Exponential(指数模式)
和 Exponential Squared(指数平方模式)
。这 3 种模式的不同之处在于雾效的衰减方式。
场景中雾效开启的方式是,执行菜单栏 Window
→ Lighting
命令打开 Lighting 窗口
,在窗口中选中 Fog 复选框
,然后在其设置面板中设置雾的模式以及雾的颜色。
开启雾效通常用于优化性能,开启雾效后选出的物体被遮挡,此时便可选择不渲染距离摄像机较远的物体。
这种性能优化方案需要配合摄像机对象的远裁切面设置。通常先调整雾效,得到正确的视觉效果,然后调小摄像机的远裁切面,使场景中距离摄像机较远的游戏对象在雾效变淡前被裁切掉。雾效参数含义如下表所示。
参数 | 描述 |
---|---|
Fog Color | 雾的颜色。 |
Fog Mode | 雾效模式。 |
Density | 雾效浓度,取值为0〜1。 |
天空盒
Unity 3D 中的天空盒实际上是一种使用了特殊类型 Shader
的材质,这种类型的材质可以笼罩在整个场景之外,并根据材质中指定的纹理模拟出类似远景、天空等效果,使游戏场景看起来更加完整。
目前 Unity 3D 中提供了两种天空盒供开发人员使用,其中包括六面天空盒和系统天空盒。这两种天空盒都会将游戏场景包含在其中,用来显示远处的天空、山峦等。
- 在场景中添加天空盒,执行菜单
Window
→Lighting
命令,可以打开渲染设置窗口。单击Scene 页面
Environment Lighting 模块
Skybox
后面的选项设置按钮。
- 双击选择不同材质的天空盒。
Unity 3D 游戏场景设计实例
目前 Unity 3D 在游戏开发方面常用的游戏地形系统制作元素,接下来我们通过一个实践案例制作一个完整的三维游戏场景。
案例设计
本案例将创建一个 3D 游戏场景,其中包含了 Unity 3D 中提供的各种地形资源,如树木、山地、风域等。
案例实施
- 选择相关资源加载到项目中。
执行 Create
→ New Project
命令,在 Project Location
中输入创建项目的文件夹地址,或者单击后面的 Browse 按钮
,然后在 Import the following packages:中选择要导入的项目文件包,每个文件包都带有一些插件功能。
注:
- 如果将所有的复选框都选中,会使得 Unity 3D 在开始加载的时候速度很慢,所以大多数情况下,在创建 Unity 3D 项目文件的时候,只选择需要用到的包就可以了,在这里选择
Environment 选项
。
- 创建项目。
在创建一个新项目之后,新项目的各个面板中只有 Project(项目文件栏)包含了两个文件夹,这两个文件夹里面是之前导入的项目文件包里的所有文件。
- 创建地形。
执行 GameObject
→ 3D Object
→ Terrain
选项。
- 设置地形信息。
单击 Terrain
中的 Set Resolution 按钮
,选择设置地形大小、高度等相关信息(在每一个地形参数的右侧直接输入数值即可修改它),地形参数包括地形的高度、长度、宽度、分辨率和高度图等。
- 更改地形属性。
在场景面板中选中刚才创建的地面对象 Terrain
,也可以在 Hierarchy 视图中选中 Terrain
。
然后,在 Inspector 属性面板中会马上发现与之对应的属性,包含 Position(坐标)
、Rotation(旋转量)
、Scale(缩放尺寸)
以及地面对象固有的 Terrain(Script)
和 Terrain Collider
。
- 绘制凸起地形。
通过设置地形参数就可以对地形上的地貌进行编辑,单击平整的地形,之后在右侧的 Inspector 中的 Terrain(Script)
中就可以对地貌进行编辑。
注:
游戏开发中主要使用左边 3 个按钮设置地形起伏:
Raise/Lower Terrain
(提高和降低高度)
Paint Target Height
(绘制目标高度)
Smooth Height
(平滑高度)
- 笔刷调节。
在设计山脉的过程中可能涉及不同高度、不同大小以及不同形态的高山。
在每一种笔刷的下方也可以对笔刷的大小等属性进行调节。
其中,笔刷面积的大小决定了笔刷所能够覆盖的区域,小的数字将会绘制较小的地形,大的数字(最大100)将绘制较大的地形。透明度决定了笔刷绘制的地形的透明程度。
选择笔刷后,就可以在 Scene 视图中使用笔刷在地形上刷出凹陷与凸起效果,使用不同笔刷绘制的效果图。
- 第一种笔刷。在首选项中可以对地形进行山脉的设计,单击此按钮,激活提高和降低地形高度的工具。
在 Scene 视图中,如果在地形上移动鼠标,会有一个蓝色的圆圈,这是笔刷的作用区域。
在设计的过程中可能涉及不同高度、不同大小、不同形态的高山以及凸起。
下面的各类笔刷功能将会很简单地实现这一不同的需求,同时在 Brushes 下方可以对笔刷的大小等属性进行调节,如下图所示。
- 第二种笔刷。地形编辑器中的第二个按钮可以对地形高度进行设计,此时可以打开设置地形特定高度页面,如下图所示。
其中的 Height
参数用于设置地形的最大高度(注意:此时用 Height
而不是 Opacity
设置最大高度)。
- 第三种笔刷。地形编辑器中的第三个按钮是平滑过渡地形工具。选择一个合适画笔。
在 Scene 视图中拖动鼠标即可平滑过渡地形,可以对已经设计好的,看起来嶙峋的山脉地形进行平滑过渡处理,更加符合山脉的特征。
从上图中可以看出,平滑的效果还是相当明显的,在进行了前 3 个选项的编辑之后,初始的地貌已经出现了,接下来就进行地貌材质贴图并布置一定量的花草树木。
- 凹陷地形的制作。想要制作凹陷地形,首先需要在
Paint Height
工具中抬高地形,单击Paint Height
工具,选择Height
(Flatten)
此时,按住 Shift 键
,使用前 3 个地形工具即可刷出凹陷地形。
- 对地形进行相关材质的贴图。到目前为止,地形已经建好了,但是十分粗糙,默认的地形贴图是灰色的,接下来给地形添加贴图,让地形看起来更为美观。
Unity 3D 提供了很多地形贴图,如果在之前创建项目时没有导入资源,此时可以在 Project 视图中右击,执行 Import Package→Environment
命令将环境资源导入项目。
最后,为地形添加导入的地形贴图,单击地形贴图按钮(从左数第 4 个按钮),在界面右下角点击 Edit Textures
中的 add Texture 选项
,具体参数如下:
Add Texture
: 添加地形贴图。
Edit Texture
: 编辑地形贴图。
Remove Texture
: 添删除地形贴图。
选择 Add Texture
,此时弹出 Add Terrain Texture
界面,选择 Select 选项
,将预先载入的纹理作为地形贴图纹理,然后单击 Add 按钮
,右侧的 Inspector
属性面板选择就会出现材质的缩略图。
贴图后地形就会被纹理自动全部覆盖。
为了模拟更加真实的效果,在场景中可以选择继续添加纹理图片,此时可以选择不同的笔刷对场景中不同的地点进行纹理变换。
- 添加树木。
在地形编辑器中单击第五个按钮,执行 Edit
→ Remove tree types
→ Add tree
命令,即可完成树木的添加。
参数列表:
Add Tree
: 添加树模型。
Edit Tree
: 编辑树模型。
Remove Tree
: 删除树模型。
根据地形环境特点,选择合适的树木种类,单击 Add 按钮
完成添加。
右侧的 Inspector 面板中会出现所选树的图形,同时在下方的 Settings
中也会有关于树模型属性的设置,例如笔刷大小、树的密度、树的高度、树的随机颜色变化等。
在这里就可以以笔刷形式把树“画”在地形上。
- 加入一些花草以及岩石。
首先在地形编辑器中选择第六个按钮(添加草与网格模型)可以设置草的最大高度、草的最小高度、密度以及间隔颜色等。
参数列表:
Brush Size
: 设置笔刷大小 。
Opacity
: 设置绘制高度。
Target Strength
: 设置绘制密度。
Add Grass Texture
: 添加草的贴图。
Add Detail Mesh
: 添加自定义网格模型。
Edit
: Edit。
Remove
: 删除模型。
选择 Edit
→ Remove Detail meshes
中的 Add Grass Texture 选项
,就可以弹出添加草的对话框,如下图所示。
单击 Add 按钮之后右侧 Inspector 面板中的 Details
就会出现 Grass 选项
,在 Brush
中选择合适的笔刷类型,在地形中就可以画出草地。
- 其他设置。
做到这一步,一个简单的地形已经建立起来了,现在模型还是略显单调。
- 水的添加。
在 Project 文件夹里找到 Water 文件夹
,具体路径为 "Assets/Standard Assets/water(pro only/basic/Water/Water4/Water4Example(Advanced))"。
有两种添加水资源的方式,第一种方法是直接将 Water4Example(Advanced)文件
拖入 Scene 场景中,第二种方法是将水资源拖曳到 Hierarchy 视图中,在 Hierarchy 视图中就可以看到 Water4Example(Advanced)
,单击就可以找到 Scene中的水模型,运用快捷键W
(移动)和 R
(缩放)在场景中正确地放置水,如下图所示。
- 为场景添加光影效果。
选中光照对象 Directional light
,在它的属性面板中找到 Shadow Type(阴影模式)
,默认的是 No Shadows(没有阴影)
,可以将它改成 Soft Shadows(软渲染阴影)
或 Hard Shadows(硬件渲染阴影)
。
Soft Shadows
以消耗 CPU 的计算为代价来产生阴影效果,这种模式运行速度较慢,但对于机器配置比较落后的使用者是唯一的选择。
Hard Shadows
可利用新一代 GPU 的显卡加速功能进行阴影效果的渲染处理,其运行速度比较快,渲染效果也比较理想。
无论选择哪一个选项,动画场景的物体都会相对于阳光产生阴影效果。
- 测试场景。
- 第一人称漫游操作。
接下来需要设计并创建独特的角色来充满世界,这样玩家可以控制一个真实的角色,玩家角色是玩家用和游戏进行交互的化身,增加了游戏的趣味性。
通常角色会分为 3 类:
- 第一人称。
- 第三人称。
- 隐含角色。
Unity 3D 支持这些类型,在 Unity 3D 中,角色是通过 Character Controller
定义的。
为场景中添加第一人称角色非常简单,摄像机就像角色的眼睛一样在世界中漫游。具体步骤如下。
确定建立项目时已载入 Character Controller 资源
,如果在创建项目时没有载入资源,执行 Assets
→ Import Package
→ Characters
命令即可。
在资源面板中搜索 FPSController
,在搜索导航栏中输入 f
,此时可以在资源面板中看见预置的 First Person Controller
。
将 Project 面板中的 FPSController
拖到 Scene 视图中(FPSController
要高于地面)。
FPSController
自带摄像机,此时可以将场景中的主摄像机(Main Camera
)删除。
- 测试效果。
可以在平面上通过 W、A、S、D 键以及上下左右方向键控制前进、后退、左右旋转、鼠标也可以通过旋转确定移动方向。
将第一人称视角应用到已经建立好的游戏场景中,实现第一人称漫游。
到此整个 3D 游戏场景实例结束。