资讯动态

虚幻引擎场景搭建入门:Actor组件、材质光照与蓝图交互实战

发布时间:2026/10/27 20:59:36 来源:尧图企业网站定制
1. 先搞清楚UE 场景搭建到底在做什么很多人第一次打开虚幻引擎Unreal Engine下文简称 UE时最直接的感受是界面复杂、面板太多、点哪里都不知道会发生什么。我接触过的初学者里绝大多数人卡住的不是不会写蓝图而是根本不知道自己在编辑器里操作的那一堆东西分别属于哪个层级。所以在动手搭场景之前我们先把概念理清楚后面操作起来会顺畅很多。UE 的场景搭建本质上是在一个关卡Level里不断放置、组合、调整对象再给这些对象配置外观和行为。这里的外观来自材质Material和光照Lighting行为来自蓝图Blueprint或 C 逻辑。三者是相互独立的同一个模型可以换不同材质同一个材质可以贴在不同模型上同一个交互逻辑可以挂在任意 Actor 上。理解这种解耦关系是避免后期返工的关键。1.1 场景搭建的三个层次把场景搭建拆开看其实就三层工作第一层是空间层负责地面、墙体、天花板、楼梯这些几何结构决定玩家能走哪里、视觉上看得到什么第二层是表现层负责材质、光照、后处理、雾效决定场景好不好看第三层是逻辑层负责门能不能开、灯能不能亮、玩家碰到某个区域触发什么事件。新手最容易犯的错误是三件事一起做一边摆模型一边调材质一边加蓝图结果改到后面发现地面尺寸不对整套布景都要重摆。更合理的顺序是先定空间骨架用简单方块把尺寸和动线确定下来再统一做材质和光照最后补交互逻辑。这个顺序在本文的实战章节里会严格按步骤执行。1.2 UE 里几个必须分清的概念Level关卡可以理解为一张地图是场景的容器。一个项目可以有多个关卡比如主菜单关卡、游戏关卡、测试关卡。Actor关卡里所有能放置的对象的基类。灯光是 Actor摄像机是 Actor一个椅子模型也是 Actor。Actor 本身没有外观它的外观来自挂载的组件。Component组件挂在 Actor 上的功能单元。UStaticMeshComponent负责显示静态模型UPointLightComponent负责发光UBoxComponent负责碰撞检测。一个 Actor 可以挂很多组件组合出复杂对象。Static Mesh静态网格体模型资源比如一把椅子、一面墙。它是数据不是场景里的对象被组件引用后才会出现在场景中。Material材质决定表面长什么样颜色、粗糙度、金属感、贴图都在这里配置。Blueprint蓝图可视化脚本把事件和动作连起来。适合做交互、UI、关卡逻辑。World Settings世界设置整个关卡的全局配置包括游戏模式、光照构建方式、重力等。把这几个词记住再看编辑器界面就不会一头雾水。Content Browser 里放的是资源模型、材质、蓝图类Viewport 里放的是实例资源被引用后生成的对象。1.3 为什么第一次搭场景容易乱乱的根本原因通常不是技术难而是没有建立坐标系和尺度感。UE 默认单位是厘米一个标准角色的胶囊体高度大约 176 厘米门的高度通常在 200 到 220 厘米之间。如果一开始随手拖一个方块当墙不做尺寸校验等角色放进去就会发现门太矮、走廊太窄、天花板压头。另一个常见问题是资产命名随意。Cube1、Cube2、Material_3这种名字在十几个对象时还能忍到五十个对象时基本就找不回哪个是哪个了。本文第 6 章会给出具体的命名规范这里先提醒一句命名成本极低返工成本极高。2. 环境准备与版本说明2.1 硬件与系统要求UE 对硬件的要求在同类工具里偏高尤其是开启了 Lumen 和 Nanite 之后。以下是实际使用中的经验值不是官方硬性指标具体以你本机实际表现为准配置项能用学习推荐流畅CPU4 核 8 线程8 核 16 线程以上内存16 GB32 GB 及以上显卡独立显卡6 GB 显存独立显卡8 GB 以上显存硬盘SSD预留 100 GBNVMe SSD预留 200 GB系统Windows 10 64 位Windows 10/11 64 位内存不足时最典型的表现是编辑器频繁卡顿、编译着色器时假死。如果你的机器只有 16 GB 内存建议在项目设置里关掉一些高开销特性具体做法见 2.4 节。2.2 引擎安装与项目模板选择引擎通过 Epic Games Launcher 安装。安装时注意两点一是安装路径不要带中文和空格二是首次安装会额外下载大量依赖组件预留时间。版本方面本文示例以 UE5 系列版本为例不同小版本之间菜单位置可能有细微差异但核心概念和操作路径是一致的。如果你的项目已经有既定版本请跟随项目版本不要为了学教程随意升级引擎——大版本升级往往伴随 API 变更和资产重导入。创建项目时模板选择建议如下Blank空白只有一张空关卡适合完全从零开始理解结构本文实战部分使用这个。First Person / Third Person自带角色和移动逻辑适合快速验证场景可玩性。Archviz建筑可视化自带室内场景和高质量光照适合参考布景思路。第一次搭场景我建议用 Blank 模板配合 Starter Content初学者内容包这样既有干净的起点又有现成的模型和材质可以直接拖用。2.3 项目目录结构说明创建完项目后先看一眼磁盘上的目录结构这比在编辑器里点来点去更能建立整体认知MyRoomDemo/ ├── Config/ # 项目配置ini 文件都在这里 │ ├── DefaultEngine.ini │ ├── DefaultGame.ini │ └── DefaultInput.ini ├── Content/ # 所有资产编辑器里看到的内容 │ ├── Characters/ │ ├── Materials/ │ ├── Meshes/ │ └── Maps/ ├── Source/ # C 源码蓝图项目可能不存在 │ └── MyRoomDemo/ ├── MyRoomDemo.uproject # 项目描述文件 └── Saved/ # 日志、缓存、自动保存需要特别说明的是Content目录。编辑器里的 Content Browser 展示的就是这个目录的映射你在编辑器里新建文件夹磁盘上会同步创建。所有资产都必须放在 Content 目录下放到外面引擎是识别不到的。2.4 几个开局必须改的编辑器设置在正式动手前建议先调整几个设置能省掉不少后面的麻烦。第一关闭自动曝光。UE 默认开启自动曝光走进暗房间时画面会突然变亮走出房间又变暗初学者常常误以为是光照出问题了。在项目设置的 Rendering 分类里把 Auto Exposure 关掉或者在Config/DefaultEngine.ini里追加[/Script/Engine.RendererSettings] r.DefaultFeature.AutoExposureFalse r.DefaultFeature.MotionBlurFalse r.GenerateMeshDistanceFieldsTrue第二开启网格吸附。在视口右上角的吸附设置里把网格吸附设为 10 或 50 厘米旋转吸附设为 15 度。这样拖动物体时会自动对齐不会出现墙体之间有 0.3 厘米缝隙的情况。第三保存当前关卡并给它起个有意义的名字比如L_RoomDemo。UE 社区里常见的关卡命名前缀是L_材质是M_材质实例是MI_蓝图类是BP_静态网格是SM_。这个约定不是强制的但用起来检索效率提升非常明显。3. 核心概念拆解从 Actor 到光照3.1 关卡、Actor 与组件的关系前面提过 Actor 和 Component这里用一个具体例子把它们串起来。假设我们要做一个台灯在 UE 里它通常是一个 Actor这个 Actor 下挂三个组件一个StaticMeshComponent显示灯罩模型一个PointLightComponent负责发光一个SphereComponent作为玩家可以点击的碰撞区域。三个组件各自独立可以单独开关、单独调参数。这个设计带来的好处是复用。同一套组件结构换成不同的模型和不同颜色的光就能做出落地灯、壁灯、路灯。所以搭场景时不要急着在关卡里摆一堆零散对象先把会重复出现的物件做成蓝图类后面复制粘贴改参数就行。3.2 单位与坐标系统UE 的世界坐标是左手坐标系X 轴向前Y 轴向右Z 轴向上。单位是厘米。这意味着一个 2 米高的门Z 轴尺寸填 200。一个 10 米长的走廊X 轴尺寸填 1000。角色胶囊体半径默认 34 厘米高 88 厘米半高总高约 176 厘米。初学者最容易忽略的是枢轴点Pivot。当你缩放一个立方体时它是围绕枢轴点缩放的而枢轴点默认在物体中心。如果你希望物体从地面向上长可以把枢轴点移到物体底部或者在 Details 面板里直接设置 Location 的 Z 值来对齐地面。3.3 材质与着色模型材质决定了表面的视觉表现。在 UE 里一个材质由若干节点组成最终连到 Material Output 节点的几个输入口Base Color基础色、Metallic金属度、Roughness粗糙度、Normal法线、Emissive Color自发光。新手最容易困惑的是为什么我拖进来的模型是灰白棋盘格。棋盘格表示这个模型没有指定材质引擎用的是默认的 WorldGridMaterial。解决办法很简单在 Content Browser 里选中材质拖到视口里的模型上或者在模型的 Details 面板里找到 Materials 数组手动指定。实际项目中更推荐使用材质实例Material Instance。母材质负责定义节点逻辑和贴图参数材质实例只改参数值。这样做的好处是同一个母材质可以派生出几十个变体而不增加额外开销而且改母材质逻辑时所有实例自动更新。3.4 光照系统Lumen 与静态光照UE5 的默认全局光照方案是 Lumen它支持动态的间接光和反射不需要手动构建光照贴图改完场景立即能看到效果。这对新手非常友好但也带来性能开销。如果你的目标机器性能有限或者场景是静态的室内空间也可以关闭 Lumen 使用传统的光照贴图方案。切换位置在项目设置的 Rendering 分类下的 Dynamic Global Illumination 和 Reflections把 Lumen 改成 None然后用 Lightmass 构建静态光照。两种方案的差异可以用一张表说清楚对比项Lumen 动态全局光照静态光照贴图是否需要构建不需要需要 Build Lighting动态物体表现支持不支持或表现差性能开销较高很低适合场景有动态光源、日夜变化固定光照的室内外场景学习成本低改完即见中需要理解构建流程新手阶段建议先用 Lumen把场景搭出来看到效果建立信心等场景定型、需要优化性能时再考虑切换。3.5 蓝图与 C 的分工UE 支持纯蓝图开发也支持 C。两者的定位不同蓝图适合关卡逻辑、UI 交互、快速原型。改起来直观但大规模逻辑容易变成连线面条版本管理时二进制文件也不好做 diff。C适合底层系统、性能敏感逻辑、需要被大量复用的基类。学习曲线陡但可维护性和执行效率更好。一个常见的混合做法是用 C 写 Actor 基类暴露BlueprintCallable函数和EditAnywhere属性然后在蓝图里继承这个基类做具体配置和美术摆放。本文第 4 章的实战就采用这种方式既能看到 C 的写法又能理解蓝图怎么配合。4. 完整实战搭一个可交互的小房间这一章从零开始做一个小房间有地面、四面墙、天花板有一盏可以用按键开关的灯玩家可以在里面走动。整个流程按空间 → 表现 → 逻辑的顺序推进。4.1 创建项目与整理内容目录创建项目时选择Blank模板项目名填MyRoomDemo蓝图或 C 都可以。如果你打算跟着本文写 C 部分选 C 模板。进入编辑器后先在 Content Browser 里建好目录结构Content/ ├── Maps/ # 关卡 ├── Meshes/ # 静态网格体 ├── Materials/ # 材质与材质实例 ├── Blueprints/ # 蓝图类 └── Audio/ # 音效暂时留空然后保存当前关卡到Content/Maps/L_RoomDemo。这一步看起来琐碎但后面资产一多有没有分类差距非常大。4.2 搭建地面、墙体与天花板最快的方式是用引擎自带的基础形状。在放置 Actor 面板里搜索 Cube拖一个到场景中然后在 Details 面板里设置LocationX0Y0Z-10ScaleX10Y10Z0.2按 UE 的单位换算默认 Cube 尺寸是 100 厘米缩放 10 倍就是 1000 厘米即 10 米。Z 轴缩放 0.2 得到 20 厘米厚的地板位置放在 Z-10 让地板顶面正好在 Z0 平面上。接着做四面墙。复制地板改参数北墙Location(0, 500, 150)Scale(10, 0.2, 3) 南墙Location(0, -500, 150)Scale(10, 0.2, 3) 东墙Location(500, 0, 150)Scale(0.2, 10, 3) 西墙Location(-500, 0, 150)Scale(0.2, 10, 3)这样得到一个 10 米 × 10 米、层高 3 米的空间。注意墙的厚度是 20 厘米位置要相应偏移否则墙会有一半嵌进地面里。最后加天花板直接复制地板把 Z 改成 310Scale 保持 (10, 10, 0.2)。这里需要注意的是碰撞。Cube 自带碰撞体角色不会穿过去。但如果你后面替换成从外部导入的模型要检查模型是否带简单碰撞。检查方法是在视口里选中对象按 AltC 或者打开 Show 菜单里的 Collision 显示能看到绿色的碰撞线框就说明有碰撞。为了让空间有点层次可以在角落再放两个立方体当台阶尺寸 200×200×50方便测试角色上下坡和跳跃。4.3 布置光源并验证光照删掉关卡里默认的 Directional Light如果是 Blank 模板可能没有拖入一盏 Point Light 放在房间中央上方LocationX0Y0Z280 Intensity3000 Attenuation Radius800 Light Color暖白R1.0G0.86B0.7Intensity 的单位是坎德拉数值和房间尺寸强相关。房间小的时候 3000 就够房间大了要相应提高否则会出现明显的亮度衰减。Attenuation Radius 是光照影响半径设得太大会让远处也被照亮设得太小会出现明显的光斑边界。再拖一个 Sky Light 进来把 Source Type 设为 SLS_Captured SceneIntensity 设为 1.0。Sky Light 提供环境光避免背光面纯黑。如果没有 Sky Light房间的阴影面会黑得看不见结构。此时按 AltG 或点击 Play 按钮进入运行模式用 WASD 移动应该能看到房间内部。如果画面一片黑先检查三件事灯光是否在房间内部、Intensity 是否大于 0、当前关卡是否是这个关卡。排查顺序在第 5 章有详细展开。4.4 制作可复用的材质实例现在房间全是灰白色视觉上很难判断空间关系。我们做一个简单的墙面材质。在 Content Browser 的 Materials 目录右键新建一个 Material命名为M_Wall_Base。双击打开选中最终输出节点在 Details 面板里把 Shading Model 设为 Default Lit然后做以下连线新建一个 Constant3Vector 节点设置成浅灰色0.75, 0.75, 0.72连到 Base Color。新建一个 Constant 节点值设为 0.8连到 Roughness。新建一个 Constant 节点值设为 0连到 Metallic。保存后关闭。然后在 Materials 目录右键这个材质选择 Create Material Instance命名为MI_Wall_Light。双击实例勾选 Base Color 前面的复选框改成暖白色再复制一份实例命名为MI_Wall_DarkBase Color 改成深灰。把MI_Wall_Light拖到四面板墙上MI_Wall_Dark拖到地板上天花板用浅色。这时场景的层次感就出来了。同样的方式可以做地板材质加上一点噪声纹理让表面不那么死板。UE 自带的T_Noise类贴图可以直接用连到 Roughness 上做细微变化即可。4.5 用 C 写一个可控灯 Actor接下来做交互。目标是按一次 F 键灯灭再按一次灯亮。先创建一个 C Actor 类。在编辑器的 Tools 菜单里选择 New C Class父类选 Actor命名为SwitchableLight。头文件内容如下// 文件路径Source/MyRoomDemo/SwitchableLight.h #pragma once #include CoreMinimal.h #include GameFramework/Actor.h #include SwitchableLight.generated.h class UStaticMeshComponent; class UPointLightComponent; UCLASS() class MYROOMDEMO_API ASwitchableLight : public AActor { GENERATED_BODY() public: ASwitchableLight(); // 供蓝图调用的开关方法 UFUNCTION(BlueprintCallable, Category Light) void ToggleLight(); // 供蓝图读取当前状态 UFUNCTION(BlueprintPure, Category Light) bool IsLightOn() const { return bIsOn; } protected: virtual void BeginPlay() override; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Light) TObjectPtrUStaticMeshComponent LampMesh; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category Light) TObjectPtrUPointLightComponent PointLight; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Light) bool bIsOn true; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Light) float LightIntensity 3000.f; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category Light) float AttenuationRadius 800.f; };几点说明。TObjectPtr是 UE5 推荐的指针包装写法比裸指针更安全如果你用的是 UE4把TObjectPtrUStaticMeshComponent改成UStaticMeshComponent*即可。UFUNCTION(BlueprintCallable)表示这个函数可以在蓝图里被调用BlueprintPure表示它没有副作用可以直接当节点用。UPROPERTY里的修饰符决定可见性VisibleAnywhere表示在 Details 面板可见但不可改动引用EditAnywhere表示可编辑BlueprintReadWrite表示蓝图可读写。这些修饰符组合起来决定了这个类在蓝图里的易用程度值得花时间熟悉。实现文件如下// 文件路径Source/MyRoomDemo/SwitchableLight.cpp #include SwitchableLight.h #include Components/StaticMeshComponent.h #include Components/PointLightComponent.h ASwitchableLight::ASwitchableLight() { // 这个 Actor 不需要每帧更新 PrimaryActorTick.bCanEverTick false; LampMesh CreateDefaultSubobjectUStaticMeshComponent(TEXT(LampMesh)); RootComponent LampMesh; PointLight CreateDefaultSubobjectUPointLightComponent(TEXT(PointLight)); PointLight-SetupAttachment(LampMesh); PointLight-SetIntensity(LightIntensity); PointLight-SetAttenuationRadius(AttenuationRadius); PointLight-SetLightColor(FLinearColor(1.f, 0.86f, 0.7f)); } void ASwitchableLight::BeginPlay() { Super::BeginPlay(); // 按初始状态同步灯的可见性 PointLight-SetVisibility(bIsOn); } void ASwitchableLight::ToggleLight() { bIsOn !bIsOn; PointLight-SetVisibility(bIsOn); }保存后回到编辑器点击 Compile 按钮编译。编译成功后在 Content Browser 里就能看到SwitchableLight这个 C 类右键它选择 Create Blueprint Class based on SwitchableLight命名为BP_RoomLight放在 Blueprints 目录。打开BP_RoomLight在 Components 面板选中 LampMesh在 Details 里给它指定一个灯罩模型可以用 Starter Content 里的 SM_Lamp_Ceiling 之类没有就留空。然后把它拖到关卡里位置放在房间中央 Z280 处。4.6 用蓝图做交互开关现在把按键逻辑接上。打开关卡蓝图Blueprints 菜单 → Open Level Blueprint做法有两种这里用最简单的在关卡蓝图里监听 F 键。新建一个Keyboard F事件节点拖出引脚搜索Get All Actors Of ClassClass 选SwitchableLight把返回的数组接一个ForEachLoop在循环体里调用ToggleLight。节点连接关系用文字表示[Keyboard F] -- [Get All Actors Of Class (SwitchableLight)] -- [ForEachLoop] -- [ToggleLight]如果场景里灯很多全遍历会有性能开销。更优雅的做法是在关卡蓝图里用一个变量引用这盏灯在 BeginPlay 时 Get 一次存起来按键时直接调用。对于只有一两盏灯的场景两种方式差异可以忽略。进入运行模式按 F 键灯应该会灭掉再按一次灯亮回来。如果没反应检查两件事一是有没有把BP_RoomLight拖进关卡Get All Actors Of Class找的是关卡里的实例不是类本身二是关卡蓝图的事件有没有正确连接。4.7 放置玩家出生点与相机默认的 Blank 关卡可能没有 Player Start。在放置面板搜索 Player Start拖到房间一角Location 设为(-350, -350, 90)Rotation 的 Z 设成 45让玩家初始朝向房间中央。如果进入运行模式后发现视角是自由飞行相机而不是角色视角说明当前关卡没有指定 GameMode或者 GameMode 的 Default Pawn Class 是 DefaultPawn。解决办法是在 World Settings 面板里把 GameMode Override 设为ThirdPersonGameMode之类的角色模式或者自己创建一个 GameMode 蓝图把 Default Pawn Class 指向你的角色蓝图。验证方式很简单进入运行模式如果能用 WASD 走动、鼠标转视角、并且会受重力影响掉到地面说明角色和碰撞都正常。4.8 运行验证与打包前检查在打包之前建议按下面的清单过一遍检查项检查方式预期结果关卡是否保存标题栏是否有星号无星号光照是否需要构建视口左上角是否提示 Lighting needs to be rebuilt使用 Lumen 时无此提示资产是否有丢失引用Content Browser 里筛选 Redirector 或用 Reference Viewer无红色丢失项默认地图是否正确Project Settings → Maps ModesGame Default Map 指向 L_RoomDemo碰撞是否完整视口开启 Collision 显示地面和墙体有绿色碰撞帧率是否正常控制台输入stat fps稳定在目标帧率以上在控制台按~键打开里输入stat fps可以显示实时帧率输入stat unit可以看 Game、Draw、GPU 三者各自的耗时。如果 GPU 耗时远高于其他两项说明是渲染压力如果 Game 线程耗时高说明逻辑或物理开销大。这个区分方法在性能排查时非常有用。5. 常见问题与排查思路5.1 场景一片黑或严重过曝一片黑最常见的原因有三个一是灯光不在房间内部比如 Point Light 放在天花板外面二是 Intensity 太低三是当前激活的关卡不是你以为的那个关卡。排查时先在视口里用Show菜单打开 Unlit 模式如果 Unlit 下能看到模型说明几何体没问题问题在光照然后在 Outliner 里确认灯光 Actor 存在且可见性为 true。严重过曝通常是自动曝光叠加多个光源导致的。关掉 Auto Exposure见 2.4 节再把光源数量减到一个逐个加回来就能定位是哪个光源过强。5.2 材质显示为灰白棋盘格棋盘格是 WorldGridMaterial表示这个模型没有有效材质。原因可能是模型本身的材质槽为空、材质资源引用丢失、或者资产迁移后路径变了。解决办法是选中模型在 Details 面板的 Materials 数组里重新指定如果是资源丢失用 Content Browser 的 Fix Up Redirectors 功能修复。另一个容易混淆的情况是模型有材质但显示为纯黑。这通常不是材质问题而是光照不足或者法线方向反了。先加一盏光看看如果还是黑检查模型法线。5.3 角色掉出场景或穿墙角色掉出去先看地面有没有碰撞。用 Collision 显示模式检查如果地面只有黄色线框没有绿色实体说明是简单碰撞缺失或者被设成了 NoCollision。在模型的 Details 面板里把 Collision Presets 设为 BlockAll 试试。穿墙的原因通常是墙体太薄。UE 的碰撞检测是离散的如果墙体厚度小于角色在一帧内的移动距离高速移动时会直接穿过去。解决办法是加厚墙体至少 20 厘米或者给角色加连续碰撞检测Project Settings → Physics → Enable Continuous Collision Detection。5.4 帧率突然暴跌帧率暴跌的常见诱因有光源数量过多尤其是带阴影的动态光、材质过于复杂、开启了 Lumen 但场景中有大量重合面。排查时按这个顺序先用stat unit看瓶颈在哪再在控制台输入ShowFlag.Lighting 0关掉光照看帧率变化最后逐个隐藏模型定位。如果确认是光照问题可以考虑把部分不影响画面的小光源阴影关掉Details 面板里 Cast Shadows 取消勾选或者把光源的 Mobility 从 Movable 改成 Static。5.5 光照构建失败或出现漏光使用静态光照贴图方案时构建失败通常是因为 Lightmap 分辨率不够、模型有重叠面、或者 UV 通道不对。漏光暗处出现亮边是光照贴图精度不足的典型表现解决办法是提高模型的 Lightmap Res 或者在 World Settings 里调高 Lightmass 的质量级别。下面这张表汇总了本章的排查要点问题现象常见原因解决思路场景全黑光源不在范围内、强度为 0、关卡错误用 Unlit 模式区分几何与光照问题画面过曝自动曝光叠加多光源关掉 Auto Exposure逐个排查光源模型显示棋盘格材质槽为空或引用丢失重新指定材质Fix Up Redirectors角色掉落地面无碰撞Collision 显示模式检查设 BlockAll角色穿墙墙体过薄、无连续碰撞检测加厚墙体开启 CCD帧率低光源过多、阴影开销大stat unit 定位瓶颈关小光源阴影光照构建失败Lightmap 分辨率不足、UV 错误提高分辨率检查 UV 通道6. 性能优化与工程化建议6.1 资产命名与目录规范前面提过命名前缀这里补充完整的建议体系。关卡用L_蓝图类用BP_材质母体用M_材质实例用MI_静态网格用SM_贴图用T_动画用A_或AM_。命名采用前缀 类别 变体的格式比如MI_Wall_Concrete_Dark一眼能看出是墙面的混凝土深色变体。目录层级建议按资产类型 业务模块二维划分。小项目直接按类型分就够了大项目建议用Content/Environment/Walls/、Content/Props/Furniture/这种结构。目录不要太深三层以内为宜否则双击进去要点很多次。6.2 光照与阴影的性能取舍光照是场景性能的大头。几条实用原则只在需要的地方用动态光。静态装饰灯用 Static Mobility只有会开关或移动的灯才用 Movable。控制带阴影的光源数量。一个场景里同时出现五六个动态阴影光帧率会明显下降。用 Sky Light 的静态模式代替实时间接光性能差异很大。Lumen 的 Final Gather Quality 可以在项目设置里调低画质损失不明显但性能提升可观。6.3 LOD 与实例化场景里的重复物体椅子、灯具、装饰应该用 Instanced Static Mesh 组件或者 Foliage 工具批量放置这样引擎可以用一次绘制调用渲染多个实例。手动复制粘贴出来的对象是独立 Actor每个都要单独绘制几十个之后开销就上来了。对于高面数模型要配置 LOD。在模型的 Static Mesh Editor 里可以自动生成 LOD 层级距离远时自动切换低模。这一步在远景场景里效果非常明显。6.4 版本管理与协作UE 项目的版本管理有几个需要注意的点。二进制资产.uasset、.umap无法做文本 diff多人同时改同一个资产容易冲突。建议使用 Git LFS 或 Perforce 管理大文件。每个人负责不同关卡或不同模块减少资产冲突。Config目录和Source目录是文本文件正常纳入版本管理。Saved、Intermediate、DerivedDataCache目录不要提交写进.gitignore。如果团队规模超过三五个人Perforce 的文件锁机制会比 Git 更省心因为二进制资产加锁后不会被并发修改。7. 学习路线与下一步把场景搭出来只是起点。接下来可以从三个方向继续深入。第一个方向是美术表现。学习 PBR 材质的制作逻辑、后处理体积Post Process Volume的调色、雾效和体积光的使用。这些内容能让同一个场景的观感提升一个档次而且不需要写代码。第二个方向是交互逻辑。从关卡蓝图转向 Actor 蓝图学习变量、函数、事件分发器、接口的使用把散落在关卡蓝图里的逻辑逐步收拢到可复用的蓝图类里。再进一步就是 C 与蓝图的混合开发把核心系统用 C 写配置层用蓝图暴露。第三个方向是性能与打包。学习 Stat 命令族、Unreal Insights 性能分析工具、打包配置和资产裁剪。这些是让项目能真正跑在目标机器上的必要技能。最后几点实践建议一是养成随手按 CtrlS 的习惯UE 崩溃一次可能丢掉半小时工作二是每次做完一个阶段就进运行模式看一眼不要等全部搭完再验证三是遇到问题时先看 Output Log绝大多数报错在那里面都有明确提示比在论坛里搜关键词效率高得多。场景搭建这件事第一次做会觉得步骤多、概念杂但做完一遍再回头看会发现核心流程其实就那么几步定尺寸、摆结构、配材质、布光照、加交互、做验证。把这套流程跑通两三次后面再遇到新需求基本就是在这个骨架上做增补。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑