
很多做 UE5 场景的同学第一次尝试做自然环境时都会遇到一个典型问题地形雕刻出来了湖也放上去了但画面看起来就是“假”——山的轮廓太规整湖面和地形之间有明显的穿模缝隙水既不流动也没有反射整个场景像一张静止的贴图。这其实不是美术能力的问题而是对 UE5 自然环境工作流的理解还停留在“刷地形 拖模型”的阶段。UE5.7.1 里做“山湖”这类环境真正要掌握的是三层东西第一层是 Landmass 地形工具和 Modeling Tools 的使用第二层是 Water 水体系统与地形高度的匹配逻辑第三层是 Landscape 材质层的权重混合和植被散布策略。只有把这三层串起来山的雄浑和湖的静谧才能成立。这篇教程会从一个空项目开始完整走一遍在 UE5.7.1 中创建“山湖”环境的流程包含地形主体制作、凹陷湖盆处理、Water 水体生成、岸边材质混合以及性能调优建议。文章后面还会专门整理我实际踩过的几个坑比如水体显示为巨大的方块、Landscape 层权重刷不出来、以及植被密度过高导致场景掉帧等方便你对照排查。1. 这篇文章真正要解决的问题“山湖”环境听起来是个偏美术向的需求但实际做起来会发现它至少涉及 UE5 的四套系统Landscape 地形系统、Landmass 样条工具、Water 水体系统和植被实例化系统。很多教程只教其中一个点导致读者做完地形不会做水做完水又不知道如何让岸边过渡自然。这篇文章的核心目标是让你通过一个完整的“山湖”案例跑通 UE5.7.1 自然环境制作的闭环。读完之后你至少能解决以下四类问题如何用 UE5.7.1 的地形工具快速雕刻出有层次感的山体而不是一个突兀的土包。如何在保证湖泊区域是低洼地形的前提下让湖底和岸边高度平滑过渡避免水体和地形穿模。如何正确使用 Water 插件添加湖泊水体以及如何调整湖泊的样条曲线形状和深浅。如何通过 Landscape Layer 权重和植被系统让山体、湖岸、泥土和草地的交界处看起来自然融合。如果你之前做过 Unity 的地形编辑或者用过 World Machine 这类外部地形生成工具你会发现 UE5 的思路不太一样。UE5 更强调“编辑器内闭环”——地形雕刻、样条切山、水体生成、植被散布都在一个项目里完成没有外部软件来回切换的开销。2. 核心概念与基础原理在动手操作之前有几组核心概念必须分清否则后续很容易在插件启用、工具模式切换、材质层配置这些环节绕晕。2.1 Landscape 和 Modeling Tools 的区别Landscape 是 UE 的传统地形系统它基于高度图和权重图层工作。你可以在 Landscape 模式下用笔刷雕刻山体、降低洼地、创建悬崖也可以通过 Landscape Layer 让不同材质草地、泥土、岩石根据权重信息自然地混合显示。它的数据量较小适合做大面积、需要实时性能的地形。Modeling Tools 是 UE5 引入的网格体建模工具集本质上是直接在静态网格体上做几何编辑。它更接近传统 DCC 软件里的建模思路可以用布尔运算、轮廓编辑、顶点推拉等操作做出精确的几何体。UE5.5 之后 Modeling Tools 增强了很多但它的输出是 Mesh如果要参与 Landscape 的高度信息计算通常还需要转换成 Landscape 或用于布尔开挖。在“山湖”案例中主力是 Landscape。Modeling Tools 更多用于辅助——比如做一个精确的湖盆凹陷或者做山体岩石点缀的静态网格体。2.2 Landmass 样条工具的作用Landmass 是 UE 提供的程序化地形修改工具通过样条线和 Brush 组件可以在地形上动态挖出河道、山谷、湖泊和道路。打个比方Landscape 地形本质是一块巨大的“布料”Landmass 样条就是在这块布料上用带形状的压痕器压出沟壑。你可以在编辑器里随时拖动样条点调整山体的开口形状、宽度、深度。这对做山谷和湖岸非常有效因为自然界的山谷很少是笔直的而样条天然适合表现蜿蜒的曲线。另一个关键点是 Landmass 支持物理材质混合和后期权重提取。它可以把样条范围内的高度变化直接写入 Landscape 的高度图也可以输出对应的权重图层让草地材质沿着湖边自动收边。2.3 Water 水体系统不是“放一个平面”很多初学者以为做湖泊就是放一个 Plane然后给它一个水面材质。这在静态截图上也许能看但是角色一走近就会看到湖水没有深度岸边无法产生湿润的沙滩效果更不用说和水下的地形发生互动。UE5 的 Water 系统是一整套基于样条的水体解决方案。它包含 Water Body Lake、Water Body River、Water Body Ocean 等类型。每个水体由一个样条定义形状系统根据样条和水面高度自动计算水体网格并支持波浪、深度渐变、水下物体的折射反射等。也就是说创建湖泊的正确方式不是“放一个水面模型”而是“创建 Water Body Lake然后用样条勾勒出湖岸线再设置水面高度和目标深度”。2.4 Landscape Layer 权重与材质混合在 UE5 里一个 Landscape 可以使用多个材质层。比如山体表面可以使用三层材质草地层、岩石层、泥土层。每个层的显示权重通过 Landscape Layer Weight 节点输出。Layer 权重信息本身是画家绘制的。你可以在 Landscape 模式下用 Weight 笔刷在山体表面涂抹红色代表草地权重高蓝色代表岩石权重高。UE5 根据权重值对多个材质层做 Lerp 混合。权重信息可以保存到地形关卡中后续可以重复调整不会破坏高度信息。这套机制对“山湖”环境很重要。“山湖”至少要有一个湖边浅滩过渡带从水下的沙土色过渡到岸边的草地绿再过渡到山体的岩石灰。如果不用 Layered Weight而是直接把几种材质用 Mask 贴图叠加很容易出现接缝和重复纹理感。3. 环境准备与前置条件开始操作之前你需要确认以下环境和版本信息。操作系统建议使用 Windows 10/11 64 位。本文所有操作在 Windows 环境下验证Mac 上流程基本一致但路径和快捷按键会略有不同。UE 版本为 UE5.7.1。注意UE5.6 之后 Water 和 Landmass 相关菜单和选项的位置变化不大但早期版本UE5.0 至 UE5.3部分 UI 可能不叫这个名字建议使用新版本学习本教程。显卡建议至少支持 DirectX 11 / Vulkan显存 6GB 以上。做自然环境时Landscape 材质和 Water 材质会有多个 PBR 纹理采样显存不足时容易出现材质编译卡顿和地形刷写延迟。项目类型建议选择 Blank 或 Third Person 模板。Third Person 模板自带一个角色方便你后续切换到游戏视角检验湖边步行效果。创建项目时有两点需要注意。第一项目名称和路径中不要包含中文字符或空格。很多 UE 材质、插件在中文路径下会出现奇怪的编译错误。建议使用英文项目名比如MountainLakeDemo。第二建议启用“Startup 无模板”或“带基本场景”选项时不要勾选光追相关选项。后续我们会用后处理体积和 Lumen 实现更稳定的光照效果光追在这个场景中不是必需项。打开项目之后先通过编辑器的插件面板启用两个插件Water 插件Landmass 插件具体路径在菜单栏Edit-Plugins搜索Water和Landmass勾选 Enabled 后重启编辑器。Water 插件不仅提供水体系统还包含 Water Body 对应的地形样条编辑依赖。Landmass 插件则提供 Brush 组件和样条对应的地形修改能力。另外如果你打算用蓝图或者 Python 脚本来自动化地形创建还需要在项目设置中启用 Python Editor Script Plugin。不过本教程主体操作不需要 Python脚本示例会放在高级章节中作为补充。4. 核心流程拆解UE5.7.1 创建“山湖”环境的核心流程可以分为六个阶段下面会逐一讲解每个阶段的目标和关键决策。4.1 创建基础地形在 Place Actors 面板中搜索 Landscape拖入场景或者通过 Modes 面板左侧的 Landscape 模式创建新的 Landscape 地形。创建时会要求设置地形大小和分辨率。以 4km x 4km 的场景为例可以设置 Section Size 为 127Subsection 数量为 8x8这样地形分辨率适中既不会让笔刷太卡也能保留后续雕刻的细节。这一步最容易犯的错误是一上来把地形设得特别大比如 8km x 8km结果自己只有一台中端配置电脑后面每刷一次地形都卡顿到怀疑人生。建议刚开始做环境练习时场景控制在 2km 到 4km 之间。地形创建完成后默认是纯平地。接下来进入雕刻阶段。4.2 雕刻山体轮廓在 Landscape 模式下选择 Sculpt 工具使用默认的 Brush 笔刷开始刷高度。目标不是直接刷出一个山峰而是先刷出一个大体的“山体范围”。你可以用大尺寸笔刷比如 Brush Size 调为 2000将地形整体抬高形成山的大方向。然后切换到小尺寸笔刷Brush Size 600 左右在山体顶部和山脊线附近增加细节。雕刻时要记住一个原则山体不要均匀隆起。自然界几乎没有完美的圆锥形山。使用笔刷时可以配合 Falloff 参数调整笔刷边缘的柔和度先大范围抬高再用小笔刷在局部做“掏”和“压”的操作。做完这些后地形会有一段明显的坡面。再用 Flatten 工具在山脚和山腰处做一些平缓的台地为后续植被和湖岸过渡留出空间。4.3 创建山谷与湖盆凹陷场景中已经有了山体轮廓但在创建湖水之前还需要在地形中挖出湖盆区域。这里推荐使用 Landmass 样条工具来创建山谷和湖盆。在 Place Actors 面板中搜索LandmassBrush或者通过Modes-Landscape-Brushes子菜单添加 Landmass Brush。添加一个样条后进入样条编辑模式沿着计划中的山谷和湖岸线放置样条点。调整每个点的控制柄让样条形成封闭的环或者一条从山间延伸到湖盆的开放路径。样条内的 Brush 会驱动地形变形。如果你是首次使用 Landmass这里最容易懵的地方是为什么样条放好了地形却没有变化原因通常是 Brush 的高度模式没有设置正确。需要在 Brush 的 Details 面板中找到 Height Mode选择Subtractive或者自定义的Low/Hi范围让 Brush 对地形执行“压低”而不是“抬升”。具体设置会在示例代码部分给出。4.4 生成并调整 Water Body Lake地形挖出凹陷之后从 Place Actors 面板中搜索并拖入Water Body Lake。Water Body Lake 本身带有一条样条边界。默认情况下它会沿着自身样条生成一个水面网格。你需要进入样条编辑模式将湖泊的边界样条调整到你在地形中挖出的湖盆区域边缘让湖水的水平面尽可能贴住岸边地形。然后需要设置两个核心属性Water Body Lake 的Water Level或基础水面高度这决定了湖面相对于地形的高度。通常建议比湖盆中心的地形高度高 300 到 800 左右具体数值取决于你的地形尺度。Target Depth或湖泊水深。这个值不用太大在 200 到 800 之间即可。数值过大会导致近岸区很突兀。另外Water Body Lake 自带材质颜色、波浪参数和深度颜色。可以先使用默认的蓝色水体材质跑通流程后续再调整颜色和透明度。4.5 制作岸边过渡材质水体生成后下一个关键问题是湖边陆地如何从泥土过渡到草地再过渡到山的岩石。在 Landscape 模式中创建至少三个 Landscape LayerMud、Grass、Rock。然后在 Landscape 材质蓝图里使用 Landscape Layer Blend 节点把这三个层按照权重混合在一起。用 Weight 工具在不同区域刷不同层在湖边接近水面的区域刷 Mud 层。在离湖较远的斜坡刷 Grass 层。在山的顶部、陡坡和岩壁刷 Rock 层。这里有一个比较影响效果的小技巧三个层的权重不要刷成“非黑即白”。在自然界草地和泥地交界处会有一个过渡带。刷权重时用低强度的笔刷在交界处来回涂抹几次让权重值在 0.2 到 0.8 之间渐变材质混合会自然很多。4.6 植被散布与细节调整最后一步是给山体增加植被包括树木、灌木、草和小碎石。选中地形后进入 Foliage Mode。通过 Add Foliage Type 添加需要使用的植被静态网格体比如一个低多边形树木模型和一个草丛模型。然后在植被管理器中设置密度、缩放、对齐法线等参数直接用笔刷在山体表面刷植被。和传统 DCC 软件显式摆放不同UE 的植被系统在运行时是实例化绘制的同一个树木模型可以刷上千棵性能上可以接受。但要注意在密度设置上留有余地比如松树密度默认 10如果刷得太多导致场景掉到 30 帧就需要降低密度或更换 LOD 策略。到这一步“山湖”场景已经具备了山、湖、岸边过渡、植被四个关键元素。下面会用完整示例展示每个阶段的具体配置和代码。5. 完整示例与代码实现为了让流程可验证我们从项目创建到水体生成给出一个完整的操作序列。这里不依赖外部资源包只使用 UE5.7.1 自带基础资源。5.1 创建 Landscape 地形的命令行示例如果你是命令行党可以使用 UE 自带的 UnrealEditor 启动参数来创建基础材质或自动化导入地形但在编辑器内可视化创建更直观。这里给出 Python Editor Script 创建 Landscape 的示例方便你批量生成测试地形。# 文件路径Content/Python/create_landscape.py import unreal def create_landscape(): asset_tools unreal.AssetToolsHelpers.get_asset_tools() landscape_editor unreal.LandscapeSubsystem() # 获取当前世界 world unreal.EditorLevelLibrary.get_editor_world() # 创建地形需要使用的 Actor 类 landscape_class unreal.LandscapePlaceholder # 这里使用简单的平面高度数据生成一个 4x4 的 landscape。 # 更高效的方案是通过 Texture 或 Heightmap 导入真实地形。 heightmap_data [0.0 for _ in range(257 * 257)] landscape unreal.LandscapeSubsystem.create_landscape_actor( world, num_sections4, section_size63, heightmap_dataheightmap_data ) return landscape注意这段示例中的 API 在 UE5.7 中可能因官方改名而有差异。如果你运行时报找不到LandscapeSubsystem模块可以退回到编辑器里手动创建。上面代码的意义更多是说明“地形创建本质上是高度图驱动”而不是要求你必须走脚本。5.2 启用 Water 和 Landmass 插件在编辑器中启用插件没有命令行可以直接生效但你可以通过修改项目配置文件YourProject.uproject来预启用模块。{ FileVersion: 3, EngineAssociation: 5.7, Category: , Description: , Modules: [ { Name: MountainLakeDemo, Type: Runtime, LoadingPhase: Default, AdditionalDependencies: [ Engine, Water ] } ], Plugins: [ { Name: Water, Enabled: true }, { Name: Landmass, Enabled: true } ] }修改uproject文件之前应关闭编辑器否则保存时会被编辑器覆盖回去。重新打开项目后在菜单栏Edit-Plugins里确认Water和Landmass均为 Enabled 状态。5.3 绘制湖边低洼区域的 Heightmap 思路如果不使用 Landmass 样条而想直接用 Landscape 雕刻湖盆也可以。这里给出一个高度图导入的思路适合想使用外部程序化地形生成工具的同学。先准备一张 16 位的灰度纹理尺寸要和你的 Landscape 分辨率一致黑到白代表高度从低到高。湖盆区域在高度图里表现为明显低于周围区域的块状凹陷山体区域表现为渐变的白色山峰。导入到 UE 后通过 Landscape Mode 的 Import Heightmap 功能导入。导入时记住选择合适的分辨率和坐标翻转方式通常是 Y 轴翻转否则场景可能出现前后镜像或地形倒置。5.4 Landmass Brush 的配置示例在场景中放置 Landmass Brush 并编辑样条后需要在 Brush 的 Details 面板中配置参数。这里用文字描述关键参数和推荐值方便你在 UI 中对照。Brush Type选择Low模式意味着 Brush 会把地形压低到样条范围内。Brush Height控制在样条范围内的地形最低高度。湖盆区域可以设置为 -200 到 -500。Falloff决定 Brush 边缘的过渡范围。设置在 0.3 左右边缘会自然衰减湖边不会出现明显断层。Affects Landscape勾选后Brush 修改才会实际应用到地形。配置完成后点击 Brush 详情面板上的Apply Brush或移动样条点时地形会自动更新。5.5 创建并调整湖泊水体放置 Water Body Lake 后在 Outliner 中选中该 Actor。然后在 Details 面板找到Shape分类下的编辑按钮进入样条编辑。关键参数表如下参数项推荐值说明Spline Points根据湖岸线形状自定不要少于 8 个点否则湖形不圆滑Water Level比湖盆中心高 400 左右确保水面能覆盖湖盆凹陷Target Depth300 ~ 800控制湖底到水面的深度视觉Wave Amplitude0.5 ~ 2.0数值越大水面波纹越明显Wave Length30 ~ 100控制水面波浪的波长调整完成后运行游戏或用独立进程查看确认水面是否覆盖湖盆且没有明显悬浮感。5.6 用材质蓝图实现三图层混合在 Content Browser 中创建一个 Material命名为M_Landscape_MountainLake。打开材质编辑器添加以下几个节点LandscapeLayerBlend节点。在 LandscapeLayerBlend 节点点击加号添加三个层Mud、Grass、Rock。每层连接TextureSample节点作为 BaseColor、Roughness、Normal。最终将 LandscapeLayerBlend 连到Base Color和Roughness将 Normal 连到Normal。保存材质后在 Landscape 模式下把该材质指定给地形。随后你会在 Landscape 图层面板中看到 Mud、Grass、Rock 三个层。记得给每层指定纹理否则权重刷上去后画面上还是纯色。下面是一个简化版本的材质连线伪代码用于理解权重混合的运算关系。// 伪代码用于理解 Landscape Layer Blend 的运算逻辑 // 实际开发中不需要自己写这段计算 float3 finalColor lerp(mudColor, grassColor, grassWeight); finalColor lerp(finalColor, rockColor, rockWeight);在真实材质蓝图中LandscapeLayerBlend节点会按层权重的总和自动归一化你不需要手动对最终结果做 LID只要确保每个 Layer 的纹理和参数表达到位即可。5.7 植被密度与 Foliage 配置示例进入 Foliage Mode 后在 Content Browser 中选中植被网格点击“Add Foliage Type”。然后在细节面板调整密度。# 配置参数示例实际填写在 Foliage 面板中 FoliageType: Mesh: /Game/Assets/Vegetation/SM_Tree_Pine Density: 12 Scaling: 最小 0.8, 最大 1.4 AlignToNormal: true RandomYaw: true MinLOD: 0 MaxLOD: 2密度设置原则是远景区域密度可以高一些近景区密度适度降低。如果项目里使用了 Nanite 植被可以把 MaxLOD 设置为 -1让引擎按距离自动切换渲染级别。6. 运行结果与效果验证完成上述步骤后需要验证场景是否真正符合“山湖”环境的基本要求。验证不能只看编辑器视口建议按下Alt P或运行时点击 Play用第三人称角色实际走一遍。重点检查以下四个方面湖水是否自然“坐”在湖盆中而不是悬浮在半空。如果水面下能看到地形底部说明 Water Level 太高或湖盆不够深如果地形边缘穿透水面说明样条边界和水面高度不匹配。湖边过渡带是否仍有明显的垂直切面。正常情况是靠近水面的沙土区域与草地、岩石之间是渐变混合的不应该看到一圈硬边。山体表面的岩石层是否能在相机焦距拉近时清晰显示法线细节。如果在近距离发现纹理很模糊可能是材质中的纹理分辨率过低或者 Landscape LOD 切换时权重过度平滑。运行帧率是否稳定在 30 帧以上。如果场景卡顿明显优先查看植被密度和 Water 反射是否开启过高。运行成功后可以在编辑器中使用 High Resolution Screenshot高分辨率截图工具输出一张 4K 或 8K 的场景截图用于确认整体构图和色彩氛围。下面给出一段用于性能统计的控制台命令帮助你量化验证。# 在 UE 编辑器中打开输出日志或控制台输入 stat FPS stat SceneRendering stat Streaming输入stat FPS后视口会显示当前帧率。按~打开控制台输入上面命令即可。7. 常见问题与排查思路这章整理了做“山湖”环境时最容易遇到的五个问题按发生频率排序。问题现象可能原因排查方式解决方案放置 Water Body Lake 后看不到水面Water 插件未启用查看Edit-Plugins中 Water 是否 Enabled启用 Water 插件并重启编辑器湖面与地形穿模岸边出现悬浮水墙Water Level 设置过高选中 Water Body Lake查看 Water Level 和地形高度差异降低 Water Level或加深湖盆凹陷Landmass 样条放置后地形没有变化Brush 高度模式设置错误检查 Brush 的 Height Mode 和 Falloff 参数将 Height Mode 改为 Low并重新 Apply BrushLandscape 材质只有一个层有效无法混合材质蓝图中没有使用 LandscapeLayerBlend 节点检查材质编辑器中是否连接了 LandscapeLayerBlend使用 LandscapeLayerBlend 重新创建材质层植被刷上去后场景卡顿严重植被密度过高或 LOD 策略不合理查看stat FPS和植被实例数量降低密度或启用 LOD 和 Nanite 支持此外有一个非常隐蔽但常见的坑当你在 Water Body Lake 的样条编辑模式里拖动点后湖泊的形状发生了变化但地形并没有同步更新。这通常是因为地形样条 Brush 和目标水体不是一个 Actor它们各自独立。如果需要让湖岸随水体样条调整而动态开挖地形需要额外制作一个 Landmass Brush并将它的样条与 Water Body Lake 的样条绑定。这个操作比较复杂刚入门时可以先用“手动调整水体样条匹配已挖好的湖盆”的方式效果已经足够。8. 最佳实践与工程建议做“山湖”环境不是一次性的操作它往往需要反复调整。如果工程组织得不好改一个参数可能要牵连很多地方。下面几条实践经验供参考。第一命名规范建议统一。地形 Actor 统一命名为L_前缀比如L_MountainBase、L_LakeBottom水体统一命名为W_前缀比如W_MountainLake材质统一命名为M_前缀。这样在 Outliner 里能快速定位资源对团队协作尤其重要。第二地形高度和 Water Level 这两个数值最好记录在项目文档中。假设你的地形基准高度为 0山峰高度为 8000湖盆中心为 -300那么 Water Level 设在 100 左右。通过记录这些基线数值后续调整 Water Level 时就不需要反复用视线去对齐。第三LOD 和 Nanite 策略。地形本身不要盲目开 Nanite至少到 UE5.7地形 Nanite 仍处于不断完善的状态性能收益并不是所有机器都稳定。植被部分如果使用的是静态网格体可以尝试开启 Nanite 支持尤其在树木数量多的情况下能明显降低 Draw Call。但对于草丛这类半透明或大量子面片的植被Nanite 支持有限建议还是使用传统的 LOD 和 Cull Distance。第四光照探针和反射捕获。湖泊表面有高光反射如果场景没有反射捕获水的反射会偏灰。建议在湖边放置一个 SphereReflectionCapture然后在构建光照或实时反射时更新。如果使用 Lumen可以不用手动摆很多反射捕获但需要确保场景的最终光照质量在项目设置中设置为高。第五用 Level 区分资产和场景。不要把所有山、湖、植被全部堆在一个关卡里。建议创建Layout关卡作为主关卡通过子关卡加载山体子关卡、湖泊子关卡和植被子关卡。这样在调整植被密度时不需要等待整个场景刷新。第六保存前检查。每次大调整后使用Ctrl S保存关卡同时建议使用 Version Control 插件如 Perforce 或 Git LFS管理关卡二进制文件。UE 工程保存时有大量资源引用如果不做版本管理一次误操作可能丢失几小时的修改。9. 总结与后续学习方向本文完整走了一遍在 UE5.7.1 中创建“山湖”环境的流程从创建 Landscape 地形、雕刻山体轮廓、使用 Landmass 压出湖盆到放置 Water Body Lake、调整湖面高度和岸边材质过渡再到植被散布与性能验证。核心收获有三点“山湖”不是单纯地刷地形它需要地形、水体、材质层、植被四个系统协同工作。Water Level 和湖盆高度的匹配是水体效果成败的关键。水面悬浮或穿模几乎都是这个数值没对齐。岸边材质切换必须通过 Landscape Layer 的权重混合来实现不要试图用贴图遮盖解决。如果你已经完成了基础版本下一步有三个方向可以深入。学习如何使用 Water 插件中的 River 系统制作山涧溪流流入湖泊的效果。这与湖泊实现很相似但需要 River 样条沿着山谷走势延伸。研究如何在 UE 中导入真实世界地形数据比如通过 DEM数字高程模型生成高度图再导入 Landscape这样山体的真实感会远超手工雕刻。尝试使用 PCG程序化内容生成框架根据地形高度和坡度自动散布植被和岩石替代手动刷植被的方式。PCG 可以设定“海拔超过多少米刷岩石坡度小于多少度刷草地”这类规则非常适合大范围环境生成。收藏这篇文章下一次从零开始做 UE5 自然环境时直接按章节顺序对照操作少走弯路。