Unity3D地形系统一口气讲完!谢啦!!☆⌒(*^-゜)v

news2024/9/27 7:36:10

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 中创建一个简单的地形,在地形参数列表里设置导入高度图的信息,导入的高度图地形效果如下图所示。

案例实施

  1. 创建地形。执行 GameObject → 3D Object → Terrain 菜单命令。

  1. 在 Inspector 面板中单击 Import Raw 按钮添加地形,如下图所示。

  1. 设置地形参数,如下图所示。

  1. 进行测试,即可观察到基于高度图创建出来的地形效果,如下图所示。

参数列表

参数含义描述
Depth深度根据文件格式设置,可以是8位或16位。
Width宽度设置高度图的宽。
Height高度设置高度图的高。
Byte Order字节顺序根据文件格式设置,可以是MacWindows
Terrain Size地形大小定义地形的大小。

Unity 3D 使用笔刷绘制地形 

在 Unity 3D 中,除了使用高度图来创建地形外,还可以使用笔刷绘制地形。

刚创建的初始地表只有一块巨大的平面。Unity 3D 提供了一些归纳于地形菜单栏的工具,可供游戏开发者在该平面上创建很多地表元素。

地形菜单栏一共有7个按钮,含义分别为

  • 编辑地形高度。

  • 编辑地形特定高度。

  • 平滑过渡地形。

  • 地形贴图。

  • 添加树模型。

  • 添加草与网格模型。

  • 其他设置。

如下图所示,每个按钮都可以激活相应的子菜单对地形进行操作和编辑。

地形高度绘制

在地形编辑器中,前 3 个工具用来绘制地形在高度上的变化。

左边第一个按钮激活 Raise/Lower Height 工具,如下图所示。

当使用这个工具时,高度将随着鼠标在地形上扫过而升高。如果在一处固定鼠标,高度将逐渐增加。这类似于在图像编辑器中的喷雾器工具。

如果鼠标操作时按下 Shift 键,高度将会降低。不同的刷子可以用来创建不同的效果。

例如:

  • 创建丘陵地形时,可以通过 soft-edged 刷子进行高度抬升。

  • 而对于陡峭的山峰和山谷,可以使用 hard-edged 刷子进行高度削减。

  1. Paint Height,类似于 Raise/Lower 工具,但多了一个属性 Height,用来设置目标高度,如下图所示(左边第二个)。

  • 当在地形对象上绘制时,此高度的上方区域会下降,下方的区域会上升。

  • 游戏开发者可以使用高度属性来手动设置高度,也可以使用在地形上 Shift + 单击 对鼠标位置的高度进行取样。

  • 在高度属性旁边是一个 Flatten 按钮,它简单地拉平整个地形到选定的高度,这对设置一个凸起的地平线很有用。

  • Paint Height绘制的地表包含高出水平线和低于水平线的部分,(例如在场景中创建高原以及添加人工元素——道路、平台和台阶等)都很方便。

  1. 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 以上版本在默认情况下都没有自带的天空盒,只有包,所以当需要使用天空盒资源时,需要人工导入天空盒资源包。

水特效

  1. 在 Project 面板中右击,执行 Import Package → Environment 命令导入环境包,在打开的窗口中选中 Water 文件夹即可,然后单击 Import 按钮导入。

  1. 导入完成后,找到 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 中提供了两种天空盒供开发人员使用,其中包括六面天空盒和系统天空盒。这两种天空盒都会将游戏场景包含在其中,用来显示远处的天空、山峦等。

  1. 在场景中添加天空盒,执行菜单 Window → Lighting 命令,可以打开渲染设置窗口。单击 Scene 页面 Environment Lighting 模块 Skybox 后面的选项设置按钮。

  1. 双击选择不同材质的天空盒。

Unity 3D 游戏场景设计实例 

目前 Unity 3D 在游戏开发方面常用的游戏地形系统制作元素,接下来我们通过一个实践案例制作一个完整的三维游戏场景。

案例设计

本案例将创建一个 3D 游戏场景,其中包含了 Unity 3D 中提供的各种地形资源,如树木、山地、风域等。

案例实施

  1. 选择相关资源加载到项目中。

执行 Create → New Project 命令,在 Project Location 中输入创建项目的文件夹地址,或者单击后面的 Browse 按钮,然后在 Import the following packages:中选择要导入的项目文件包,每个文件包都带有一些插件功能。

注:

  • 如果将所有的复选框都选中,会使得 Unity 3D 在开始加载的时候速度很慢,所以大多数情况下,在创建 Unity 3D 项目文件的时候,只选择需要用到的包就可以了,在这里选择 Environment 选项

  1. 创建项目。

在创建一个新项目之后,新项目的各个面板中只有 Project(项目文件栏)包含了两个文件夹,这两个文件夹里面是之前导入的项目文件包里的所有文件。

  1. 创建地形。

执行 GameObject → 3D Object → Terrain 选项。

  1. 设置地形信息。

单击 Terrain 中的 Set Resolution 按钮,选择设置地形大小、高度等相关信息(在每一个地形参数的右侧直接输入数值即可修改它),地形参数包括地形的高度、长度、宽度、分辨率和高度图等。

  1. 更改地形属性。

在场景面板中选中刚才创建的地面对象 Terrain,也可以在 Hierarchy 视图中选中 Terrain

然后,在 Inspector 属性面板中会马上发现与之对应的属性,包含 Position(坐标)Rotation(旋转量)Scale(缩放尺寸)以及地面对象固有的 Terrain(Script)和 Terrain Collider

  1. 绘制凸起地形。

通过设置地形参数就可以对地形上的地貌进行编辑,单击平整的地形,之后在右侧的 Inspector 中的 Terrain(Script)中就可以对地貌进行编辑。

注:

游戏开发中主要使用左边 3 个按钮设置地形起伏:

  • Raise/Lower Terrain(提高和降低高度)

  • Paint Target Height(绘制目标高度)

  • Smooth Height(平滑高度)

  1. 笔刷调节。

在设计山脉的过程中可能涉及不同高度、不同大小以及不同形态的高山。

在每一种笔刷的下方也可以对笔刷的大小等属性进行调节。

其中,笔刷面积的大小决定了笔刷所能够覆盖的区域,小的数字将会绘制较小的地形,大的数字(最大100)将绘制较大的地形。透明度决定了笔刷绘制的地形的透明程度。

选择笔刷后,就可以在 Scene 视图中使用笔刷在地形上刷出凹陷与凸起效果,使用不同笔刷绘制的效果图。

  • 第一种笔刷。在首选项中可以对地形进行山脉的设计,单击此按钮,激活提高和降低地形高度的工具。

在 Scene 视图中,如果在地形上移动鼠标,会有一个蓝色的圆圈,这是笔刷的作用区域。

在设计的过程中可能涉及不同高度、不同大小、不同形态的高山以及凸起。

下面的各类笔刷功能将会很简单地实现这一不同的需求,同时在 Brushes 下方可以对笔刷的大小等属性进行调节,如下图所示。

  • 第二种笔刷。地形编辑器中的第二个按钮可以对地形高度进行设计,此时可以打开设置地形特定高度页面,如下图所示。

其中的 Height 参数用于设置地形的最大高度(注意:此时用 Height 而不是 Opacity 设置最大高度)。

  • 第三种笔刷。地形编辑器中的第三个按钮是平滑过渡地形工具。选择一个合适画笔。

在 Scene 视图中拖动鼠标即可平滑过渡地形,可以对已经设计好的,看起来嶙峋的山脉地形进行平滑过渡处理,更加符合山脉的特征。

从上图中可以看出,平滑的效果还是相当明显的,在进行了前 3 个选项的编辑之后,初始的地貌已经出现了,接下来就进行地貌材质贴图并布置一定量的花草树木。

  1. 凹陷地形的制作。想要制作凹陷地形,首先需要在 Paint Height 工具中抬高地形,单击 Paint Height 工具,选择 Height(Flatten)

此时,按住 Shift 键,使用前 3 个地形工具即可刷出凹陷地形。

  1. 对地形进行相关材质的贴图。到目前为止,地形已经建好了,但是十分粗糙,默认的地形贴图是灰色的,接下来给地形添加贴图,让地形看起来更为美观。

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 属性面板选择就会出现材质的缩略图。

贴图后地形就会被纹理自动全部覆盖。

为了模拟更加真实的效果,在场景中可以选择继续添加纹理图片,此时可以选择不同的笔刷对场景中不同的地点进行纹理变换。

  1. 添加树木。

在地形编辑器中单击第五个按钮,执行 Edit → Remove tree types → Add tree 命令,即可完成树木的添加。

参数列表:

  • Add Tree : 添加树模型。

  • Edit Tree : 编辑树模型。

  • Remove Tree : 删除树模型。

根据地形环境特点,选择合适的树木种类,单击 Add 按钮完成添加。

右侧的 Inspector 面板中会出现所选树的图形,同时在下方的 Settings 中也会有关于树模型属性的设置,例如笔刷大小、树的密度、树的高度、树的随机颜色变化等。

在这里就可以以笔刷形式把树“画”在地形上。

  1. 加入一些花草以及岩石。

首先在地形编辑器中选择第六个按钮(添加草与网格模型)可以设置草的最大高度、草的最小高度、密度以及间隔颜色等。

参数列表:

  • 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 中选择合适的笔刷类型,在地形中就可以画出草地。

  1. 其他设置。

做到这一步,一个简单的地形已经建立起来了,现在模型还是略显单调。

  1. 水的添加。

在 Project 文件夹里找到 Water 文件夹,具体路径为 "Assets/Standard Assets/water(pro only/basic/Water/Water4/Water4Example(Advanced))"。

有两种添加水资源的方式,第一种方法是直接将 Water4Example(Advanced)文件拖入 Scene 场景中,第二种方法是将水资源拖曳到 Hierarchy 视图中,在 Hierarchy 视图中就可以看到 Water4Example(Advanced),单击就可以找到 Scene中的水模型,运用快捷键W(移动)和 R(缩放)在场景中正确地放置水,如下图所示。

  1. 为场景添加光影效果。

选中光照对象 Directional light,在它的属性面板中找到 Shadow Type(阴影模式),默认的是 No Shadows(没有阴影),可以将它改成 Soft Shadows(软渲染阴影)或 Hard Shadows(硬件渲染阴影)

Soft Shadows 以消耗 CPU 的计算为代价来产生阴影效果,这种模式运行速度较慢,但对于机器配置比较落后的使用者是唯一的选择。

Hard Shadows 可利用新一代 GPU 的显卡加速功能进行阴影效果的渲染处理,其运行速度比较快,渲染效果也比较理想。

无论选择哪一个选项,动画场景的物体都会相对于阳光产生阴影效果。

  1. 测试场景。

  1. 第一人称漫游操作。

接下来需要设计并创建独特的角色来充满世界,这样玩家可以控制一个真实的角色,玩家角色是玩家用和游戏进行交互的化身,增加了游戏的趣味性。

通常角色会分为 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)删除。

  1. 测试效果。

可以在平面上通过 W、A、S、D 键以及上下左右方向键控制前进、后退、左右旋转、鼠标也可以通过旋转确定移动方向。

将第一人称视角应用到已经建立好的游戏场景中,实现第一人称漫游。

到此整个 3D 游戏场景实例结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定时任务上云改造方案

优质博文:IT-BLOG-CN 一、Job单元化 什么Job需要单元化:所有会往单元化DB更新/删除/插入数据的Job都需要进行单元化改造。 什么是单元化DB 【1】指配置为DRC双向复制的DB; 【2】单元化的DB部署在多个Zone,每个Zone内的实例都会…

【含文档】基于Springboot+Vue的高校失物招领平台(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

物体实例分割,机器人拾取

物体实例分割是计算机视觉领域的一个关键任务,它旨在从图像中分割出每个独立物体,并且为每个物体实例提供一个独特的标识。这一任务不仅识别出图像中的物体,还能区分出多个同类物体的不同实例,例如在一张桌子上摆放的多个相同的杯…

『功能项目』宠物的攻击巨型化【80】

本章项目成果展示 我们打开上一篇79宠物的召唤跟随的项目, 本章要做的事情是实现在战斗中有几率触发宠物巨型化攻击将怪物击飞的效果 首先在主角预制体中增加隐藏的宠物巨型化 制作巨型化宠物的攻击效果 将该动画控制器放置在隐藏的巨型化宠物的动画控制器上 首先查…

新160个crackme - 065-Eternal Bliss

运行分析 选择验证方式,破解字符串标题提示为vb程序 PE分析 VB程序,32位,无壳 静态分析&动态调试 使用VB Decompiler进行分析,发现Command1_Click_403604为check按钮事件,需要使Me 1 CBool(expression) 将表达…

传输层协议 --- UDP

序言 在之前的文章 Socket 编程 中,我们只是简单的知道了怎么利用 UDP协议 或者是 TCP协议 来发送我们的数据,并且我们还知道 UDP 是不可靠的,TCP 是可靠的。但这是为什么呢?底层的构造和策略决定他们的属性!这篇文章中…

从环境部署到开发实战:消息队列 RocketMQ

文章目录 一、消息队列简介1.1 什么是消息队列1.2 常见消息队列对比1.3 RockectMQ 核心概念1.4 RockectMQ 工作机制 (★) 二、RocketMQ 部署相关2.1 服务器单机部署2.2 管控台页面 三、RocketMQ 的基本使用3.1 入门案例3.2 消息发送方式3.2.1 同步消息3.…

微服务-流量染色

1. 功能目的 通过设置请求头的方式将http请求优先打到指定的服务上,为微服务开发调试工作提供便利 请求报文难模拟:可以直接在测试环境页面上操作,流量直接打到本地IDEA进行debug请求链路较长:本地开发无需启动所有服务&#xf…

前端常见算法题集

很久没练算法了,打算接下来一段时间每天坚持写题和写题解 这是一篇前端常用算法题集,题目从从简到难,编程语言主要为JavaScript,顺便练习和熟记js的各种方法... 目录 字符串类 1.字符串相加 字符串类 下图为js中常用的字符串方…

神经网络介绍及其在Python中的应用(一)

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~ 个人主页:小高要坚强的博客 当前专栏:Python之机器学习 本文内容:神经网络介绍及其在Python中的线性回归应用 作者“三要”格言:要坚…

使用python爬取豆瓣网站?如何简单的爬取豆瓣网站?

1.对python爬虫的看法 首先说说我对python的看法,我的专业是大数据,我从事的工作是java开发,但是在工作之余,我对python又很感兴趣,因为我觉得python是一门很好的语言,第一:它可以用来爬取数据…

fmql之字符驱动设备(2)

例行的点灯来喽。 之前是寄存器读写&#xff0c;现在要学习通过设备树点灯。 dtsled.c 寄存器写在reg 把用到的寄存器写在设备树的led节点的reg属性。 其实还是对寄存器的读写。 &#xff08;不推荐&#xff09; 头文件 #include <linux/kernel.h> #include <li…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-26

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-26 1. LLMs Still Can’t Plan; Can LRMs? A Preliminary Evaluation of OpenAI’s o1 on PlanBench Authors: Karthik Valmeekam, Kaya Stechly, Subbarao Kambhampati LLMs仍然无法规划&#xff1b;LRMs可以…

【通俗易懂】FFT求解全过程,各参数详细解释

在进行FFT全过程讲解之前&#xff0c;小编先给大家解释一下&#xff0c;在FFT中出现的一些参数名词解释。 &#xff08;1&#xff09;采样频率 Fs Fs 1 / 采样间隔 根据奈奎斯特定理&#xff1a;Fs ≥ 最高频率分量的两倍&#xff0c;这样才能避免混叠 &#xff08;2&…

解决macOS安装redis以后不支持远程链接的问题

参考文档:https://blog.csdn.net/qq_37703224/article/details/142542179?spm1001.2014.3001.5501 安装的时候有个提示, 使用指定配置启动: /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf那么我们可以尝试修改这个配置文件: code /opt/homebrew/…

傅里叶级数在机器人中的应用(动力学参数辨识)

B站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清华大学李永乐老师教你如何理解傅里叶变换&#xff0c;辨清美颜和变声原理&#xff0c;&#xff01;&#xff01;_哔哩哔哩_bilibiliB站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清…

AI 智能体 | 手捏素材选题库 Coze Bot,帮你实现无限输出

做自媒体的同学经常遇到的一个痛点就是无限输出&#xff0c;那怎么才能有源源不断的选题呢&#xff1f;那就是搭建一个选题素材库。 下面就为大家介绍一下基于 Coze Bot 快速搭建素材选题库&#xff0c;希望能让大家才思泉涌。 一、流程拆解 日常素材库积累的过程可以描述为…

eslint-plugin-react的使用中,所出现的react版本警告

记一次使用eslint-plugin-react的警告 Warning: React version not specified in eslint-plugin-react settings. See https://github.com/jsx-eslint/eslint-plugin-react#configuration . 背景 我们在工程化项目中&#xff0c;常常会通过eslint来约束我们代码的一些统一格…

汽车总线之----J1939总线

instruction SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准&#xff0c;广泛应用于商用车&#xff0c;船舶&#xff0c;农林机械领域中&#xff0c;J1939协议是基于CAN的高层协议&#xff0c;我们来看一下两者之间的关系。在J1939 中&#xff0c;物理层和数据链路…

第13讲 实践:设计SLAM系统

设计一个视觉里程计&#xff0c;理解SLAM软件框架如何搭建&#xff0c;理解视觉里程计设计容易出现的问题以及解决方法。 目录 1、工程目标 2、工程框架 3、实现 附录 1、工程目标 实现一个精简版的双目视觉里程计。由一个光流追踪的前端和一个局部BA的后端组成。 2、工程…