Epic Games 官方学习路线 · 中文精编图文教程

从零开始,走完一条虚幻引擎 5官方学习路线

这份教程把 Epic 官方 Unreal Engine for New Users(虚幻引擎新用户指南)的完整路线,整理成一条可以直接照着走的中文学习地图: 装好引擎 → 建出第一个项目 → 看懂编辑器 → 玩转视口 → 选一条官方路线(程序员 / 设计师 / 美术)→ 打包成能玩的游戏。 每一步都配官方原版截图、快捷键表、动手练习和检查清单。走完官方路线后,进阶篇继续深入蓝图、动画、材质、地形、Niagara、PCG 与 MetaHuman。

🧭 14 个学习阶段 🖼 140+ 张官方截图 🔎 17,000+ 条可搜索节点 ⏱ 入门约 3 小时 🎯 一条路线约 8–15 小时 🆓 引擎与教程全部免费
◆

先看整条路线:官方是怎么安排新手的

Epic 官方新用户指南把入门拆成 4 个必做步骤、1 个岔路口(三条学习路线)和 1 个收尾步骤。照着走,不会迷路。

阅读 5 分钟来源:Unreal Engine for New Users

官方路线的核心逻辑

先让「眼睛和手」熟悉编辑器(界面 + 视口),再让「脑子」选一个方向深入。前 4 步不要求你懂任何编程或美术基础。

三条路线不是三选一终身

官方建议三条都了解,但先完整走完一条。设计师路线最贴近“做出一个能玩的关卡”,也是很多人推荐的第一条。

最容易被跳过的一步

第 4 步「视口操作」。它看起来只是操作技巧,但后面 90% 的效率差距都来自这里——请务必动手练一遍。

这份教程怎么用

  • 照着顺序走:侧边栏就是路线顺序,读完一节就勾掉一节(勾选状态存在你自己的浏览器里)。
  • 别只看不动手:每个阶段末尾都有「动手练习」,做完再进下一节。看教程的收获 ≤ 20%,动手的收获 ≥ 80%。
  • 图片可点击放大:文中所有截图都来自 Epic 官方文档,点一下看大图。
  • 版本说明:本教程以官方文档 UE 5.8 页面为准进行整理;界面在 5.3–5.8 之间差异很小,个别位置变动不影响学习。旧版本请以「帮助 → 引擎文档」中的同页内容对照。

进阶篇:官方路线之后的六个系统

官方新用户路线解决“怎么用引擎”,但不覆盖蓝图全貌、动画系统、材质节点、地形材质、Niagara、PCG 与 MetaHuman。 本教程在本页 06 之后补了 07–12 共六个进阶专题,并在附录提供节点速查与中英术语表 —— 需要时直接跳转过去。

进入进阶篇 → 搜索节点库 →

建议的阅读顺序

先做官方入门四步 + 设计师路线(能做出完整可玩关卡);再学进阶篇的 07 蓝图全解与 08 动画系统; 然后按目标挑:做场景查 09/10,做表现查 11,做大世界或数字人查 12。不要从材质节点表开始背。

关于“官方教程”的准确范围:本教程的所有路线、步骤、面板名称、快捷键表格与截图,均整理自 Epic 官方开发者社区(Epic Developer Community)的官方文档页面; 中文讲解、配图编排、练习与检查清单为便于中文学习者理解而编写,不是官方译本的逐字转载。每节都附有对应官方页面链接,方便你随时核对原文。
01

安装虚幻引擎:先把“工作台”搭好

官方 Step 1:Install Unreal Engine。装引擎本身不难,难的是别在一开始踩坑(路径、组件、磁盘)。

预计 40–90 分钟下载约 30–60 GB官方:Install Unreal Engine

1. 先确认你的电脑跑得动

官方把要求分成「最低」和「推荐」两档。UE5 的 Lumen(全局光照)和 Nanite(虚拟几何体)是吃配置的大户,如果显卡不支持,可以用传统光照方案,但学习体验会打折扣。

项目官方最低要求官方推荐配置
操作系统Windows 10 22H2(64 位)或 Windows 10 企业版 21H2(64 位)Windows 11
处理器—四核 Intel 或 AMD,2.5 GHz 或更快
内存—32 GB RAM
显卡支持 DirectX 12 的显卡 + 最新驱动支持 DX12,显存 8 GB 或以上
运行库DirectX 终端用户运行库(2010 年 6 月版)保持显卡驱动为最新
硬盘官方未给出硬性数字,但引擎 + 派生数据缓存(DDC)+ 示例项目实际占用很大,建议预留 150–200 GB 的 SSD 空间
UE5 高级渲染特性的额外门槛:Lumen 全局光照、Lumen 反射、MegaLights 需要 Windows 10 build 1909.1350 及以上并支持 DirectX 12,同时要在项目设置中启用 SM6; Nanite 虚拟化几何体与虚拟阴影贴图同理;时间超分辨率(TSR)只要显卡支持 Shader Model 5 即可,但受每着色器 8 个 UAV 的限制。配置不够就先用传统光照(关掉 Lumen/Nanite)学习,流程完全一样。

2. 还需要装什么软件

必备:Epic Games Launcher

官方发行版引擎的唯一入口。装引擎、更新版本、管理插件、下载 Fab 资源都在这里。注册 Epic 账号免费。

走程序员路线才需要:Visual Studio

写 C++ 用。安装时务必勾选 “使用 C++ 的游戏开发” 工作负载(含“桌面开发 C++”与 Unreal Engine 安装程序组件)。官方当前推荐 Visual Studio 2026,UE 5.6 时代常用 VS 2022。

进阶:移动端 / 主机 SDK

打包 iOS / Android 需要对应平台 SDK;主机平台必须使用源码版引擎,无法用启动器里的预编译版本。

可选:第三方调试工具

如 RenderDoc(抓帧分析)、Visual Studio 调试器。新手阶段可以先用引擎自带的 Output Log 与 Unreal Insights。

3. 七步装好引擎

  1. 注册并登录 Epic 账号

    到 Epic Games 官网注册账号。启动器里也可以先点 Sign In Later(稍后登录)进入,但下载引擎前必须登录。

    Epic Games Launcher 下载页面
    官方截图:Epic Games Launcher 下载页,选对应系统版本下载安装。
  2. 安装 Epic Games Launcher 并登录

    安装包很小,几分钟即可。打开后如果已有账号就选 Sign In with an Existing Epic Games Account;也可以用第三方平台账号登录并绑定。

  3. 进入 Unreal Engine 面板 → 库(Library)

    启动器左侧选 Unreal Engine,再点上方 Library 标签,这里管理你本机安装的所有引擎版本。

    Epic Games Launcher 的 Unreal Engine 标签页
    官方截图:Launcher 的 Unreal Engine 面板,包含 Library(已安装)与 Marketplace 等入口。
  4. 点 “+” 添加引擎版本

    点 + 图标会出现引擎版本列表。新手直接选最新的正式版(例如 5.6 / 5.8),不要选带 Preview 字样的预览版——预览版用于尝鲜,插件与教程适配度低。

  5. 选择安装位置与组件

    点版本旁的 Options(选项)可以改安装目录并勾选组件。这里是全篇最值得花 2 分钟的地方:

    组件作用体积参考新手建议
    Core Components引擎运行必需的官方核心文件≈ 25.8 GB必勾(Required)
    Starter Content默认素材:地图、网格体、贴图等,方便快速搭建场景≈ 443 MB建议勾选,练习时很好用
    Templates and Feature Packs用于从官方模板与功能包创建项目≈ 1.9 GB建议勾选(要用 First Person 模板就必须有)
    Engine Source查看引擎源码,用于阅读 / 修改引擎本身≈ 6.8 GB新手先不勾,体积很大
    MetaHuman Creator Core DataMetaHuman 数字人相关的核心数据≈ 5.3 GB不做数字人就不勾
    Editor symbols for debugging调试符号,崩溃时提供更详细的调用栈信息数十 GB遇到崩溃再装
    Target Platform为目标平台补装源码支持(如 Android、iOS、Linux)视平台而定按需勾选

    上表体积取自官方截图中的 5.6 安装界面示例:那次勾选后的下载体积约 12.3 GB,安装后占用约 28.5 GB。不同版本、不同组件选择会明显不同——这也说明为什么一开始就要留足磁盘空间。

    Epic Games Launcher 的安装选项界面
    官方截图:安装选项(Installation Options)面板,可改路径并选择组件。
    三条避坑建议:① 安装路径只用英文和数字,不要出现中文、空格或特殊符号——这是后面打包、编译报错的常见根源;② 放在 SSD 上,加载速度差别巨大;③ 给杀毒软件加上 DDC 与项目目录的排除项,否则编译与保存会被拖慢。
  6. 点击 Install,等待下载完成

    体量通常是几十 GB,视版本与组件而定。下载中可以暂停(Pause)或取消(Cancel),恢复时点 Resume(继续)。下载期间别断网切换网络。

  7. 点 Launch 启动引擎

    安装完成后会变成 Launch 按钮,点一下就能打开引擎(第一次启动会做初始化,比较慢)。之后可以在 Library 里点 Quick Launch 把引擎固定到启动器侧栏,下次一键打开。

    Epic Games Launcher 中启动虚幻引擎
    官方截图:安装完成后点击 Launch 启动引擎。

4. 装好之后的日常维护(了解即可)

校验安装(Verify)

引擎起不来、文件疑似损坏时:Library 里点引擎版本旁的箭头 → Verify,自动比对并修复丢失/损坏的文件。这是最常用的“一键修复”。

改动已安装组件

忘了勾 Starter Content 或调试符号?同样在版本旁的 Options 里补勾,只下载新增部分。

热修(Hotfix)更新

小版本修复会提示更新,点 Update 即可。大版本升级请先备份项目——跨大版本升级有可能需要转换资源。

多个版本共存

可以同时安装 5.4 / 5.6 / 5.8。但一个项目在升级到新版本后无法回退到旧版本打开,重要项目请先复制备份。

插件(Plugins)

第三方插件在 Library → 引擎版本 → Installed Plugins 中安装,装完重启引擎生效。插件与引擎版本不匹配是启动失败的常见原因。

卸载引擎

Library 中版本旁的 Remove。注意:卸载引擎不会删除你的项目文件。

✅ 本阶段检查清单

官方原文:Install Unreal Engine · Hardware and Software Specifications

02

创建第一个项目:从模板出发

官方 Step 2:Create your First Project in Unreal。选对模板和项目设置,能省掉后面很多返工。

预计 20–30 分钟含首次着色器编译官方:Create your First Project

1. 启动引擎:打开项目浏览器

从 Launcher 点 Launch,或直接双击引擎图标,会先出现 Unreal Project Browser(项目浏览器)。这是所有项目的起点:左边选模板,右边设默认值,下方填名称与位置。

虚幻项目浏览器界面
官方截图:项目浏览器分为「分类 / 模板列表 / 项目默认设置 / 项目创建菜单」四个区域。

2. 看懂项目浏览器的四个区域

区域名称作用
1Recent Projects 与模板分类最近打开的项目,以及按类别过滤模板(Games / Film & Video / Architecture 等)
2模板列表当前分类下的可选模板,鼠标悬停可看预览与说明
3Project Defaults(项目默认设置)蓝图 / C++、目标平台、画质预设、是否包含 Starter Content、光线追踪等开关
4Project Creation Menu设置项目名称、存储位置,以及创建按钮

3. 模板怎么选

模板内容适合谁
Blank空项目,不含任何额外的游戏功能想完全自己搭、或做非游戏内容(影视、可视化)
First Person自带第一人称角色蓝图与输入,可立即走动环视官方新用户路线推荐;程序员与设计师路线的起点
Third Person第三人称角色蓝图,含动画与相机跟随想做动作 / 冒险类,需要看到角色本体
Top Down俯视角角色与相机双摇杆射击、策略向原型
Handheld AR演示手持设备上的 AR 常用功能做移动端 AR
Virtual Reality演示 VR 常用功能(运动控制、传送等)做 VR 内容
Vehicle带一辆可驾驶的载具竞速 / 驾驶类原型

4. 推荐的创建参数(与官方教程保持一致)

使用第一人称模板创建项目
官方截图:选择 First Person 模板,填写项目名称与位置后点击 Create。
  • 模板:First Person
  • Blueprint 还是 C++:零基础选 Blueprint(可视化编程,立即能改);打算走程序员路线选 C++。官方说明:Blueprints 类项目同样可以后续添加 C++ 类,两者可混合使用。
  • Target Platform:Desktop(桌面);要发移动端再改。
  • Quality Preset:Maximum(画质优先),机器吃力就选 Scalable。
  • Starter Content:勾选,方便随手拿现成素材搭场景。
  • 项目名称:英文命名,例如 MyFirstProject;位置:全英文路径,且放在系统盘之外的分区更好。
第一次打开项目会“卡”很久,这是正常的:引擎在编译着色器、生成派生数据缓存(DDC)。同一台机器第二次打开会快很多。右下角状态栏能看到进度,别急着强制关闭。

5. 进项目后的三件事

  1. 先玩一下

    点工具栏的 Play(快捷键 Alt+P),用 WASD 走动、鼠标环视,按 Esc 退出试玩。先感受“模板已经给了你什么”。

  2. 保存关卡

    按 Ctrl+S 保存当前关卡。养成“动手三分钟就保存”的习惯,UE 没有自动保存。

  3. 看一眼内容浏览器

    打开 Content Drawer(Ctrl+Space),认识 /Content/FirstPerson/… 的目录结构——蓝图的命名与分层方式,就是你后面自己的工程该有的样子。

想用别人的资源?官方资源市场 Fab 可以直接在引擎内浏览并把素材添加到项目(项目浏览器里也有 Downloading Content from Fab 的入口)。新手先用模板自带素材,避免一上来就陷入素材整理。

✅ 本阶段检查清单

官方原文:Create your First Project in Unreal

03

认识编辑器界面:八个面板,各管一摊

官方 Step 3:Unreal Editor Interface。把界面看成“八个工种”,你就不会再找不到东西放哪。

预计 45–60 分钟核心:视口 / 大纲 / 细节 三件套官方:Unreal Editor Interface
虚幻编辑器界面八个区域总览
官方截图:编辑器主界面总览。官方把界面划分为 8 个区域,下面逐一拆解。

八个区域一览

#名称它负责什么什么时候看它
1Menu Bar 菜单栏文件、编辑、窗口、工具、构建、帮助等全局命令新建关卡、打开项目设置、打开/关闭面板
2Main Toolbar 主工具栏保存、当前关卡、模式切换、内容快捷创建、播放控制、平台菜单几乎每一次操作:保存 → 试玩 → 打包
3Viewport Toolbar 视口工具栏变换与吸附、相机视角、视图模式与显示标记、性能与视口选项调视觉表现、选中物体做变换时
4Level Viewport 关卡视口显示关卡内容(相机、Actor、灯光…),你大部分时间都待在这里摆放、调整、预览一切
5Outliner 大纲关卡内所有内容的层级树,可搜索、分组、隐藏“这个物体在哪?”
6Details 细节面板显示选中 Actor 的所有属性、组件与材质“怎么改它的参数?”
7Content Drawer 内容抽屉临时弹出的内容浏览器窗口,管理工程内的所有资源找资源、拖资源进场景时
8Bottom Toolbar 底部工具栏内容抽屉、输出日志与命令行、Tracing、DDC、Live Coding、保存状态、修订控制查报错、看日志、编译 C++
记住三件套就够了:视口(看)→ 大纲(找)→ 细节(改)。选中的物体在大纲里高亮,细节面板立刻显示它的属性;在细节里改了值,视口里马上能看到结果。这个三角关系是 UE 编辑器的基本节奏,后面所有教程都在重复它。

逐个认识:官方截图对照

虚幻编辑器菜单栏
1. 菜单栏:File / Edit / Window / Tools / Build / Help。窗口布局乱了就去 Window → Load Layout → Default Editor Layout 恢复。
虚幻编辑器主工具栏
2. 主工具栏:① 保存当前关卡 ② 在内容浏览器中定位当前关卡 ③ 模式选择(Select / Landscape / Foliage / Modeling / Fracture 等)④ 内容快捷创建 ⑤ 播放控制(Play / Skip / Stop / Eject)⑥ 平台菜单(打包准备)
虚幻编辑器视口工具栏
3. 视口工具栏:① 变换与吸附工具 ② 相机工具(Perspective / Top / Front…)③ 视图模式与显示标记(Lit / Unlit / Wireframe…)④ 性能与可扩展性设置 ⑤ 视口选项
虚幻编辑器关卡视口
4. 关卡视口:实时渲染的 3D 场景。左上角是当前视口类型,拖动边缘可拉出多个视口同时看。
虚幻编辑器大纲面板
5. 大纲(Outliner):关卡里所有 Actor 的树状列表。支持搜索、建文件夹归类、切换可见性,双击可聚焦。
虚幻编辑器细节面板
6. 细节(Details):选中物体的全部属性。顶部搜索框是效率关键——直接搜“light”“collision”比一层层翻快得多;多选物体时可批量改共同属性。
虚幻编辑器底部工具栏
8. 底部工具栏:① 内容抽屉 ② 输出日志与命令行 ③ Tracing ④ Stall Log ⑤ Derived Data ⑥ Live Coding 编译器 ⑦ 保存状态 ⑧ 修订控制。报错时第一个看这里。
7. 内容抽屉(Content Drawer):它没有专属截图,因为它的入口就在上面第 8 张图的左下角——底部工具栏最左边的「Content Drawer」按钮。点击或按 Ctrl+Space 会从底部弹出一个临时的内容浏览器;鼠标移开或按 Esc 收起。常驻版本则是 Content Browser(内容浏览器)窗口,从 Window → Content Browser 打开,也可以把它停靠到主界面里。项目里所有的蓝图、材质、关卡、贴图都在这里管理。

三个“原来如此”的小知识

内容抽屉 vs 内容浏览器

「抽屉」是临时弹出、鼠标移开就收起的版本;「浏览器」是常驻窗口。功能一样,抽屉更适合全屏工作时快速拿资源。

大纲里的“高亮联动”

在视口里点中一个物体,大纲对应行会高亮;反过来在大纲里选中,视口里也会被框出来。选中状态是全编辑器共享的。

细节面板就是“属性面板”

蓝图、材质、蓝图里的每个节点,选中后都会在细节面板显示属性。学会用搜索框,是新手进阶的第一个效率拐点。

🧪 动手练习(5 分钟)

  1. 选中与定位

    在视口里点选模板场景中的台阶或墙(例如官方示例里的 Ramp),观察它同时在大纲里高亮、细节面板里出现属性。

  2. 改一个值

    在细节面板找到 Transform → Location,把 Z 改大 200,回车,看物体在视口里“飞”起来。再按 Ctrl+Z 撤销,按 Ctrl+Y 重做。

  3. 试一次视图模式

    视口工具栏把视图模式从 Lit 切到 Unlit,再切到 Wireframe,理解“渲染表现”和“几何结构”的区别。

  4. 故意制造一次报错

    随便拖一个资源到视口,再打开底部 Output Log 看一眼日志长什么样。习惯看日志,比背快捷键更值钱。

✅ 本阶段检查清单

官方原文:Unreal Editor Interface

04

视口操作与快捷键:把引擎“用顺手”

官方 Step 4:Viewport Controls。这是全篇最该动手的一节——它决定了你之后做同样一件事要花 3 秒还是 30 秒。

预计 30–45 分钟强烈建议打开引擎边看边练官方:Viewport Controls

0. 先统一缩写

缩写含义
LMB鼠标左键(Left Mouse Button)
MMB鼠标中键 / 滚轮按下(Middle Mouse Button)
RMB鼠标右键(Right Mouse Button)
透视(Perspective)和正交(Orthographic)的区别很重要:透视视口像人眼,适合看效果、摆场景;正交视口(顶视 / 前视 / 侧视)没有近大远小,适合精确对齐位置。同一个鼠标操作在这两种视口里含义不同,下面表格分开列。

1. 选择物体

视口操作效果
透视视口点击 LMB选中光标下的物体,替换当前选择
按住 Ctrl 或 Shift + 点击 LMB把光标下的物体加入当前选择(多选)
正交视口点击 LMB选中光标下的物体,替换当前选择
按住 LMB 拖拽拉出框选矩形,选中范围内的多个物体
Shift + 按住 LMB 拖拽把框选范围内的物体加入选择;Ctrl+RMB 拖拽则是从选择中移除

2. 导航:在场景里自由移动

视口操作效果
透视按住 LMB 拖拽相机前后移动并左右转向(像是“边走边转头”)
按住 RMB 拖拽只旋转视角,环视场景(最常用!)
按住 LMB + RMB 拖拽,或按住 MMB 拖拽相机上下左右平移,不改变朝向
滚动 MMB 滚轮相机按步进前后移动
正交按住 LMB 拖拽拉框选择多个物体
按住 RMB 拖拽平移相机
按住 LMB + RMB 拖拽相机前后移动(相当于缩放)
滚动 MMB 滚轮相机按步进前后移动

3. 相机速度与“飞行”操作

按住 RMB 时,视口会进入“飞行模式”,此时可以像 FPS 游戏一样移动相机——这是搭场景时最爽的一组操作:

操作效果
按住 RMB + 滚动滚轮加快 / 减慢相机移动速度(场景很大时必备)
按住 RMB + W / 小键盘 8 / ↑相机前进
按住 RMB + S / 小键盘 2 / ↓相机后退
按住 RMB + A / 小键盘 4 / ←相机左移
按住 RMB + D / 小键盘 6 / →相机右移
按住 RMB + E / 小键盘 9 / Page Up沿世界坐标向上移动
按住 RMB + Q / 小键盘 7 / Page Down沿世界坐标向下移动
按住 RMB + R / F沿局部坐标上移 / 下移(贴地飞行很有用)
按住 RMB + Z / 小键盘 1拉大相机视野(FOV)
按住 RMB + C / 小键盘 3缩小相机视野(FOV)
最该背下来的三个键:RMB(环视,按住不放 + WASDQE 就是飞行)· F(把相机瞬间聚焦到选中物体上)· RMB+滚轮(调速)。这三个组合能解决 80% 的“找不到 / 走不动”问题。

4. 聚焦与环绕:像看模型一样检查物体

操作效果
按 F把相机聚焦到当前选中的物体上
按住 Alt + LMB 拖拽围绕一个轴心点环绕观察
按住 Alt + RMB 拖拽推拉相机(贴近 / 远离轴心)
按住 Alt + MMB 拖拽沿视线方向
左右上下平移轨道
Alt 加鼠标左键环绕观察物体
官方截图:按住 Alt + 鼠标左键拖拽,相机会绕轴心点环绕,用来检查物体的各个面。

5. 移动、旋转、缩放物体

快捷键工具说明
Space循环切换在移动 → 旋转 → 缩放之间轮换
Q选择工具只用鼠标选择,不显示变换轴
W移动工具拖动三色箭头沿轴移动
E旋转工具拖动三色圆环绕轴旋转
R缩放工具拖动轴端方块缩放
按住 V顶点吸附移动时吸附到其他几何体的顶点上,拼接模型神器
按住 MMB 拖动轴心临时移轴把选中物体的轴心临时挪到别处再变换(例如绕门轴旋转门)
轴心(Pivot)是新手第一个“玄学”:旋转和缩放都围绕轴心进行。金属门要绕门轴转,就得先把轴心移到门边(按住 MMB 拖轴心),否则会绕着门中心自转。这个技巧在设计师路线的“开门”一节课里会直接用到。

6. 显示控制与常用编辑器快捷键

快捷键作用
G切换游戏模式(Game Mode):视口只渲染游戏画面,隐藏编辑器图标与辅助线,用来检查真实效果
Ctrl+R开关实时渲染(real-time):关掉后画面静止,便于精细调整或省性能
F11切换沉浸模式:视口全屏
Ctrl+Space打开内容抽屉
Ctrl+S / Ctrl+Shift+S保存当前 / 全部保存
Ctrl+Z / Ctrl+Y撤销 / 重做
Alt+P / Esc开始试玩(Play)/ 退出试玩
Ctrl+Alt+F11Live Coding 编译 C++ 代码(程序员路线常用)
Alt+G/H/J/K视口相机切换到 透视 / 顶视 / 前视 / 侧视(不同版本可能有差异,以视口工具栏的下拉菜单为准)

视口还有个隐藏功能:按住视口左上角的视角标签拖动,可以拖出新的视口;视口工具栏里的布局按钮支持切分成 2×2 等多视口布局,同时用透视 + 顶视 + 前视对齐物体非常高效。

🧪 动手练习(10 分钟,务必做)

  1. 飞行绕场景一圈

    按住 RMB 不放,用 WASD 在模板场景里飞一圈,途中用滚轮调一次速度。感受“速度太慢 → 调快”的节奏。

  2. 用 F 键练习“回位”

    飞远到看不清场景,然后在大纲里点选一个物体按 F,相机瞬间聚焦过去。这是迷路时的救命键。

  3. Alt 环绕检查一个物体

    选中一个箱子,按住 Alt+LMB 绕它一圈,再用 Alt+RMB 推近看细节。

  4. 把轴心挪到边缘再旋转

    选中一个物体,按住 MMB 把轴心拖到它的一侧,按 E 旋转——你会发现物体绕新轴心转动。这就是做“门”的原理。

  5. 顶点吸附拼两块地板

    按住 V 移动一个物体,让它吸附到另一个物体的顶点上,体会精确对齐。

  6. G 键对比游戏画面

    按 G 隐藏编辑器辅助显示,看看“玩家真正会看到什么”。

✅ 本阶段检查清单

官方原文:Viewport Controls in Unreal Engine

05

岔路口:三条官方学习路线怎么选

官方 Step 5:Choose a Learning Track。走完前四步,你已经会开项目、会看界面、会操作视口——现在该决定“用引擎做什么”。

三条路线 · 均从零基础开始建议先完整走完一条官方:Unreal Engine for New Users
程序员路线

程序员路线

用 C++ 从零编写第一人称冒险游戏:角色、输入、相机、物品数据、拾取、装备、发射物。

关键词:C++ · 增强输入 · 数据资产 · 游戏框架
设计师路线

设计师路线

用 蓝图做出一整个可玩的解谜关卡:灰盒关卡、钥匙开门、HUD、机关、平台、陷阱、敌人、结束状态。

关键词:关卡设计 · 蓝图 · UMG · 游戏循环
美术路线

美术路线

给已经做好的关卡做一次完整 Art Pass:导入素材、打光、材质、后处理、音效、特效。

关键词:材质 · 灯光 · 后处理 · MetaSounds · Niagara

你可能适合,如果……

你有任何语言的编程基础,喜欢“逻辑可控、结构清晰”,想真正掌握引擎底层机制;或者你打算长期做独立开发、需要处理性能与大型工程的可维护性。

你需要准备什么

安装 Visual Studio(勾选 C++ 游戏开发工作负载)+ 引擎 5.6.1 或更新版本。官方提示:5.6.0 存在一个已知问题,会导致从 C++ 创建蓝图时失败。

你会做出什么

一个 C++ 编写的第一人称角色:能用增强输入系统响应按键、有第一人称相机与手臂模型、能拾取物品、装备到手上、发射投射物——并且物品数据用数据资产(Data Asset)与数据表(Data Table)管理,方便扩展。

官方对 C++ 与蓝图的说法

蓝图是可视化编码工具,上手快;但复杂度上升后会变得难以阅读与维护。大型项目里 C++ 更简洁、性能更好、更易管理。两者可以协作:用 C++ 写基类,再派生出蓝图给策划调参数。

查看程序员路线完整课程表 →

你可能适合,如果……

你想“尽快做出能玩的东西”,对关卡、机制、玩家体验更感兴趣,而不是写代码;或者你是策划 / 独立开发者,需要一个人把玩法原型搭出来。

你需要准备什么

完成前面的入门四步即可,不需要写代码。官方建议先了解其他 Getting Started 页面,如果做过程序员路线,可以直接复用它做出来的角色。

你会做出什么

一个完整的解谜冒险关卡:用 灰盒(grayboxing) 流程搭出关卡结构,用蓝图做钥匙与门、HUD、光开关与箱子谜题、移动平台、陷阱与伤害、敌人、冲刺、结束状态,还有一个“生成新箱子”的 Bonus 机制。

为什么很多人从这里开始

它把「关卡设计思维」和「蓝图」绑在一起教:先想清楚玩家怎么走、怎么被卡住、怎么获得反馈,再动手实现。做完这一条,你对“游戏是怎么跑起来的”会有完整认知。

查看设计师路线完整课程表 →

你可能适合,如果……

你的兴趣在画面、氛围、声音与特效上;或者你已经会用建模 / 贴图工具,想知道“素材进引擎之后该怎么用”。

你需要准备什么

官方建议先走完设计师路线(本路线直接从这个关卡的成果接着做)。官方还提供两种状态的示例工程:一份是设计路线刚结束的干净版本,一份是做完 Art Pass 的成品版本。

你会做出什么

给解谜关卡做一次完整美术升级:导入素材、用聚光/点光/矩形光塑造氛围、做材质与材质实例的父子体系、加后处理体积控制画面风格、用后处理材质做受击效果、用 MetaSounds 生成程序化音乐、给角色加上分地面材质的脚步声、用 Niagara 做视觉特效。

它会教你最重要的一件事

非破坏性工作流:材质实例、后处理、参数化实例——都是“改一次、全局生效、随时回退”。这是引擎美术与“直接改图”最本质的区别。

查看美术路线完整课程表 →

一眼对比

程序员路线 A设计师路线 B美术路线 C
核心工具C++ / Visual Studio蓝图 Blueprints材质、灯光、MetaSounds、Niagara
课程数8 节11 节(含 Bonus)11 节
前置要求入门四步 + Visual Studio;引擎 5.6.1+入门四步建议先完成设计师路线
最大收获掌握引擎的代码框架与数据驱动思路掌握关卡设计与游戏循环的搭建掌握画面与声音的表现工作流
推荐顺序第 2 顺位第 1 顺位(最推荐先做)第 3 顺位
官方示例工程教程内按步骤建立提供(约 75 MB)提供两个状态版本
官方的态度是:先学一条,但别只学一条。三条路线共用同一套引擎概念(Actor、组件、蓝图、关卡),先完整走完一条建立信心与手感,再按兴趣补齐另外两条,比三条同时开工高效得多。三条路线里反复出现的蓝图、动画、材质与特效,在本教程的 07 蓝图全解、08 动画与动作、09 材质系统、11 Niagara 特效里有系统深入。
A

程序员路线:用 C++ 写一个第一人称冒险游戏

官方:Code a First-Person Adventure Game。目标是学会“用代码扩展引擎”,而不是从零造轮子。

8 节课需要 Visual Studio引擎 5.6.1+

开始之前

  • 先读完前面 4 个入门页面(安装、建项目、界面、视口)。
  • 按官方文档装好 Visual Studio:Set Up Visual Studio for Unreal Engine。安装时必须勾选 C++ 游戏开发相关组件,否则引擎无法自动生成工程文件。
  • 使用 UE 5.6.1 或更新版本(5.6.0 有导致“从 C++ 创建蓝图失败”的已知问题)。
官方原话大意:用 C++ 配合虚幻引擎,你能完全掌控并访问引擎的各个特性,从而在项目里创造全新的功能。你可以用蓝图或 C++ 来创造新功能;蓝图是引擎的可视化编程工具,上手非常快——但当蓝图变得复杂时,会越来越难阅读与管理。在较大的项目里,C++ 读起来更简洁、运行更快、也更容易管理。而且二者可以协同:把 C++ 类扩展成蓝图,让设计师更直观地调整变量。

8 节课课程表

Set Up and Compile Your Project

01搭建并编译你的项目

从 C++ 模板新建一个代码项目,跑通“改代码 → 编译 → 引擎里看到变化”的完整链路。

👉 重点:认识 .uproject / Source 目录 / Build 流程;学会用编辑器里的编译按钮与 Live Coding。
Create a Player Character With Input Actions

02用输入操作(Input Actions)创建玩家角色

用增强输入系统的 Input Action 与 Input Mapping Context,搭建可复用的输入配置。

👉 重点:为什么现代 UE 项目不再用旧版轴映射;输入资产如何按“上下文”切换(走路 / 驾驶 / UI)。
Configure Character Movement

03配置角色移动

把输入事件绑定到角色的移动与视角旋转上。

👉 重点:Character / CharacterMovementComponent 的分工;用 BindAction 与 BindAxis 的替代方案处理输入。
Add a First-Person Camera, Mesh, and Animation

04添加第一人称相机、网格体与动画

用 C++ 给角色挂上相机组件、第一人称手臂网格体,并接上动画。

👉 重点:组件在构造函数里创建、用 SetupAttachment 组装层级;只有手臂(不投射阴影)等第一人称细节。
Manage Items and Data

05管理物品与数据

用 Item 数据结构体、数据资产(Data Asset)与数据表(Data Table)来定义物品。

👉 重点:数据驱动思维——把“物品长什么样、多少伤害”搬出代码,改成可批量编辑的数据;这是从玩具项目走向真实项目的分水岭。
Create a Respawning Pickup Item

06创建可重生的拾取物

用 C++ 编写自定义拾取物,并让它在关卡里刷新与重生。

👉 重点:Actor 的生命周期、碰撞检测、Spawn 与销毁、计时器(Timer)实现重生。
Equip Your Character

07让角色装备物品

实现可装备物品,并把它吸附到角色手上的插槽(Socket)。

👉 重点:骨骼网格体的插槽、附着(Attach)规则、状态切换(是否已装备)。
Implement a Projectile

08实现投射物

用 C++ 实现发射物,并在游戏中按输入生成、飞行与命中。

👉 重点:投射物移动组件、命中事件、把“发射”接到输入与动画上,形成完整的打击循环。

这条路线会用到的高频概念

概念一句话解释
UCLASS / UPROPERTY / UFUNCTION把 C++ 类、变量、函数暴露给引擎与蓝图系统的宏,写在声明上方
Input Action / Mapping Context增强输入系统:前者定义“一个动作”,后者定义“哪些按键触发它”,可整体切换
Component挂在 Actor 上的功能模块(相机、网格体、移动、碰撞都是组件)
Struct / Data Asset / Data Table数据驱动的三件套:结构定义字段,资产存单个配置,数据表批量存多行
Spawn / Destroy运行时生成与销毁 Actor,是“拾取物重生”“发射子弹”的基础
Live Coding引擎运行中直接编译 C++ 并热加载,避免反复重启编辑器
C++ 新手最容易踩的 5 个坑
  1. 改了 .h 头文件必须重新编译,否则蓝图里看不到新变量;修改头文件后建议停止 Play 再编译。
  2. IntelliSense 报红但能编译成功:VS 的索引可能过期,先执行一次编译再判断真假错误。
  3. 编译报错只看第一条:UBT 的后续错误常常是第一条引发的连锁反应。
  4. 不要手动改 Binaries / Intermediate:删掉这两个目录再重新生成工程文件,比手改更快。
  5. 类名前缀别乱起:A 开头是 Actor 子类、U 开头是 Object 子类,这是引擎约定,违反会造成难以排查的问题。

✅ 本阶段检查清单

官方原文:Code a First-Person Adventure Game

B

设计师路线:用蓝图做出一个完整的解谜关卡

官方:Design a Puzzle Adventure Game。这条路线最像“真的在做游戏”,也是多数新手的推荐第一站。

11 节课(含 Bonus)不需要写代码提供官方示例工程
设计师路线的关卡结构总览图
官方示意图:整条设计师路线的关卡结构——从一个起始房间出发,经三条走廊通向三个主题房间,每个房间放一种机制,最后串成完整游戏循环。
设计师路线中做出来的机关房间
官方示例:完成后的机关房间实景(灰盒风格)——蓝色箱子、橙色移动平台、用于触发的地面开关。你在第 5、6 课会亲手做出这些东西。

你会做出的东西

玩法循环

找钥匙 → 开门 → 进新房间 → 操作开关 → 过平台 → 躲陷阱与敌人 → 到达终点。

系统清单

拾取、门锁、HUD、物理开关、移动平台、伤害与复活、敌人 AI 基础、冲刺、结束状态。

工作方法

灰盒(grayboxing)→ 机制验证 → 打磨表现。先做“能玩”,再做好看。

11 节课课程表

Project Setup and Level Blockout

01项目设置与关卡灰盒(Blockout)

开始规划、设计并用灰盒搭出解谜冒险关卡,练习视图模式、物体变换与资源整理。

👉 重点:灰盒的思维方式——用最简单的方块验证“路怎么走、房间多大、节奏对不对”,先不谈美术。这一课会直接练习第 4 步的视口操作。
Create a Key

02制作一把钥匙

用蓝图创建一个玩家可以拾取的钥匙。

👉 重点:第一个自定义蓝图 Actor——碰撞体、静态网格体、拾取事件、销毁自身。
Open Doors with Keys

03用钥匙开门

配置 BP_DoorFrame,让门能变色,并且只有匹配的 BP_Key 才能打开。

👉 重点:蓝图之间的通信(引用、类型转换 Cast)、用颜色做玩家反馈、轴心与旋转实现开合动画。
Player HUD

04玩家 HUD

用 UMG 做一个简单的抬头显示界面,在玩家拾取物品时更新。

👉 重点:Widget 蓝图、控件绑定、把游戏数据“显示给玩家”的思维。
Puzzles: Switches and Cubes

05谜题:开关与箱子

用材质、物理与蓝图做一个由箱子激活的开关。

👉 重点:物理模拟、触发体积(Trigger Volume)、材质参数变化、状态机雏形。
Puzzles: Moving Platforms

06谜题:移动平台

用蓝图做出移动平台,并学习如何调试自己的脚本。

👉 重点:时间轴(Timeline)与插值、循环移动、蓝图调试(断点、打印字符串、观察变量)。
Traps and Damage

07陷阱与伤害

制作会对玩家造成伤害的环境蓝图,并搭建玩家被击败后的游戏结束循环。

👉 重点:持续伤害(Damage over Time)、重生点、失败与重试的体验设计。
Create an Enemy

08创建敌人

搭建游戏逻辑,做出能造成伤害、也会受到伤害的敌人角色。

👉 重点:AI 角色框架、导航网格(NavMesh)、血量与伤害接口、简单追击行为。
Add a Sprint Mechanic to the Player

09给玩家加冲刺

用输入操作(Input Actions)给角色加入冲刺能力。

👉 重点:和第 2 步的输入系统呼应——同一种输入机制,在蓝图里怎么配置。
Complete the Level

10完成关卡

收束整个游戏循环,并给玩家配置一个明确的结束状态。

👉 重点:游戏状态管理、胜利/结束条件、把散落的机制串成“一局完整的游戏”。
Bonus: Spawn New Cubes

★Bonus:生成新的箱子

给游戏加一个新机制:让 BP_Cube 在达到上限前不断生成。

👉 重点:生成器思维、用变量限制数量、给游戏加“可扩展”的机制。

范例题:蓝图里的高频节点

节点 / 概念用途典型场景
Event BeginPlayActor 生成时执行一次初始化血量、设置初始颜色
Event Tick每帧执行持续检测、随时间变化(慎用,性能敏感)
OnComponentBeginOverlap碰撞体被进入时触发摄像机触发区、陷阱、拾取
Cast To把 Actor 转成具体类型后访问它的变量/函数门的蓝图里判断“来的是不是钥匙”
Timeline / Lerp随时间插值门开合、平台移动
Set Material / 动态材质实例运行时改材质参数门变色、开关亮起、受击闪烁
Print String在屏幕上打印调试信息不确定事件有没有触发时的第一手段
官方示例工程:设计师路线提供完整示例项目下载(约 75 MB)。解压后把 adventuredesigner 文件夹放进你的 Unreal Projects 目录(Windows 默认在 C:\Users\用户名\Documents\Unreal Projects),即可对照成品学习。卡住时看成品,是最高效的调试方式。

✅ 本阶段检查清单

官方原文:Design a Puzzle Adventure Game

C

美术路线:给关卡做一次完整的 Art Pass

官方:Art Pass for a Puzzle Adventure Game。把灰盒变成有气氛的场景,且全程使用“可回退”的工作流。

11 节课建议先完成设计师路线提供两种状态的示例工程
为什么先做设计路线:这条路线直接接着「解谜冒险」关卡的成果继续做。官方提供两种工程:一份是设计路线刚结束时的干净版本,一份是完成 Art Pass 之后的成品版本——你可以对照着看每一步改了什么。

11 节课课程表

Set Up Your Project and Import Content

01设置项目并导入素材

配置项目、把外部素材导入引擎并整理好。

👉 重点:导入设置(贴图压缩、sRGB、法线贴图)、命名与目录规范——素材乱掉是所有项目后期痛苦的根源。
Light a Scene

02给场景打光

用聚光灯(Spot Light)、点光源(Point Light)、矩形光(Rect Light)塑造氛围。

👉 重点:光源的强度/色温/衰减、静态与动态光照的区别、用局部光源引导玩家视线。
Create Materials and Material Instances

03创建材质与材质实例

用材质与材质实例为关卡铺上表面质感。

👉 重点:父子关系——父材质定义逻辑与参数,子实例只改参数。一次修改,全局生效。
Expanded Material Instances

04进阶材质实例

用动态材质实例做一个可交互的技术演示。

👉 重点:运行时用蓝图修改材质参数,把“画面”接进“玩法”。
Add Post Process Volumes

05添加后处理体积

用后处理体积(Post Process Volume)控制关卡的观感与性能。

👉 重点:曝光、色彩分级、泛光、景深等参数的调节顺序;Unbound 全局体积的用法。
Post Process Materials on the UI

06在 UI 上使用后处理材质

用材质做出由玩法驱动的屏幕后处理效果。

👉 重点:受击/受伤时的画面效果——如何让“玩家状态”变成“看得见的画面变化”。
Adjust Environment Lighting Features

07调整环境光照特性

在低洼处加浓雾、在天空加暴风云,增强气氛。

👉 重点:指数高度雾、天空与体积云、大气光照的配合;氛围是靠“层次”而不是单点堆叠出来的。
Add Sounds to Fire Traps

08给火焰陷阱加音效

把音效接进蓝图,让机关“出声”。

👉 重点:音频组件、空间化(衰减与方位)、音效与事件的绑定。
Create Procedural Music

09制作程序化音乐

用内置的 MetaSounds 合成器创作环境背景音乐。

👉 重点:MetaSounds 是节点式音频编程——理解“音频也可以是逻辑”,而不只是播放文件。
Add Footstep Sounds to a Character

10给角色加脚步声

让角色在不同材质的地面上发出不同的脚步声。

👉 重点:物理材质 / 表面类型与音效的映射——一类“用数据表驱动表现”的典型做法。
Add Visual Effects to Your Game

11给游戏添加视觉特效

用内置的 Niagara 视觉特效系统做出特效。

👉 重点:粒子系统的基本结构(发射器 / 模块 / 参数),以及特效如何与游戏事件联动。

这条路线反复在教的一件事:非破坏性

做法优点对应课程
建材质 + 材质实例改一次父材质,所有实例同时更新;调参不用碰节点图第 3 课
用参数化的动态材质实例运行时按玩法改画面,无需复制多份材质第 4、6 课
后处理体积按区域划分不同房间不同氛围,互不干扰,可单独回退第 5 课
MetaSounds 程序化音乐一段逻辑生成变化,不必准备大量音频文件第 9 课

✅ 本阶段检查清单

官方原文:Art Pass for a Puzzle Adventure Game

06

最后一步:打包,让游戏离开编辑器

官方 Last Step:Packaging Unreal Engine Projects。打包之后,你的游戏可以在任意一台没有装引擎的电脑上运行。

预计 20–40 分钟首次打包较慢官方:Packaging Unreal Engine Projects

1. 打包到底是什么

开发管线与打包用途示意图
官方示意图:一条游戏开发管线(Pre-Production → Production → Testing → Distribution → Post-Production),以及打包在其中的用途:开发期测试、QA 测试、最终构建(Final Build),以及发布后的 DLC 与补丁。

编辑器里运行游戏时,资源是“就地读取 + 实时处理”的;打包则是把项目转换成一个独立的、目标平台能直接运行的程序集合。这个过程由几个子操作组成,官方把它们拆得很清楚:

构建操作做了什么典型用途
Build编译代码开发过程中编译工程
Cook把资源烘焙成目标平台能用的格式为测试或分发做准备
Stage把烘焙结果与运行所需文件按目录结构摆好准备测试 / 分发
Package把 Stage 的结果打包成可分发的产物准备测试 / 分发
Deploy部署到目标设备在非本机平台上测试
Run在目标设备上启动在非本机平台上测试
打包工作流程图
官方示意图:Build → Cook → Stage → Package 的流水线关系。

两种烘焙方式

方式说明
By the book(默认)打包前把所有资源烘焙好。成品启动快、行为稳定,正式分发用这个。
On the fly运行时按目标平台请求临时烘焙。适合快速迭代测试,正式发行不推荐。开关就在 Platforms 菜单里的 Enable cooking on the fly。

2. 选对构建配置(Build Configuration)

配置特点用途
Debug编译引擎与项目源码,关闭优化,包含符号引擎与项目调试,最慢
DebugGame编译项目源码,关闭优化,包含符号只调试项目逻辑,比 Debug 快
Development(默认)开启除最耗时项之外的全部优化,保留控制台命令与统计工具开发期测试;性能与可调试性平衡
Test包含调试工具但性能接近发行版,用于内部测试QA 测试
Shipping关闭控制台命令、统计与性能分析工具,性能最好正式分发给玩家
新手最常见的一次“翻车”:用 Shipping 打包后发现“控制台命令用不了 / 怎么看不到帧率了”——这是设计如此,不是 bug。反过来,用 Development 打包发给玩家,则会带上调试信息并降低性能。
选择构建配置
官方截图:在打包菜单或平台设置中切换构建配置。

3. 打包前的必做检查

  1. 设置游戏默认地图

    Project Settings → Maps & Modes 里把 Editor Startup Map(编辑器启动地图)和 Game Default Map(游戏默认地图)都指向你的关卡。默认地图没设对,打包出来的游戏会黑屏或进错场景。

    设置默认地图
    官方截图:在项目设置里指定编辑器启动地图与游戏默认地图。
  2. 保存一切

    关闭编辑器前保存所有关卡与资源(Ctrl+Shift+S)。有未保存内容时打包容易失败或产物缺内容。

  3. 确认代码能编译

    程序员路线项目先完整编译一次;蓝图项目确认没有会导致编译失败的损坏蓝图(试试 Play 一遍)。

  4. 检查平台与 SDK

    打 Windows 包不需要额外 SDK;打 Android / iOS / 主机需要先装对应平台组件与 SDK(主机必须用源码版引擎)。

4. 打包(Windows 桌面平台)

平台菜单中的打包选项
官方截图:主工具栏的 Platforms 菜单。这里能找到各平台的打包入口(Windows / Android / IOS…),还有 Enable cooking on the fly(按需烘焙)开关、Packaging Settings(打包设置)、Supported Platforms(支持的平台)以及 Project Launcher。注意菜单里出现的平台若带警告图标,说明该平台的 SDK 尚未配置。
  1. 打开打包菜单

    主工具栏点 Platforms → Windows → Package Project。同一菜单里还有 Packaging Settings(例如是否使用 Pak 文件、压缩方式、分块)可以先调整。

  2. 选择输出目录

    选一个英文路径的空目录(例如 D:\Builds\MyGame)。不要选项目目录内部,避免把产物打进下一次打包的输入里。

  3. 等待打包完成

    首次打包最慢(要烘焙全部资源)。底部会显示进度,可以取消。打包日志在 <项目>\Saved\Logs 里。

  4. 运行成品

    到输出目录里找到同名的 .exe(在 Windows 子目录下),双击运行——此时引擎已经完全不参与,这就是“你的游戏”。

    运行打包好的可执行文件
    官方截图:在输出目录中运行生成的 exe。
打包失败怎么办:① 先看输出目录旁边弹出的消息框与 Saved\Logs 里的日志;② 用 Project Launcher 或命令行加 -log 参数打包,可以看到完整日志;③ 新手 90% 的失败原因是中文路径、默认地图未设置、代码编译错误、资源引用丢失(内容浏览器里出现“!”的资源)。

进阶:命令行与 Project Launcher

当你要重复打包、或给不同平台出包时,可以用 Unreal Automation Tool(UAT) 命令行,或用编辑器里的 Project Launcher 做自定义打包配置(自定义烘焙、增量打包、多平台变体)。这两者都属于“自动化打包”,学会之后可以把发布流程压缩成一条命令。

@echo off
REM 命令行打包示例(请把路径和版本号换成你自己的)
"D:\UE\UE_5.6\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun ^
  -project="D:\Projects\MyGame\MyGame.uproject" ^
  -noP4 -platform=Win64 -clientconfig=Shipping ^
  -cook -allmaps -build -stage -pak -archive ^
  -archivedirectory="D:\Builds\MyGame"

参数含义:-cook 烘焙资源 · -build 编译 · -stage 整理目录 · -pak 打包成 Pak · -archive 输出到指定目录 · -clientconfig=Shipping 指定构建配置。

5. 分发:把游戏交到别人手里

  • 压缩打包整个输出目录(不是只给 exe),发给朋友解压即可运行。
  • 目标机器需要相应的 DirectX 运行库与显卡驱动;Windows 10/11 通常已具备。
  • 要上架平台(如 Steam、itch.io)时,还需准备商店页、截图、宣传片等素材;引擎侧的产物结构在各平台基本一致,主要差异在 SDK 与签名。
  • 正式发布建议切换 Shipping 配置并再次完整测试一次——包括存档、分辨率、窗口模式、按键设置。

✅ 本阶段检查清单

官方原文:Packaging Unreal Engine Projects · Sharing and Releasing Projects

07+

进阶篇:把引擎真正用起来的六个系统

前六节是“官方新用户路线”,从这里开始是“能做出东西”的部分:蓝图、动画、材质、地形、特效,以及 PCG / MetaHuman 这类生产力插件。

6 个专题建议按顺序学配官方截图与节点速查
怎么用这一篇:每个专题都是「先建立概念地图 → 再看官方界面截图 → 再给可照做的节点串/参数 → 最后是检查清单」。 你不需要一次学完:先学前两节(蓝图、动画),它们是你做任何游戏都会用到的基本功;材质与地形在做场景时再回来查;Niagara、PCG、MetaHuman 属于“需要时再深入”的能力。
07

蓝图全解:种类、编辑器、组件、变量与节点

蓝图(Blueprint)是虚幻引擎的可视化脚本系统:不用写一行 C++,也能做出完整的游戏逻辑。这一节把它的“全貌”讲清楚。

核心中的核心建议对照编辑器实操官方:Blueprints Visual Scripting

👇 本节内置节点速查库:在下面输入框里敲英文节点名或中文(多关键词用空格分隔,例如 cast to、延迟、trace),立刻看到该节点的作用、输入输出与常见坑。可检索引擎全部蓝图节点(17,000+ 条),其中 304 条高频节点附中文讲解。

7.1 一句话理解蓝图

蓝图是把 C++ 类、函数、变量“包装”成节点与连线的可视化脚本:你在图表里连线,编辑器在背后把它编译成字节码交给引擎执行。 所以它不是玩具——官方用它做出了《堡垒之夜》里的大量玩法逻辑(官方明确说过 Fortnite 的很多玩法系统就是蓝图写的)。

对策划/美术友好

不需要编译环境,改完即生效,迭代速度极快。

与 C++ 互通

蓝图可以继承 C++ 类,也可以被 C++ 调用;两者能混着用。

上限在于组织

蓝图能做完整游戏,难点是当逻辑变多时如何保持可读、可维护。

7.2 蓝图有哪些种类(重点)

“蓝图”是一个统称,实际工程里有下面这些成员。看懂这张表,你就能明白别人说的“写个蓝图”到底指什么。

类型是什么典型用途
Blueprint Class
蓝图类
最常用的一种:从某个父类派生出的资产,可包含组件、变量、函数与事件图表门、拾取物、武器、敌人等一切游戏对象
Level Blueprint
关卡蓝图
每个关卡自带一份的蓝图,只能操作当前关卡里的 Actor关卡专属逻辑:过场触发、一次性机关、关卡流程
Animation Blueprint
动画蓝图
专门驱动角色动画的蓝图,有独立的 Event Graph 与 Anim Graph走/跑/跳的切换、状态机、混合空间(见第 08 章)
Widget Blueprint
控件蓝图
UMG 界面蓝图,用可视化方式拼 UI 并绑定数据HUD、血条、菜单、背包界面
Blueprint Interface
蓝图接口
一组“函数声明的集合”,任何蓝图都可以实现它让“能互动的物体”统一响应玩家的交互
Blueprint Macro Library
宏库
存放可复用宏(Macro)的库,宏是内联展开的节点组封装通用的流程控制与逻辑片段
Blueprint Function Library
函数库
存放静态函数的库,可在任意蓝图里直接调用项目级的工具函数(数学、字符串、查表)
Data-Only Blueprint
纯数据蓝图
只有数据与继承关系、没有图表;用于做变体从同一个父类派生出一批只改默认值的资产
Editor Utility Blueprint
编辑器工具蓝图
运行在编辑器里的蓝图,可以批量处理资源批量改命名、批量设置属性、自动生成关卡内容
其他可视化图表材质图表、Niagara 图表、Control Rig 图表等也采用类似的节点编辑方式材质(第 09 章)、特效(第 11 章)、动画绑定
蓝图的解剖结构示意图
官方示意图:一个蓝图的解剖(Anatomy of a Blueprint)——组件、变量、图表、事件与函数如何共同构成一个可实例化的对象。

7.3 蓝图编辑器的构成(对照官方界面)

蓝图编辑器总览
官方截图:蓝图编辑器(以 BP_JumpPad 为例)总览。官方把它划分为顶部工具栏、左侧组件/我的蓝图、中间视口与图表、右侧细节面板。
蓝图编辑器(蓝图类)界面
蓝图类界面:官方对“蓝图类”编辑器的界面分区说明——不同蓝图的编辑器外观一致,变的只是可用的事件与默认组件。
区域作用要点
工具栏Compile(编译)、Save、Browse(在内容浏览器中定位)、Find in Blueprints、Play/Simulate改完逻辑先 Compile,报错看 Compiler Results
Components
组件面板
树状列出该蓝图拥有的组件,可增删、重命名、调整层级“蓝图能看见啥、能碰到啥”都由这里决定
My Blueprint
我的蓝图
集中管理变量、函数、宏、事件分发器与所有图表项目变大后,这里是整理逻辑的第一现场
Viewport
视口
预览蓝图的默认形态,可像关卡视口一样直接拖拽组件选中组件后可在右侧细节里改它的默认属性
Event Graph
事件图表
写“逻辑”的地方:事件 → 节点 → 结果每个蓝图的主要战场
Construction Script
构造脚本
在“对象构建时”执行的图表(编辑器里摆放时就会跑)用来做程序化摆放、根据参数自动生成子对象
Details
细节面板
显示当前选中对象(组件/节点/类默认值)的属性选中节点时,很多节点行为也在这里调整
Class Defaults
类默认值
该蓝图所有实例共享的默认属性在这里改的是“模板”,不是某一个实例
Debug
调试面板
断点、观察值、执行追踪逻辑不生效时的第一手段
蓝图组件面板与视口
组件面板 + 视口:在左上方添加组件(如碰撞盒、灯光、特效),视口里立刻能看到它们的位置关系。
蓝图事件图表
Event Graph 事件图表:官方示例 BP_JumpPad 的逻辑——事件进入 → 计算 → 输出结果。注意节点是从左到右、白线代表执行流。
蓝图构造脚本
Construction Script 构造脚本:对象被构建(包括在编辑器里摆放)时执行,适合“按参数自动生成内容”。
我的蓝图面板
My Blueprint 我的蓝图:变量、函数、宏、事件分发器都在这里统一管理,是保持蓝图整洁的关键面板。
蓝图细节面板
Details 细节面板:选中组件或节点后在这里改属性;类默认值也在同一面板(切到 Class Defaults 标签)。
蓝图类默认值标签
Class Defaults 类默认值:改这里会影响该蓝图的所有实例,适合设置“出厂状态”。
蓝图图表编辑器
Graph 图表编辑器:右键搜索节点、拖拽连线、框选整理,配合注释框把逻辑分区。
关卡蓝图
Level Blueprint 关卡蓝图:从主工具栏的 Blueprints 按钮进入。它只能操作当前关卡的对象,适合关卡专属逻辑,不要往里堆通用系统。

7.4 组件(Components):蓝图的手和脚

蓝图类本身只是一个“容器”,真正干活的是挂在它身上的组件。理解组件层级,是理解 UE 对象结构的关键一步。

Actor 与 Component 的关系

Actor 是可以被放进关卡的对象(有位置、能被选中);Component 是挂在 Actor 上的功能模块。 一个 Actor 可以没有组件(只是个逻辑载体),也可以挂几十个组件(例如角色:胶囊碰撞 + 骨骼网格体 + 相机 + 弹簧臂 + 移动组件)。

两种组件的区别

SceneComponent 有变换(位置/旋转/缩放),可以嵌套成层级;ActorComponent 没有变换,只提供功能(例如生命值管理、AI 逻辑)。 所有能“看得见、碰得到”的组件都是 SceneComponent 的子类。

层级与附加(Attach)

组件可以互相附加:父组件移动,子组件跟着动。骨骼网格体还能附加到骨骼插槽(Socket)上——把武器挂到角色手上就是这么做的。

移动性(Mobility)

Static 不可移动、Stationary 只旋转不移动、Movable 完全可动。选错会导致运行时无法移动,或失去光照烘焙优化。

常用组件作用典型场景
StaticMeshComponent显示静态网格体门、箱子、平台、道具
SkeletalMeshComponent显示带骨骼的角色/生物角色、敌人、可动装置
CameraComponent / SpringArmComponent相机与“弹簧臂”(自动避障的第三人称相机)第一/第三人称视角
Box / Sphere / Capsule Collision碰撞与触发体积拾取范围、陷阱触发、交互区
AudioComponent播放音效,支持空间衰减机关音效、环境音
PointLight / SpotLight / RectLight局部光源台灯、火炬、室内补光
NiagaraComponent挂载粒子特效火焰、烟雾、命中特效
DecalComponent贴花(投射在表面上的贴图)血迹、弹孔、涂鸦
WidgetComponent把 UMG 界面渲染在 3D 空间里头顶血条、交互提示
CharacterMovement / ProjectileMovement
RotatingMovement / InterpTo
移动类组件:角色移动、抛射物、自转、平滑跟随一切与位移有关的行为
SplineComponent样条曲线,可让物体沿曲线运动巡逻路线、相机轨道、管道
PhysicsConstraintComponent物理约束(铰链、弹簧)可开的门、悬挂物、绳索
组件的正确用法:“功能”用组件拼装,而不是把所有逻辑写在一个蓝图的事件图表里。比如“可被拾取”做成一个 ActorComponent,任何 Actor 挂上它就具备了被拾取的能力——这是从“做玩具”走向“做系统”的第一课。

7.5 变量与数据类型

我的蓝图面板中的变量列表
官方截图:My Blueprint 面板中的变量(Variables)区域——所有变量集中在这一栏,可拖进图表使用。
类型说明常见用途
Boolean / Byte / Integer / Float / String / Name / Text基础数据类型开关、计数、速度、显示文本(Text 支持本地化)
Vector / Rotator / Transform / LinearColor数学与空间类型位置、朝向、坐标变换、颜色
Struct(结构体)把多个字段打包成一个类型物品数据、伤害参数、存档条目
Enum(枚举)一组具名选项角色状态(Idle/Walk/Run/Jump)、门的状态
Object Reference指向场景中某个具体对象“这扇门要开的是哪个开关”
Class Reference指向某个类而不是实例“生成哪一种敌人”
Array / Set / Map容器物品栏、已解锁列表、ID→数据 的映射
Interface / Delegate接口与委托(事件分发器)解耦通信、观察者模式
可编辑且公开的变量
官方截图:把变量设为 Instance Editable(实例可编辑)后,它就会出现在关卡里选中该 Actor 的细节面板上——这是“让策划不用打开蓝图就能调参数”的标准做法。
变量开关含义
Instance Editable该变量显示在关卡实例的细节面板中,可逐个实例改值
Blueprint Read Only只允许在蓝图里读,不能在图表中赋值(保护数据)
Private只允许本蓝图访问
Expose on Spawn生成(Spawn)该 Actor 时可以直接传值
Slider Range / Value Range给数值变量一个滑条范围,避免手输越界
Replication多人游戏中的网络同步(进阶)
变量的“默认值”陷阱:在 Class Defaults 里改的是模板值;关卡里已经摆放好的实例,如果曾经手动改过该属性,改模板不会影响它。让实例改回模板的方法:在细节面板里找到该属性,点回退箭头(Reset to Default)。

7.6 事件、函数、宏与流程控制

Event 事件

逻辑的入口。BeginPlay(生成时一次)、Tick(每帧)、EndPlay(销毁时)、碰撞事件、输入事件、自定义事件(可被其它蓝图调用)。

Function 函数

可复用的逻辑单元,有输入/输出引脚与局部变量;勾选 Pure 变成无执行引脚的“取值节点”,勾选 Call In Editor 可直接在细节面板点按钮执行。

Macro 宏

内联展开的节点组,可以做流程控制(ForLoop 本身就是宏)。与函数的区别:宏能共享外部变量、支持多执行引脚,但不会被复用为单份代码。

Event Dispatcher 事件分发器

蓝图版的“订阅-通知”机制:一个蓝图发出事件,多个蓝图订阅响应。适合“门开了 → 灯亮 + 播放音效 + 计分”这类一对多通知。

Blueprint Interface 接口

定义一组函数契约,任何蓝图都能实现。好处:不需要 Cast 到具体类型,就能对“所有可交互物体”发消息。

Timeline 时间轴

蓝图内的时间曲线:给定时长与曲线,输出 0→1 的插值。做门开合、平台升降、颜色渐变最方便,比手写 Lerp + Tick 更稳。

常用流程控制节点作用
Branch条件分支(if/else)
Sequence把执行流拆成 0、1、2… 多条,按顺序执行
Do Once / FlipFlop / Gate / MultiGate只执行一次 / 交替执行 / 开关闸门 / 循环多路分发
ForEachLoop / While / ForLoop遍历数组、映射或循环计数
Delay / Retriggerable Delay延时执行(注意:基于 Tick,游戏暂停时也会受影响)
Set Timer by Event / by Function定时器:可重复、可暂停、可清除,比 Delay 更可控
Select根据索引/枚举值选择输出
Switch on Int / String / Enum多分支选择,枚举分支最推荐

7.7 蓝图之间怎么“说话”(通信)

方式做法什么时候用
直接引用把对象拖进图表,直接读它的变量、调它的函数两者关系固定、生命周期一致(如角色 → 相机)
Cast To把传入的 Actor 转换成具体类型后访问成员不确定传进来的是什么,但知道期望类型
Blueprint Interface调用者只需知道接口函数,不需要知道对方类型“所有可交互物体”“所有可受伤目标”
Event Dispatcher发布-订阅:一对多通知一个事件要触发多个系统
GameMode / GameState / GameInstance用全局对象做“中转站”存共享状态分数、关卡进度、跨关卡数据
Get All Actors Of Class按类查询场景中所有对象快速原型;正式项目慎用(性能与耦合)
选择顺序建议:能用接口就别用 Cast,能用事件分发就别用“每帧去查”。判据很简单——对方需要“知道你是谁”吗?如果不需要,就用接口或事件。

7.8 调试与优化

蓝图调试器
官方截图:Blueprint Debugger——暂停在断点处可以看到每个引脚的当前值;配合执行追踪(Execution Trace)能看清“到底走了哪条路”。

六种调试手段

① Compiler Results:编译报错与警告;② 断点(节点上按 F9):暂停并检查引脚值; ③ Watch Value:把某个变量固定在蓝图里实时显示;④ Print String:最土但最快的打点; ⑤ Draw Debug 系列:画线、画球、画箭头看射线与范围;⑥ Simulate(模拟运行):不接管控制权地跑逻辑,边跑边看。

性能三条铁律

① 别在 Tick 里做重活:改用定时器(Set Timer by Event)或事件驱动; ② 别每帧 Cast / 查询:把引用缓存在变量里,用 Is Valid 判断; ③ 数组遍历要注意规模:几千次循环每帧跑一次,就是卡顿的来源。

命名规范(强烈建议从第一天就用): BP_ 蓝图类 · WBP_ 控件蓝图 · ABP_ 动画蓝图 · E_ 枚举 · ST_ 结构体 · M_ 材质 · MI_ 材质实例 · NS_ Niagara 系统 · T_ 贴图 · SM_ 静态网格体 · SK_ 骨骼网格体 · AM_ 动画蒙太奇 · AS_ 动画序列。 目录按功能分(Blueprints/、Art/、Audio/、Maps/),别让所有资产躺在根目录。

🧪 动手练习(30 分钟)

  1. 做一个会亮的灯

    新建蓝图类(父类 Actor),加 StaticMesh(圆柱体)+ PointLight + Box Collision,当玩家进入碰撞盒时把灯的颜色改成红色,离开时改回白色。

  2. 加入“可交互”接口

    新建 Blueprint Interface,添加函数 Interact;让灯实现它;在关卡蓝图里按 E 键(用增强输入)调用面前的 Actor 的 Interact——体会“不需要 Cast”的写法。

  3. 用变量做数据驱动

    给灯加一个 LightColor 向量变量并勾选 Instance Editable,在关卡里摆三盏灯分别设成不同颜色。

  4. 用时间轴做渐亮

    用 Timeline 让亮度在 0.5 秒内从 0 过渡到 5000,替换掉原来的瞬间切换。

  5. 故意调一次 bug

    在 Interact 里打一个断点,运行游戏按 E,观察调试器停在断点并检查引脚值。

✅ 检查清单

官方原文:Overview of Blueprints Visual Scripting · Blueprint Variables · Blueprint Communications · Level Blueprint

08

动画与动作系统:从动画序列到动画蓝图

角色怎么动起来、怎么在走/跑/跳之间自然切换、怎么播一次性动作(挥刀、受击)——这一节是角色表现的核心。

动画序列 · 动画蓝图 · 状态机混合空间 · 蒙太奇 · IK官方:Skeletal Mesh Animation System

8.1 先搞懂这几个名词

名词含义
Skeletal Mesh
骨骼网格体
可以变形的模型(角色、生物),由骨骼驱动。
Skeleton
骨架
骨骼层级本身,是多个骨骼网格体与动画共享的“骨架标准”。这就是为什么换模型不换动画。
Bone / Socket
骨骼 / 插槽
骨骼是骨架节点;插槽是挂在骨骼上的命名点(例如 hand_r 上的武器插槽)。
Animation Sequence
动画序列
一段关键帧动画资产(走、跑、跳…)。
Animation Blueprint
动画蓝图
根据游戏状态“实时决定播放什么、怎么混合”的逻辑蓝图。
Anim Montage
动画蒙太奇
把动画序列做成带分段、可被代码触发的“动作”,例如攻击、交互、受击。
Physics Asset
物理资产
给角色加的碰撞体(布娃娃、受击反馈)。
Persona
动画编辑器集合
打开骨骼网格体/动画/动画蓝图时的编辑器统称。

8.2 动画序列(Animation Sequence)

动画序列编辑器
官方截图:动画序列编辑器(Animation Sequence Editor)——左侧骨骼树、中间视口、下方时间轴与曲线区、右侧细节面板。

界面构成

视口:预览动画,可切换显示骨骼、网格体、仅骨骼;骨骼树:选择骨骼并查看层级; 时间轴:关键帧、通知轨道、曲线轨道;细节:动画资产属性(帧率、长度、压缩、Additive 设置等);Asset Browser:直接切换到同骨架的其它动画。

导入动画的正确姿势

导入 FBX 时,Skeleton 要选择已有的骨架(而不是新建),并勾选 Import Animations;否则每次导入都会生成新骨架,导致动画无法共用。 官方还提醒:如果导出时结束帧带小数(例如 30.7),可能产生导入误差,建议在 DCC 里对齐整帧。

关键帧与插值

关键帧之间的插值方式会影响手感:Linear 生硬但精确,Cubic/自动 更平滑。可以只对某根骨骼做手动调整,再按 Add Key 记录。

压缩(Compression)

动画体积来自压缩设置。项目里可创建 Bone Compression Settings 与 Curve Compression Settings 资产,按角色类型统一管理精度——但要注意,精度过高会显著增大包体。

Additive 与 Root Motion

Additive 动画是“在原姿势上叠加偏移”(例如呼吸、受伤抖动);Root Motion 让动画本身驱动位移(例如翻滚、攀爬),需要在动画与角色移动组件里都打开。

录制动画

编辑器里可以直接 Record:把在关卡/动画蓝图里发生的动画录成新的动画序列。官方也支持在 Control Rig 里改完姿势后 Bake 成新的动画序列。

8.3 动画通知(Animation Notifies)

动画通知与通知轨道
官方截图:动画通知(Animation Notifies)——在时间轴上放置通知点或通知区间,用来在动画播放到某一刻触发游戏逻辑。
  • Notify(点):在某一帧触发一次。用于“脚步声”“生成特效”“伤害判定”。
  • Notify State(区间):在某段区间内持续生效。用于“武器碰撞体开启窗口”“无敌帧”“拖尾特效”。
  • 内置类型:粒子通知、音效通知、布料通知、Camera Shake 等;也可以写自定义 Notify 类,在动画蓝图里接收并处理。
  • 实践建议:把“表现”放在通知里(音效、特效、镜头抖动),把“规则”放在蓝图/代码里,两者用同一个动作触发点衔接。

8.4 动画蓝图(Animation Blueprint):两张图

动画蓝图是角色动画的大脑。它有两块图表,分工非常清晰:

Event Graph(事件图表)

和普通蓝图一样写逻辑:读取角色速度、是否在空中、是否在瞄准,把结果写进变量。常用事件是 Blueprint Update Animation(每帧或按需更新)。

Anim Graph(动画图表)

负责“算出最终姿势(Pose)”:把动画序列、状态机、混合节点连起来,最后接到 Output Pose。这里不写普通逻辑,只做动画运算。

动画蓝图编辑器
官方截图:动画蓝图编辑器(Animation Blueprint Editor)——工具栏、My Blueprint、Anim Preview Editor(预览参数)与图表区域。
动画蓝图事件图表
Event Graph:在这里读取角色状态(速度、是否落地)并写入变量,供 Anim Graph 使用。
动画蓝图动画图表
Anim Graph:把状态机 / 混合空间 / 序列连接成姿势流,最终输出到 Output Pose。
创建与挂载:内容浏览器右键 → Animation → Animation Blueprint,选择目标骨架;然后在角色的 SkeletalMeshComponent 细节面板里把 Anim Class 设为这个动画蓝图。做完这两步,角色才会按你的逻辑动。

8.5 状态机(State Machine):动画的“主干道”

动画状态机
官方截图:状态机(State Machines)——状态(State)之间通过转换规则(Transition)连接,每条转换可设置混合时长与优先级。
元素作用
State 状态一个动画状态(Idle / Walk / Run / Jump…),内部可以放单个序列、混合空间或另一套子图表
Transition 转换状态之间的连线,需要写“布尔条件”(在转换规则图里)与混合时长(Blend Duration)
Entry / 入口状态机的起点,指向初始状态
Conduit 管道可复用的“条件中转站”,多个转换共用同一套判断
State Alias 状态别名把一组状态打包命名,简化转换连线(比如“所有地面状态”)
State 事件进入/离开状态时触发(On Entered / On Left),可播放音效或重置参数
先做最简单的版本:Idle ⇄ Walk ⇄ Run ⇄ Jump 四态就够学明白机制。等你能让角色在四个状态间平滑切换,再考虑加瞄准、下落、受击、死亡等分支——一开始就画 20 个状态,几乎必然失败。

8.6 混合空间(Blend Space):把“速度”变成动画

混合空间
官方截图:混合空间(Blend Spaces)——把多个动画样本放在坐标轴上,按输入值实时混合出中间姿势。
混合空间编辑器
混合空间编辑器:2D 混合可同时用速度与前向/横向两个轴,做“走跑+左右移动”的八向移动。
概念说明
1D / 2D1D 用一个轴(通常是速度)在走/跑之间混合;2D 用两个轴做方向性混合
Axis Settings 轴设置给轴命名并设范围,例如 Speed 0–600、Direction -180–180
Sample 样本轴上的一个个动画(放到坐标点上的动画序列)
Triangulation 三角剖分决定样本之间的插值方式(None / Tangential / Radial),影响过渡手感
Smoothing / Damping平滑时间与阻尼,避免输入抖动导致动画抽搐
Aim Offset混合空间的特例:用鼠标/瞄准方向做上下左右偏移
在动画蓝图里用它:把混合空间节点拖进状态或 Anim Graph,并把角色的 速度(Size of Velocity) 与 方向 接进去——这就是第三人称模板里默认的做法,打开模板的 ABP 对照看一遍,胜过读十页文档。

8.7 动画蒙太奇(Anim Montage):一次性动作的标准做法

动画蒙太奇
官方截图:动画蒙太奇(Animation Montage)——把序列按 Section 分段,可循环、可跳转,并由蓝图/代码触发播放。
编辑与使用动画蒙太奇
编辑与使用:从内容浏览器新建蒙太奇(或从已有序列创建),在时间轴上分段、加通知,然后在蓝图里用 Play Anim Montage 播放。
概念说明
Section 分段把蒙太奇切成“起手 / 循环 / 收招”等段,可设置下一段(Next Section)与循环
Slot 插槽蒙太奇进入动画蓝图的“入口”。动画蓝图里用 Slot 节点(如 DefaultSlot)接收蒙太奇,实现“上半身播放攻击、下半身继续跑”
Slot Group插槽分组,用于管理多个插槽的优先级
Notify蒙太奇上的通知,用来在动作的某一刻造成伤害、生成特效
Child Montage子蒙太奇:继承父蒙太奇的分段结构,只替换其中某段动画(例如同一套攻击动作换不同武器)
播放方式蓝图节点 Play Anim Montage(角色)、Montage Play(动画实例);停止用 Stop Anim Montage
90% 的“蒙太奇没反应”都是这三个原因:① 动画蓝图里没有 Slot 节点(或 Slot 名与蒙太奇不一致); ② 没有把动画蓝图正确设为角色的 Anim Class;③ 蒙太奇创建时选错了骨架(Skeleton)。

8.8 重定向与骨骼控制:IK Rig / Control Rig

Control Rig 编辑器
官方截图:Control Rig 编辑器——为角色搭建一套可控的“控制器”,可以手 K 动画、做程序化姿势调整,也能在 Sequencer 里驱动。

IK Rig 与 IK Retargeter

不同角色的骨架不同(Mixamo 的骨骼与 UE5 小人的骨骼结构不一样),IK Retargeter 可以把一套动画重定向到另一个角色上。 流程:为源角色建 IK Rig → 为目标角色建 IK Rig → 新建 IK Retargeter 指定两者 → 导出重定向后的动画。

Control Rig

程序化的骨骼控制:可以给角色加一套控制器(FK/IK、极向量、样条),用于手 K 动画、做姿势修正、或者做“脚部贴合斜坡”这类动态效果。 Control Rig 可以在动画蓝图里运行(Post Process 阶段),也可以在 Sequencer 里直接 K 帧。

Full Body IK / IK 求解器

UE5 提供了一套开箱可用的 IK 求解器(肢体、脊柱、样条等),配合 Control Rig 使用;官方文档里每个求解器都有独立参考页。

常见组合

手部 IK 贴合武器握把、脚部 IK 贴合不平地面、看向目标的头部 IK、上半身朝向镜头(Aim Offset)。这些都能在动画蓝图的 Anim Graph 里叠加在基础动画之上。

8.9 Sequencer:做关卡动画与过场

Sequencer 编辑器
官方截图:Sequencer 编辑器——与动画的时间轴不同,它编排的是关卡里所有对象:Actor 的变换、骨骼动画、相机、音频、特效、材质参数。
  • 常见轨道:Transform(位移旋转)、Skeletal Animation(角色动画)、Camera Cuts(多机位切换)、Audio、Event(触发蓝图事件)、Material Parameter(驱动材质)。
  • 关键帧操作:选中轨道按 Enter 打帧;曲线编辑器可精细调整缓动;支持自动打帧(Auto Key)。
  • 相机与镜头:用 Cine Camera Actor 拍摄,Camera Cuts 轨道做镜头切换,可设置焦距、光圈、景深。
  • 输出成片:用 Movie Render Queue(Movie Render Pipeline 插件)离线渲染高质量序列帧或视频,比录屏质量高得多。
  • 在游戏里播放:用蓝图节点播放 Level Sequence,或作为过场切入;也可以用 Sequencer 驱动游戏内动画(例如开门镜头)。

8.10 快速上手工作流(推荐顺序)

  1. 先用模板自带的角色

    第三人称模板已经配好了动画蓝图、状态机与混合空间。先打开 ABP_Manny 对照阅读,比从零写快十倍。

  2. 导入外部动画(例如 Mixamo)

    下载 FBX(不带皮肤更轻)→ 导入时选择目标 Skeleton → 若骨架不同,用 IK Retargeter 重定向到 UE5 骨架。

  3. 做第一段混合空间

    用 Idle/Walk/Run 三个样本建 1D 混合空间,在动画蓝图里接上速度,让角色跑起来自然过渡。

  4. 加一个动作蒙太奇

    做一个“挥手/攻击”,在动画蓝图里加 DefaultSlot 节点,蓝图里用 Play Anim Montage 触发。

  5. 加上通知与表现

    在蒙太奇的出手帧加 Notify,触发 Niagara 特效与音效——动画、特效、音效三者第一次合体。

✅ 检查清单

官方原文:Skeletal Mesh Animation System · Animation Sequences · Animation Blueprints · State Machines · Blend Spaces · Animation Montage

09

材质系统:材质编辑器、节点与地形材质

材质决定“东西看起来是什么做的”。这一节从编辑器界面讲到节点用法,再给你五套可以直接照抄思路的材质,最后讲地形分层材质。

材质编辑器 · 节点 · 参数 · 实例材质函数 · 分层材质 · 后处理材质官方:Material Editor User Guide

👇 本节内置节点速查库:在下面输入框里敲英文节点名或中文(多关键词用空格分隔,例如 cast to、延迟、trace),立刻看到该节点的作用、输入输出与常见坑。可检索引擎全部材质表达式(393 条),其中 149 条附中文讲解。

9.1 先建立材质的概念地图

UE 的材质是实时计算的程序,不是一张贴图。你连的节点最终会被编译成着色器(Shader),在 GPU 上跑。

概念说明
Material 材质一套节点逻辑,最终编译成着色器。改一次影响所有使用它的对象。
Material Instance 材质实例继承某个材质(父材质),只允许改被暴露出来的参数,不用重新编译。做变体的标准方式。
Dynamic Material Instance 动态实例运行时用蓝图创建并修改参数的实例,用于“受击变红”“血量越低越暗”等玩法驱动效果。
Material Function 材质函数把一串节点封装成可复用的“函数”,团队协作与复用的关键。
Material Parameter Collection全局参数集合:一次修改,全场景材质同步(例如全局风力、受击强度、时间)。
Shading Model 着色模型Default Lit(默认)、Unlit(无光照)、Subsurface(次表面)、Two Sided Foliage(双面植被)、Single Layer Water 等。
Blend Mode 混合模式Opaque(不透明)、Masked(遮罩,有硬边)、Translucent(半透明)、Additive(叠加发光)、Modulate。

9.2 材质编辑器的各个组成部分

材质编辑器界面总览
官方截图:材质编辑器的核心区域——预览视口、Details 细节面板(Material Domain、Blend Mode 等材质属性),以及图表里连到主材质节点的参数(Base Color / Metallic / Roughness)。各区域的完整说明见下表。
区域作用关键点
菜单栏 / 工具栏Apply(应用)、Save、Live Update(改节点即时预览)、Clean Graph(自动整理连线)、Hide Unrelated(隐藏无关节点)、Preview State、Stats、Platform Stats、HLSL CodeLive Update 打开后改参数能立刻在预览里看到效果,调试神器
预览视口(Viewport)实时预览材质:可换预览网格体(球/立方/平面/圆柱/自定义静态网格体)、切换视角、光照与显示模式做金属、布料、植被时换成对应形状看效果更准
图表面板(Graph)连节点的地方:右键搜索、拖拽连线、框选对齐、注释框分组图越乱越要早分组;Clean Graph 可以自动排版
Palette 节点面板按分类浏览所有可用的材质表达式与材质函数,支持搜索与过滤找不到节点时先搜 Palette,再考虑自定义 HLSL
Details 细节面板两套内容:选中节点时改节点属性(数值、参数名、分组);未选节点时改材质本身的属性(Blend Mode、Shading Model、Two Sided、Usage 等)参数命名与分组都在这里做
Stats / Platform Stats显示该材质的指令数、纹理采样数、着色器复杂度,可按平台查看看着 Stats 做材质,是“能优化的材质”和“会拖垮项目的材质”的分水岭
HLSL Code查看该材质编译出的 HLSL 代码排查“为什么这个节点这么贵”时的终极手段
材质节点面板的分类
Palette 节点面板:材质表达式与材质函数按类别组织(Category 可选 All / Blending / Color / Coordinates / Depth…),配合搜索框与过滤按钮快速定位。
放置材质表达式
放置节点:从 Palette 拖出表达式(图中是四个常用表达式),或直接在图表里右键搜索添加。
连接材质表达式
连接节点:把表达式连到主材质节点的输入引脚上。注意引脚的颜色代表数据类型(绿=标量,黄=向量,红=贴图……),类型不匹配会连不上。
主材质节点
主材质节点(Main Material Node):材质的输出终点,所有输入都汇总到这里。

9.3 主材质节点的输入引脚(背下来这一张表)

材质输入引脚
官方截图:材质输入引脚——图中 Metallic / Roughness 参数直接连到主节点对应的输入上。理解每个引脚“吃什么数据”,是学会做材质的关键。
引脚含义怎么调
Base Color基础颜色(不含光照的固有色)贴图或 Constant3Vector;注意贴图需为 sRGB
Metallic金属度(0=非金属,1=金属)标量或灰度贴图;非金属不要让中间值乱跑
Specular高光强度(仅非金属有效)默认 0.5;湿滑可到 0.6–0.8
Roughness粗糙度(0=镜面,1=全漫反射)最影响质感的一个参数,先调它再调颜色
Emissive Color自发光(不受光照影响)做发光条、屏幕、熔岩、能量效果
Normal法线(表面凹凸细节)法线贴图的 TextureSample 要设为 Normal 类型(否则必须取消 sRGB)
Ambient Occlusion环境光遮蔽(仅对屏幕空间 AO 生效)多数情况可留空,由 Lumen/AO 计算
Opacity / Opacity Mask不透明度 / 遮罩Translucent 用 Opacity,Masked 用 Opacity Mask
World Position Offset顶点位置偏移(顶点动画)做风吹草动、水面起伏、飘动布料
Pixel Depth Offset像素深度偏移做贴合地形的贴花、软边缘过渡
Displacement置换(需要开启 Tessellation 支持时使用)地形/岩石的大起伏,成本高

9.4 节点(Material Expressions)速查

数学类材质表达式
数学类:Add/Multiply/Lerp/Clamp/Saturate/Power/Step/SmoothStep… 官方对每个节点都给了图示与效果对比。
坐标类材质表达式
坐标类:TexCoord、WorldPosition、ObjectPosition、VertexNormalWS、ScreenPosition、ActorPosition… 用于把几何信息接进材质。
分组常用节点用途
常量 / 参数Constant、Constant2/3/4Vector、ScalarParameter、VectorParameter、TextureSampleParameter2D、StaticSwitchParameter固定的颜色/数值;带 Parameter 前缀的可以被材质实例覆盖
纹理采样TextureSample、TextureObject、TextureCoordinate、Panner、Rotator、TextureSampleParameterSubUV贴图与 UV 动画(水流、传送带、序列帧)
坐标 / 几何TexCoord、WorldPosition、ObjectPosition、ActorPosition、VertexNormalWS、PixelNormalWS、VertexColor、ScreenPosition、LightmapUV、ObjectRadius基于位置做渐变、三平面投影、顶点色的遮罩
数学运算Add、Subtract、Multiply、Divide、Lerp、Clamp、Saturate、OneMinus、Power、Abs、Floor、Ceil、Frac、Fmod、Min、Max、Round、Truncate、Dot、Cross、Normalize、Step、SmoothStep、If所有“按条件改变外观”的逻辑都在这里
颜色 / 混合Desaturation、HueShift、Contrast、Blend_Overlay、Blend_SoftLight、MakeFloat3、BreakOutFloat3Components调色、贴图混合、通道拆分
效果 / 氛围Fresnel、Noise、Voronoi、Sine/Cosine、Time、BumpOffset、ParallaxOcclusionMapping、DepthFade、CameraDepthFade、SceneDepth、SceneColor、Refraction边缘光、水面、烟雾、软相交、折射
工具 / 高级MaterialFunctionCall、Custom(写 HLSL)、MakeMaterialAttributes、BreakMaterialAttributes、QualitySwitch、FeatureLevelSwitch、VertexInterpolator封装复用、按平台降级、把数据从顶点传到像素
地形专用LandscapeLayerBlend、LandscapeLayerSample、LandscapeLayerCoords、LandscapeLayerWeight、LandscapeVisibilityMask见 9.8 地形材质

9.5 五套可以直接照做的材质(连法 + 为什么)

① 磨砂金属(最基础的 PBR 练习)

Constant3Vector(基色, 深灰) ──► Base Color
ScalarParameter("Roughness"=0.35) ──► Roughness
ScalarParameter("Metallic"=1.0)  ──► Metallic
Noise(缩放 2,级别 2) ──► Multiply(× 0.3) ──► Add(+0.2) ──► Roughness  ← 用噪波打断"完美反射"

为什么:真实金属表面永远不是均匀的。用噪波轻微扰动粗糙度,立刻从“塑料感”变成“有使用痕迹的金属”。把 Roughness / Metallic 做成 ScalarParameter,后面就能用材质实例批量出“不锈钢 / 锈铁 / 拉丝铝”三个变体。

② 发光脉冲能量条

Time ──► Multiply(× Speed 参数) ──► Sine ──► Multiply(× 0.5) ──► Add(+0.5)   // 得到 0~1 的呼吸值
上面结果 ──► Multiply(× 强度参数) ──► Multiply(× VectorParameter(颜色)) ──► Emissive Color

为什么:Sine 输出 -1~1,先乘 0.5 再加 0.5 变成 0~1,才能安全地当倍率用——这是 UE 里最好用的一条“归一化”套路。做霓虹灯、护盾、血量条发光都是这一套。

③ 水面 / 冰面(半透明 + 法线动画)

TextureSample(法线贴图, 设为 Normal) ──► Panner(SpeedX=0.02, SpeedY=0.01) ──► Normal
Fresnel(Exponent=5) ──► Lerp(A=浅色, B=深色) ──► Base Color        // 边缘更亮,像真实水面
ScalarParameter("Roughness"=0.05) ──► Roughness
<材质设置: Blend Mode = Translucent, Shading Model = Default Lit>
Opacity: DepthFade(FadeDistance=20)  ← 让水与岸线接触处柔和淡出,避免硬边

为什么:Fresnel 在“正对镜头处为 0、掠射角处为 1”,正好对应水面越斜越亮的物理现象;Panner 让法线缓慢流动产生波光;DepthFade 解决半透明与实体相交的“硬切边”。

④ 风吹草动(顶点动画,World Position Offset)

WorldPosition ──► ComponentMask(B) ──► Multiply(× 0.5)   // 用高度做相位,越高摆动越大
Time ──► Multiply(× WindSpeed) ──► Add(上面结果) ──► Sine
上面结果 ──► Multiply(× VertexNormalWS) ──► Multiply(× WindStrength) ──► World Position Offset
<若模型带顶点色: VertexColor(R) ──► Multiply 到最终强度上,用来标记"只让叶片动、根不动">

为什么:顶点动画全部发生在 World Position Offset 引脚上,不消耗 CPU(相比骨骼动画便宜得多),是做植被、旗帜、水草的标准手段。用高度或顶点色做遮罩,才能“根部不动、梢部摆得厉害”。

⑤ 边缘柔化 / 距离淡出(雾、软相交、受击反馈)

CameraDepthFade(FadeLength=200) ──► Multiply(× VectorParameter(雾色)) ──► Emissive / Base Color
DepthFade(FadeDistance=50) ──► Opacity      // 半透明物体与其它物体相交处淡出

为什么:DepthFade / CameraDepthFade 读的是深度缓冲,能让“硬穿过”的体积效果(雾、烟、光柱、水)看起来有厚薄层次。这是从“贴图感”进入“电影感”的分界线。

练习方法:不要一次学十个节点。每套材质只学 3–4 个新节点,做完立刻把参数暴露成 ScalarParameter / VectorParameter 并用材质实例验证——这样你既学会节点,也学会“做给别人用”的材质。

9.6 参数化与实例:让美术不用碰节点图

材质实例编辑器
官方截图:材质实例编辑器(Material Instance Editor)——左边预览、中间父材质信息、右边只列出可覆盖的参数。
带参数分组的材质实例
参数分组:把参数按 Group / Sort Priority 归类后,材质实例面板会分组显示——参数一多,没有分组的实例面板会让人崩溃。
做法步骤用在哪
ScalarParameter / VectorParameter选中节点 → 细节面板勾选 Use Parameter(或右键 Convert to Parameter)→ 命名粗糙度、金属度、颜色、强度
TextureSampleParameter2D把 TextureSample 转成参数化,可在实例里一键换贴图同一材质多套贴图(不同墙面、不同衣着)
StaticSwitchParameter布尔参数,切换分支;会重新编译着色器,实例间不能随意切换开关某个效果(是否显示细节法线)
Material Instance内容浏览器右键材质 → Create Material Instance;勾选要覆盖的参数项目里所有材质变体的标准做法
Dynamic Material Instance蓝图:Create Dynamic Material Instance → 用 Set Scalar/Vector/Texture Parameter Value 改值受击变红、开门变色、血量驱动外观
Material Parameter Collection新建资产定义全局参数,材质里用 CollectionParameter 读取全局风力、昼夜时间、受击强度等跨材质共享参数

9.7 材质函数与分层材质

材质函数调用节点
Material Function Call:把常用节点串封装成材质函数后,在图里就是一个节点,可跨材质复用。
材质函数内部
函数内部:本质还是一张节点图,但拥有独立输入/输出;勾选 Expose to Library 与设置 Category / Description,团队里才找得到它。
分层材质图
分层材质(Layered Material):用 Make/Break Material Attributes 把不同层的法线、粗糙度、颜色分别混合,做旧化、积雪、污渍时非常有用。
什么时候该做材质函数?当你发现自己在两个以上材质里复制同一段节点时。典型例子:三平面投影、去饱和、法线混合、UV 平铺修正。官方内容里 Engine/Content/Functions 已经带了大量现成函数(Blend_Overlay、CheapContrast、BreakOutFloat2Components 等),先学会用官方函数,再学造函数。

9.8 地形材质(Landscape Material):多层权重混合

地形材质和普通材质的最大区别是:它要在一整片地形上按绘制权重混合多层材质(草地、泥土、岩石、雪……)。核心节点只有几个:

LandscapeLayerBlend 节点
LandscapeLayerBlend:地形材质的心脏。每个 Layer 有名字、混合类型与预览权重。
Layer Blend 图层数组
Layers 数组:在细节面板里添加图层(Add Element),每个元素对应地形上可绘制的一层。
Layer Blend 属性
图层属性:Layer Name(必须与地形 Layer Info 名字一致)、Blend Type(LB Alpha Blend / LB Height Blend / LB Weight Blend)、Preview Weight。
Landscape Layer Coords 节点
LandscapeLayerCoords:为每层生成独立的 UV 映射(可设缩放、旋转、平移),避免所有图层共用同一套 UV 导致的平铺感。

地形材质的标准搭法(五步)

  1. 创建材质并勾选 Use Material Attributes

    在材质细节面板里勾选 Use Material Attributes,主节点会变成一个 Material Attributes 引脚——这是分层材质的前提。

  2. 为每层做一个材质函数

    官方推荐把“草地层”“岩石层”各自封装成一个材质函数(输出 Make Material Attributes:BaseColor / Roughness / Normal 等),这样主图才不至于爆炸。

  3. 在地形材质里添加 LandscapeLayerBlend

    添加图层元素,名字要与后面在地形里创建的 Layer Info 完全一致(例如 Grass、Rock、Snow)。混合类型选 LB Alpha Blend 最常用;需要按高度自然过渡时用 LB Height Blend,并给每层设置 Height 输入。

  4. 把结果接到 Material Attributes

    LayerBlend 的输出 → Make/Break Material Attributes → 主节点。若需要“挖洞”(洞穴、地道),用 LandscapeVisibilityMask 接到 Opacity Mask,并把材质 Blend Mode 设为 Masked。

  5. 在地形模式里创建 Layer Info 并绘制

    Landscape 模式 → Paint → 在 Layers 里 + 新建 Layer Info(选择 Weight-Blended Layer (normal),非权重混合层会与其它层互斥,新手容易踩坑)→ 选笔刷与权重开始刷。

地形绘制模式
官方截图:Landscape 的 Paint(绘制)模式——左侧选图层、笔刷与工具(含坡度/高度筛选),右侧是工具参数。
地形材质的性能红线:每一层都要采样贴图(法线/粗糙度/基色可能各一张)。移动端建议 ≤ 4 层、桌面端不要轻易超过 8 层;能用 Runtime Virtual Texture(RVT) 把多层混合“烘焙”成一张运行时贴图时,优先用 RVT;远处地形用低精度版本(Landscape LOD)配合材质的 QualitySwitch 降级。
官方明确指出的一个坑:Height Blend 需要每层提供高度图,且当层的混合权重接近 0 时,高度图的采样仍然发生——层数一多,开销会明显上升。所以“能做 3 层就别做 6 层”。

9.9 后处理材质(Post Process Material)

后处理材质的正确设置
官方截图:后处理材质在图表中的工作方式(图中为读取已渲染画面后的可视化调试)。记得把 Material Domain 设为 Post Process,并用 Blendable Location 决定它在渲染管线的哪一步生效。
  • 创建方式:新建材质 → 细节面板把 Material Domain 改为 Post Process → 用 SceneTexture 节点读取已渲染画面 → 处理后接到 Emissive Color。
  • Blendable Location:After Tonemapping(调色/暗角)、Before Tonemapping(需要 HDR 数据时)、Before Translucency(影响半透明之前)、SSR Input。选错位置会导致颜色“看起来不对”。
  • 怎么生效:把后处理材质作为元素加到 Post Process Volume 的 Post Process Materials 数组里,或用蓝图/Sequencer 动态加载(受击红屏、中毒滤镜、慢动作色调)。
  • 常见效果:暗角、胶片颗粒、色差、描边、像素化、黑白化、扫描线、水波扭曲。
  • 性能:全屏后处理对每个像素都要跑一遍,采样次数要克制;移动端慎用全屏后处理。

✅ 检查清单

官方原文:Material Editor User Guide · Material Editor UI · Material Instances · Landscape Materials · Post Process Materials

10

地形与大世界:Landscape、地形材质与植被

开放世界的第一步是把“地”做出来。这一节讲 Landscape 工具、地形材质(上一节讲了节点,这里讲完整流程)与植被系统。

Landscape 模式 · 雕刻/绘制/管理Layer Info · Foliage官方:Landscape Overview

10.1 什么时候用地形,什么时候用网格体

用地形(Landscape)

大范围起伏地面、需要雕刻与刷多层材质、需要自动 LOD 与高效绘制。适合户外场景、开放世界、山区。

用静态网格体

室内、精确造型、需要硬边结构(走廊、房间、楼梯)。也可以用“网格体 + 建模模式”拼出地形感。

10.2 创建地形:先想清楚分辨率

地形工具的三种模式
官方截图:Landscape 模式的三个标签页——Manage(创建与管理组件)、Sculpt(雕刻)、Paint(绘制材质层)。
参数含义新手建议
Section Size每个地形小节的四边形数量(分辨率的基本单位)先用默认(63×63)
Sections Per Component每个组件包含多少小节默认 1×1 或 2×2
Number of Components组件数量(决定整体规模)练习用 8×8 就足够大,别一上来开 32×32
Overall Resolution最终分辨率(上面几项相乘的结果)数值越大细节越多、显存与构建时间越夸张
Material创建时就要指定地形材质先做一个只有一层的基础材质,之后随时能换
Location / Scale地形的位置与缩放建议保持 Scale = 1,非均匀缩放会让绘制与碰撞出现奇怪问题

10.3 雕刻与绘制:Sculpt / Paint / Manage

地形雕刻模式
Sculpt 雕刻:笔刷工具包含 Sculpt(抬高/压低)、Smooth(平滑)、Flatten(压平)、Ramp(斜坡)、Erosion / Hydro Erosion(侵蚀)、Noise(噪波)、Visibility(挖洞)。
地形管理模式
Manage 管理:增删组件、修改组件分辨率、调整 LOD 分布、Copy 工具(复制一块地形到另一处)。地形“越做越大”时都在这里操作。
编辑地形
地形效果:用 Landscape 工具雕刻出的山体与起伏(官方配图)。各工具的用途与参数见官方 Editing Landscapes 页面。
雕刻的顺序建议:先用 Flatten 定出可玩区域的大平台,再用 Sculpt 做起伏,用 Erosion 加自然感,最后用 Smooth 收拾棱角。反过来做(先堆细节)最后一定会推翻重来。

10.4 地形材质完整流程(复习 + 落地)

  1. 准备贴图

    每层至少需要:BaseColor(sRGB)、Normal(非 sRGB)、Roughness(线性灰度)。命名规范 T_Rock_BaseColor 这样一眼能看出用途。

  2. 做材质函数

    把“一层材质”的逻辑(贴图采样 + UV 缩放参数 + 法线强度)封装成材质函数,输出 Material Attributes。

  3. 搭主地形材质

    勾选 Use Material Attributes → 加 LandscapeLayerBlend → 添加层(Grass / Rock / Dirt / Snow)→ 每层接一个材质函数 → 输出到主节点。

  4. 创建 Layer Info

    把材质赋给地形 → 进入 Paint 模式 → 在 Layers 里新建 Weight-Blended Layer (normal) 的 Layer Info(保存在内容浏览器里,命名与材质层名一致)。

  5. 绘制与检查

    用笔刷与权重绘制多层;打开 Stats 看材质复杂度,必要时减少层数或降低贴图尺寸。

10.5 植被系统(Foliage)

植被模式
官方截图:Foliage 模式——在模式下拉里选择 Foliage,进入植被绘制界面。
植被工具与参数
植被工具:选择/绘制/擦除/取样/填充/Lasso 等工具,配合笔刷尺寸、密度、缩放范围、对齐法线等参数。
要点说明
Foliage Type每种植被一个资产(静态网格体 + 密度/缩放/随机旋转/对齐法线等规则)
Density / Radius密度与半径决定“一刷一大片”的效果;配合 Reapply 可以改完参数重刷
Cull Distance超出距离不渲染,是植被性能的第一道闸门
Align to Normal让草顺着坡面生长(配合绘制到地形上)
Nanite FoliageUE5 支持把植被也用 Nanite 渲染,从而大幅提升可承载的植被密度(需要项目开启 Nanite 并注意材质与 WPO 的兼容)
Foliage vs PCGFoliage 适合“手刷一片”;需要按规则大规模生成(森林、城市)时用 PCG(见第 12 章),两者可以并存
性能开关可扩展性设置里的 foliage.DensityScale 能让玩家一键降低植被密度

✅ 检查清单

官方原文:Landscape Overview · Editing Landscapes · Landscape Material Expressions · Foliage Mode

11

Niagara 特效:从系统、发射器到渲染器

Niagara 是 UE5 的视觉特效系统。它不是“播放一段动画”,而是用规则实时模拟粒子——所以风、火、烟、水花才能对场景做出反应。

System / Emitter / Module渲染器 · 事件 · 性能官方:Creating Visual Effects in Niagara

👇 本节内置节点速查库:在下面输入框里敲英文节点名或中文(多关键词用空格分隔,例如 cast to、延迟、trace),立刻看到该节点的作用、输入输出与常见坑。可检索引擎全部 Niagara 模块(359 条),其中 101 条附中文讲解。

11.1 四个核心概念

Niagara 系统总览
官方截图:内容浏览器里的 Niagara 资产类型——Niagara Emitter(发射器)、Function Script、Module Script、Parameter Collection 等。一个 System 里可以包含多个 Emitter(“篝火”= 火焰 + 火星 + 烟雾)。
Niagara 关键概念
效果示例:Niagara 能做出的视觉表现(粒子 + 发光 + 网格体渲染的组合)。
概念含义类比
System 系统最终放进关卡的东西(NS_ 前缀资产),由一个或多个发射器组成整场烟花表演
Emitter 发射器负责生成与更新一类粒子,自带完整堆栈与参数其中一支烟花
Module 模块堆栈里的一段行为(重力、速度、颜色随生命周期变化…)“向上飞”“炸开”“下落”
Parameter 参数可被外部覆盖的数值/颜色/向量;有 System、Emitter、Particle、User 等命名空间调节开关与强度
Renderer 渲染器决定粒子长什么样:Sprite(面片)、Mesh(网格体)、Ribbon(拖尾)、Light(发光)、Decal、Component火星用 Sprite、碎片用 Mesh
CPU / GPU 模拟CPU 模拟支持更多逻辑(如碰撞回调、事件),GPU 能跑几十万粒子但功能受限少量精细用 CPU,海量用 GPU
和旧系统 Cascade 的关系:Cascade 是 UE4 时代的特效系统,UE5 里仍然存在(官方提供 Cascade To Niagara Converter 插件做迁移),但新项目一律用 Niagara。网上老教程如果是 Cascade 界面,请直接跳过。

11.2 执行堆栈:特效的“时间线”

Niagara 的发射器是一摞分组(Group),每个分组里有若干模块。理解这个顺序,就理解了特效是怎么被算出来的:

分组何时执行典型模块
System Spawn系统创建时一次系统级初始化、设置 System 参数
System Update系统每帧系统级计时、按条件停止整个系统
Emitter Spawn发射器创建时一次Emitter State(生命周期:Once / Infinite / Multiple)、发射器初始化
Emitter Update发射器每帧Spawn Rate(持续发射速率)、Spawn Burst Instantaneous(瞬间爆发)、Emitter State 控制
Particle Spawn每个粒子诞生时一次Initialize Particle(生命周期、颜色、大小)、Shape Location(从什么形状生成)、Initial Velocity、Add Velocity
Particle Update每个粒子每帧Gravity Force、Drag、Scale Color、Color over Life、Solve Forces and Velocity、Collision、Sub UV Animation
Render绘制阶段Sprite / Mesh / Ribbon / Light Renderer 及其材质
Event Handler收到事件时碰撞事件、死亡事件、生成子发射器
Emitter Spawn 分组
效果示例:同一个 Niagara 系统在不同场景里的表现(紫色能量、室内电弧)。系统能复用,靠的就是参数可以按场景覆盖。
Emitter Update 分组
Emitter Update:每帧执行,Spawn Rate 与 Spawn Burst 就在这里——控制“每秒喷多少”和“一次爆多少个”。

11.3 事件与事件处理器

Niagara 事件与事件处理器
官方截图:发射器的模块堆栈与参数面板(左),以及对应的粒子效果(右)。事件(Events)让发射器之间“联动”:粒子死亡时生成碎片、碰撞时产生火花或音效。
  • 事件类型:Collision(碰撞)、Death(死亡)、Location(位置事件)、Custom(自定义)。
  • 事件处理器:挂在另一个发射器上,收到事件后执行模块(例如“撞击地面 → 生成一圈涟漪”)。
  • 限制:GPU 模拟对事件支持有限,需要事件时往往要用 CPU 模拟或 GPU 事件支持方案。

11.4 实战:从零做一个火花特效(官方示例思路)

火花特效
官方截图:Sparks 火花特效示例——官方从空白发射器开始,一步步加模块,最后得到成品。
  1. 重命名发射器并命名系统

    把默认发射器改成有意义的名字(如 Sparks),System 命名成 NS_Sparks 并保存到项目目录。规范命名是特效能被复用的前提。

  2. 配置发射节奏

    Emitter Update → Spawn Rate 设为 50(每秒 50 个);需要“一次性爆发”时改用 Spawn Burst Instantaneous。

  3. 设置生成形状与初速度

    Particle Spawn → Shape Location 选 Sphere(半径 5),Initial Velocity 给一个向外的速度范围,让火花从一点炸开。

  4. 加物理感

    Particle Update → Gravity Force(Z = -980 的下落)、Drag(空气阻力 0.5),让火花飞出后减速并下坠。

  5. 加视觉变化

    Scale Color / Color over Life 让粒子从亮橙渐变到暗红并淡出;Scale over Life 让粒子越来越小;需要闪烁就用 Sprite Facing + 材质里的发光颜色曲线。

  6. 渲染器与材质

    Sprite Renderer 指定一个 Unlit + Additive 的材质(发光效果必须用叠加混合,否则会变成白色方块)。

  7. 收尾与验证

    给粒子设置合理生命周期(0.5–1.5 秒),把系统拖进关卡看实际效果,再用 Debug HUD 检查粒子数量。

11.5 在关卡与蓝图里使用特效

方式做法适用场景
Niagara Component给 Actor 加 Niagara 组件,指定 System;可勾选 Auto Activate常驻特效:火炬、熔炉、角色特效挂点
Spawn System at Location蓝图节点:在指定位置生成特效,可传参(颜色、大小、速度)一次性特效:命中、爆炸、拾取反馈
Spawn System Attached把特效挂到某个组件/骨骼插槽上并跟随武器拖尾、角色身上的持续特效
Set Niagara Variable在生成前/后覆盖 User 参数,实现“同一个特效不同颜色”元素伤害颜色、难度系数、随机变化
Deactivate / Destroy停止发射或立即销毁,避免特效残留技能取消、角色死亡时的收尾
参数打通的关键:在 Niagara 里把参数设为 User 参数(User. 前缀),它才会出现在蓝图的 Set Niagara Variable 列表里。这就是“特效师做效果、程序传数据”的接口。

11.6 性能与调试

Niagara 调试与优化
官方截图:Debugging and Optimization——Niagara 的调试工具与优化手段(固定边界、模拟目标选择、显著性/LOD、可扩展性)。

四条性能要点

① 给系统设置 Fixed Bounds(固定边界),否则引擎无法正确剔除; ② 能 GPU 就 GPU(海量粒子),需要逻辑/事件才用 CPU; ③ 用 Significance / Scalability 让远处或低画质下的特效自动降级; ④ 控制 Overdraw(半透明叠加层数)——大片半透明火焰比几十万粒子更致命。

调试手段

Niagara 编辑器里的 Debug HUD、Debug Draw(显示粒子边界/速度矢量)、Simulation Target(CPU/GPU 切换验证)、System Simulation Stats(粒子数量与耗时)。 在关卡里按 ` 也能用 stat Niagara 之类命令查看开销。

✅ 检查清单

官方原文:Creating Visual Effects in Niagara · Niagara Editor UI · Debugging and Optimization · Sparks Effect

12

PCG、MetaHuman 与常用插件

引擎的“生产力外挂”:用规则生成整个世界(PCG)、用数字人快速做出角色(MetaHuman),以及一堆值得知道的内置工具。

PCG 程序化生成MetaHuman 数字人插件启用与管理

12.1 先学会管理插件

启用步骤:菜单 Edit → Plugins 打开插件窗口 → 在搜索框输入插件名(例如 PCG、Water、Modeling Tools)→ 勾选右侧的 Enabled → 按提示重启编辑器。很多功能“找不到”,只是插件没启用。

在插件窗口启用插件
官方截图:启用插件后,编辑器顶部的模式与工具栏会出现对应入口(图中为 Tools Editor Mode 及其版本标记)。启用步骤见上方文字。
建模模式的工具栏与面板
官方截图:启用 Modeling Tools 插件后,模式下拉里会出现 Modeling 模式,左侧是模式工具栏、右侧是建模面板。
三条插件纪律:① 只装当前项目真正用得到的插件——插件越多,启动越慢、升级越容易出问题; ② 装插件前先备份项目(尤其是会改资产类型的插件);③ 打包前确认插件在 Shipping 配置下也兼容(有些插件只在编辑器里可用)。

12.2 PCG:用规则生成世界

PCG(Procedural Content Generation Framework)是 UE5 的程序化内容生成框架。它的价值在于把“手摆一千棵树”变成“写一条规则,让引擎自己摆一千棵”。

PCG 图表编辑器
官方截图:PCG Graph Editor——和材质/蓝图一样的节点图,输入是点云与属性,输出是实际的网格体实例。
PCG 图表数据流
数据流:Sampler 产生点 → Filter 筛选点 → Transform 修改点(位置/旋转/缩放)→ Spawner 把点变成真正的对象。
PCG 节点面板
节点面板:PCG 的节点按 输入 / 采样 / 过滤 / 变换 / 生成 / 属性 分类,常用节点不到二十个,先掌握核心几类即可。
PCG 表面采样器
Surface Sampler:在地形或网格体表面生成点云,是绝大多数 PCG 图的第一步。
节点类别代表节点作用
采样 / 输入Surface Sampler、Spline Sampler、Volume Sampler、Get Landscape、Points from Mesh决定“在哪里生成点”
过滤Density Filter、Attribute Filter、Difference、Intersection、Point Filter决定“哪些点留下”(坡度、高度、密度、属性)
变换Transform Points、Rotate Points、Projection、Offset决定“点上的对象怎么摆”(贴地、随机旋转、对齐法线)
生成Static Mesh Spawner、Spawn Actor、Create Target Actor、Copy Points把点变成看得见的对象
属性 / 数学Attribute Selector、Attribute Math、Attribute Noise、Point Neighborhood用属性做逻辑(按高度变色、按密度排除)
组织Subgraph、Graph Parameters、Loop、Branch把大图拆成可复用的小图

PCG 上手流程(官方式步骤)

  1. 新建 PCG Graph

    内容浏览器右键 → PCG → PCG Graph,双击打开图表编辑器。

  2. 添加采样与生成节点

    典型链路:Get Landscape / Surface Sampler → Density Filter → Transform Points → Static Mesh Spawner(在 Spawner 的 Mesh Entries 里指定要生成的树/石头)。

  3. 放进关卡

    方式一:新建 PCG Volume(体积框定生成范围);方式二:给任意 Actor 添加 PCG Component,把 Graph 指过去。

  4. 点 Generate 并调参

    在 PCG 组件的细节面板点 Generate;调整密度、缩放范围、随机种子,观察视口里的变化(可勾选 Debug 显示点云与边界)。

  5. 整理与复用

    把“生成森林”的图做成 Subgraph 或带 Graph Parameters 的模板,之后换一张地形也能直接复用。

PCG 组件
PCG Component:挂在 Actor 上的组件,指定 Graph 后点 Generate 即可生成,是 PCG 与关卡交互的接口。
PCG 森林体积
生成结果:用 PCG 在指定范围内按规则散布出的树木(官方示例)。体积(PCG Volume)只负责框定范围,决定“长什么样”的是 Graph 里的节点。
地形上的点云
点云可视化:打开 Debug 后能看到采样出来的点——调试 PCG 最重要的一步就是“先看点对不对,再看生成对不对”。
PCG 生成的高级森林
官方示例:Advanced PCG Forest——用 PCG 生成的森林,包含多层植被、随机化与地形贴合。
PCG 与 Foliage 怎么分工:手工精修的一小片用 Foliage;大面积、要按规则分布、要能一键重算的用 PCG。官方还提供了 PCG Biome Core 插件,把“生态区(Biome)”的常见需求(地形分层、植被分布、密度控制)做成了现成模板,做开放世界值得直接研究。

12.3 MetaHuman:快速获得高质量数字人

MetaHuman 角色放进关卡
把 MetaHuman 放进关卡:从内容浏览器把 MetaHuman 蓝图拖进场景,它会自带胶囊碰撞与移动组件——本质上就是一个高级角色蓝图。
MetaHuman 蓝图组件层级
组件层级:MetaHuman 把身体与脸部拆成多个子组件(Body:Torso / Legs / Feet;Face:Hair / Eyebrows / Fuzz / Eyelashes / Mustache / Beard…),并带 LODSync 组件统一各部分的 LOD 切换。
环节做法说明
获取在 MetaHuman / Fab 上创建或下载 MetaHuman 资产,加入项目官方提供 Creator 与示例资产,可免费用于项目
在项目里使用把 MetaHuman 蓝图拖进关卡,或让它替换现有角色的骨骼网格体它本质是带骨骼网格体 + 组件的高级蓝图
动画用 UE5 自带动画(重定向到 MetaHuman 骨架)、或从外部库导入后重定向用 IK Retargeter 把通用动画定向到 MetaHuman
面部动画用 MetaHuman Animator(配合 Live Link Face 等设备)从视频生成面部动画做对话、影视级表情的高效方案
毛发(Groom)MetaHuman 的头发是 Groom 资产,可做艺术化调整毛发开销不小,注意 LOD 与剔除
性能用 LODSync 与项目设置里的 MetaHuman 质量档控制开销一个 MetaHuman 的成本明显高于普通角色,多人在场要谨慎
什么时候用 MetaHuman:需要“真人质感”的对话/剧情/演示、影视与虚拟制片、数字人直播。如果你做的是风格化游戏或性能敏感的手游,用普通角色模型往往更合适——MetaHuman 是“质量换成本”的方案。

12.4 常用工具与插件一览

名称用来做什么启用情况学习建议
Modeling Mode
建模模式
在引擎内直接建模/改模:布尔运算、挤出、三角化、LOD、UV需启用 Modeling Tools做原型与灰盒的利器,值得早学
Foliage手刷植被内置做场景必学
PCG程序化生成植被、建筑、道具布置需启用 PCG 插件开放世界/大地图必学
Niagara粒子特效内置(部分模块需插件)游戏表现必备
Chaos Destruction
破碎系统
可破坏物体、碎裂、场(Field)驱动内置做“打坏东西”的手感时再深入
Water
水体系统
河流、湖泊、海洋、浮力与水面渲染需启用 Water 插件做大世界水域时启用
Movie Render Queue离线高质量渲染(序列帧/视频),支持多通道输出需启用 Movie Render Pipeline做宣传片、影视化输出必学
Sequencer关卡动画与过场编排内置第 08 章已介绍
Live Link把外部设备(动捕、面捕、摄像机)实时接进引擎需启用 Live Link虚拟制片/直播方向
Datasmith导入 CAD / DCC 工程(建筑、工业可视化)需启用 Datasmith 导入器非游戏行业(建筑/制造)常用
Common UI跨平台的复杂 UI 框架(手柄/键鼠/触摸导航)需启用 Common UI做主机/多平台 UI 时考虑
Enhanced Input现代输入系统(第 07 章提到的 Input Action)默认启用新项目都用它
Gameplay Ability System(GAS)技能、Buff、冷却、属性数值框架需启用插件做 RPG/MOBA 类项目再学,门槛较高
Lumen / Nanite全局光照与虚拟几何体(不是插件,是渲染特性)项目设置里开关先理解代价,再决定是否开启
水体系统插件
Water 水体系统:官方 Water 插件提供河流/湖泊/海洋水体与相应的着色模型。
水体 Actor
Water Body Actors:水体由不同 Actor 组成(河流、湖泊、海洋),可调宽度、深度与流向。
Chaos 破坏系统
Chaos Destruction:把网格体切成碎块并模拟破碎,做“墙被打穿”“桥塌了”这类效果。
Movie Render Queue
Movie Render Queue:离线渲染高质量画面,支持超高分辨率、时间采样与多通道输出——录屏永远达不到它的质量。

12.5 什么时候学什么(避免贪多)

你的目标优先掌握可以晚点再碰
做一个小体量玩法游戏蓝图、动画蓝图与蒙太奇、材质基础、Niagara 基础、打包PCG、MetaHuman、GAS、水体
做开放世界/大地图地形与地形材质、Foliage、PCG、LOD 与性能、Nanite/Lumen 取舍MetaHuman、GAS
做影视/广告/虚拟制片Sequencer、Movie Render Queue、灯光与后处理、MetaHuman、Live LinkGAS、PCG(除非做大场景)
做对话/数字人MetaHuman、面部动画(MetaHuman Animator)、动画重定向、音频PCG、Chaos

✅ 检查清单

官方原文:Procedural Content Generation Overview · PCG Node Reference · MetaHumans in Unreal Engine · Modeling Mode · Water System · Chaos Destruction

13

性能优化:原理、剖析方法与实战技巧

优化不是“把画质调低”,而是先测量、再定位、后修改、必复测。这一章从帧预算原理讲到 CPU / GPU / 内存 / 加载四条战线的具体手段。

原理 · 工具 · 技巧 · 症状对照表覆盖 CPU / GPU / 内存 / 加载官方:Performance and Profiling

13.1 第一原则:优化 = 测量驱动的循环

新手最常见的错误是“凭感觉优化”——关掉阴影、砍掉植被、把画质调低,结果既没解决卡顿,画面还毁了。真正的流程只有四步:

① 测量 stat / Insights / GPU Visualizer ② 定位 是 CPU 还是 GPU?哪个系统? ③ 修改 只改一个变量 ④ 复测 用同一场景同一路径对比 没效果就回到第一步,不要一次改十处
图 13-1 优化的正确循环:一次只改一个变量,否则你永远不知道是哪一项起了作用。

13.2 原理:帧预算(Frame Budget)

所谓“流畅”,本质是每帧必须在规定时间内做完所有工作。60 FPS = 每帧 16.67 ms;30 FPS = 33.3 ms。这一帧里 CPU 与 GPU 各自有活干,谁先超支谁就是瓶颈。

60 FPS 的一帧 = 16.67 ms Game 逻辑(5.3ms) Draw 提交(3.2ms) GPU 渲染(5.9ms) 闲置余量 CPU 线程 GPU 渲染线程提交命令 → 与 GPU 并行 判断瓶颈:stat unit 里 Frame 时间 ≈ Game / Draw / GPU 中最长的那一项 Game 最长 → CPU 逻辑瓶颈 Draw 最长 → Draw Call / 剔除 GPU 最长 → 着色 / 分辨率 / 阴影
图 13-2 一帧的三个主要开销来源。优化前先用 stat unit 判断谁最长——这一步能省掉 80% 的无效尝试。
为什么要先分 CPU / GPU:因为两边的手段完全不同。CPU 瓶颈靠“少做事”(合并、缓存、降频、下沉 C++),GPU 瓶颈靠“少画像素”(合批、剔除、降分辨率、简化着色器)。改错方向等于白干。

13.3 工具全景:什么时候用哪个

工具怎么看用来回答什么问题
stat fps / stat unit游戏内控制台命令现在多少帧?瓶颈在 Game、Draw 还是 GPU?
stat game / stat scenerendering / stat physics / stat anim / stat particles / stat Niagara / stat AI控制台分类统计是哪一类系统吃掉了时间
Unreal Insights启动时加 -trace=cpu,frame,bookmark,再用 Insights 打开 .utrace逐帧、逐线程、逐调用栈地看时间去哪了(最强大的 CPU 分析工具)
Session Frontend → Profiler编辑器内 Window → Developer Tools → Session Frontend抓一段区间做统计排名(按函数、按资产)
GPU Visualizer控制台 ProfileGPU 或 Ctrl+Shift+,GPU 各阶段耗时:Base Pass、阴影、半透明、后处理
Shader Complexity / Quad Overdraw视口 View Mode材质逐像素开销与过度绘制(移动端最重要)
RenderDoc抓帧工具(独立软件)逐个 Draw Call 级别排查渲染问题
Memory Insights / LLM / stat memory控制台与 Insights 的 Memory 轨道内存去哪了?纹理/网格体/蓝图各占多少
Asset Audit / Size Map右键文件夹 → Asset Audit;或 Size Map 视图哪些资产最占包体与内存(优化包体第一步)
Unreal Insights → LoadingInsights 的 Loading 轨道加载慢在哪:哪个包、哪个资源、多久
stat startfile / stopfile控制台 + Session Frontend 打开录制性能数据供离线分析
黄金组合:stat unit 定位瓶颈类型 → Unreal Insights 定位到具体系统与函数 → 改完再用同一段录制的 trace 对比。没有前后对比数据的“优化”都是猜测。

13.4 CPU 优化技巧

方向具体做法收益
减少每帧工作关掉用不到的 Tick(Set Actor Tick Enabled / Tick Interval / bCanEverTick=false);用定时器或事件替代轮询;用 Tick Group 分散到不同帧★★★★★ 最常见也最有效
蓝图 → C++把每帧执行、被大量实例调用的逻辑下沉到 C++;蓝图只做内容与调参★★★★
缓存引用不要在 Tick 里 Cast、Get All Actors Of Class、Get Player Character——在 BeginPlay 里存成变量并判 Is Valid★★★★
对象数量用 Instanced Static Mesh / HISM 合并同类静态物体;避免上万个独立 Actor★★★★ 同时救 CPU 与 Draw Call
生成与销毁高频生成的物体(子弹、特效、掉落物)用对象池复用,避免反复 Spawn/Destroy★★★
动画开启 URO(Update Rate Optimization)、动画 LOD、压缩设置、减少每帧 Notify;远处角色降更新率★★★★
AIBehavior Tree 的服务/任务间隔放大;降低 NavMesh 重建频率;用 Significance Manager 管理远处 AI 的更新频率★★★
物理关掉不必要的 Simulate Physics;用简单碰撞体(球/盒)替代复杂凸包;碰撞复杂度设 Project Default;减少子步进与破坏碎块数★★★
多线程异步加载(Async Load Asset)、异步射线(Async Line Trace)、Anim 多线程、Task Graph 并行★★★
GC 与分配避免每帧创建大量 UObject;减少临时 TArray 拷贝;注意 NewObject 的频率★★
// 典型反面例子:每帧查所有敌人
void AMyActor::Tick(float DeltaTime)
{
    for (AActor* A : GetAllActorsOfClass(AEnemy::StaticClass()))   // 每帧遍历全场景!
        if (A->GetDistanceTo(this) < 500.f) DoSomething(A);
}

// 改进:缓存 + 定时器 + 事件驱动
void AMyActor::BeginPlay()
{
    Super::BeginPlay();
    CachedEnemies = /* 生成时登记 / 或用碰撞体触发收集 */;
    GetWorldTimerManager().SetTimer(CheckTimer, this, &AMyActor::CheckEnemies, 0.25f, true);  // 4 次/秒
}
void AMyActor::CheckEnemies()  // 逻辑不变,但频率从 60 次/秒降到 4 次/秒
{
    for (AActor* A : CachedEnemies) { /* ... */ }
}

13.5 GPU 优化技巧

① 降 Draw Call(合批)

合并静态网格体、用 ISM/HISM、减少材质数量与材质槽、把相似物件共用材质(实例化)、合并贴图到图集。
判断:stat scenerendering 看 Draw Calls 数量级。

② 降 Overdraw(半透明)

用视口 Quad Overdraw / Shader Complexity 查看;减少大面积半透明(雾、粒子、玻璃)、缩小粒子尺寸、用 Masked 替代 Translucent、限制粒子层数。

③ 降着色器复杂度

用 Stats 面板看材质指令数与采样数;把逐像素计算搬到顶点(Vertex Interpolator);用 QualitySwitch 做低配简化;减少纹理采样层数。

④ 阴影

限制动态阴影投射者数量、调小级联阴影距离、用虚拟阴影贴图(VSM)统一管理、远处物体关闭动态阴影或改用静态烘焙。

⑤ 光照(Lumen)

Lumen 质量档(Quality/Final Gather 等)、关闭不需要 Lumen 的场景(用静态光照 + 烘焙)、远处用低质量或关闭 GI、降低 Lumen 场景细节与卡距。

⑥ 分辨率与上采样

TSR / FSR / DLSS + Screen Percentage(如 67%)是移动与主机最有效的性能杠杆;Secondary Screen Percentage 影响半分辨率效果。

⑦ 后处理

Bloom、DOF、SSR、SSAO 都有成本;关掉用不到的效果、降低质量档、用 Post Process Volume 分区控制而不是全局全开。

⑧ 纹理与流送

控制最大尺寸(一般 ≤2048)、生成 Mip、选择正确压缩格式(DXT/BC、Alpha 用 BC7)、开启纹理流送并调池大小、能用 Virtual Texture 就用。

⑨ Nanite / 虚拟几何体

Nanite 能极大降低几何绘制成本,但对半透明、WPO 顶点动画、Masked 材质有额外开销;植被开启 Nanite 前先测。

⑩ 剔除与 LOD

距离剔除(Cull Distance Volume)、LOD、Precomputed Visibility、Occlusion Culling;远处物件用 Impostor/低模。

最容易踩的“越优化越糟”三件事:① 用 Translucent 做本该用 Masked 的叶片,导致 Overdraw 爆炸;② 给每个物件单独做材质,Draw Call 直接翻几倍;③ 关掉 Mip 或把贴图设成 No Mipmaps,显存与带宽双爆。

13.6 内存与加载优化

问题手段
内存占用高用 Asset Audit / Size Map 找出大资产;降低贴图尺寸与压缩格式;合并小网格体;清理未使用资产;注意蓝图类数量与重复引用
显存(VRAM)爆纹理流送池大小(Texture Streaming Pool)、降低最大尺寸、关闭不必要的高分辨率贴图、注意 RVT 与 Lumen 的显存占用
进场景卡顿用异步加载与软引用替代硬引用;用 Level Streaming / World Partition 分块加载;把大场景拆成子关卡
首次打开慢这是 DDC(派生数据缓存)在生成,属正常;后续启动会快。发布版用 Pak 打包 + 预烘焙,不受 DDC 影响
包体过大检查 Saved/Cooked 报告;移除未使用资产;压缩贴图与音频;用 Pak 分块(Chunk)按需下载;Consider 用 IoStore
加载抖动用加载界面、异步流送、预加载关键资源(Async Load Asset + 进度条)

13.7 可扩展性(Scalability):一次配置,适配所有机器

  • Scalability Settings:在 Project Settings → Rendering 里为 Low/Medium/High/Epic 四档配置阴影、GI、反射、后处理、植被密度等参数。
  • Device Profiles:按设备(机型/平台)覆盖默认画质档,避免在低端机上跑 Epic 档。
  • GameUserSettings:暴露给玩家的画质选项(分辨率、帧率上限、画质档),并用 ApplySettings 保存。
  • Niagara Scability / Significance:让远处特效自动降粒子数。植被也有 foliage.DensityScale 这类全局缩放开关。

13.8 症状 → 排查 → 修复 对照表(实战速查)

症状先看什么常见原因修复方向
整体帧率低,stat unit 里 Game 最长Unreal Insights 的 GameThread 轨道Tick 过多、蓝图每帧 Cast、遍历大数组、AI/物理开销关 Tick、改定时器、缓存引用、下沉 C++(13.4)
Draw 最长stat scenerendering 看 Draw Call物件数量多、材质多、没有合批ISM/HISM 合并、共用材质、LOD/剔除(13.5①)
GPU 最长ProfileGPU / GPU Visualizer分辨率高、半透明多、阴影/光照成本高上采样+ScreenPercentage、降 Overdraw、调 Lumen 档(13.5②⑤⑥)
移动端发热掉帧Shader Complexity / Quad Overdraw材质的 Overdraw 与指令数超标简化材质、Vertex Interpolator、QualitySwitch 降档
偶发卡顿(一卡一卡)Insights 找长帧(Hitch)GC、同步加载、Shader 编译、大对象生成对象池、异步加载、预编译 PSO、分批生成
进游戏加载很久Insights 的 Loading 轨道硬引用太多、资源太大、同步流送关卡软引用+异步、Level Streaming、减小贴图(13.6)
包体过大Cook 报告 / Size Map未使用资产、贴图/音频未压缩、编辑器内容被打包清理资产、压缩、排除编辑器内容、Pak 分块

🧪 动手练习(30 分钟)

  1. 先建立基线

    打开你的关卡,用 stat unit 记录 Frame / Game / Draw / GPU 四个数字,截图保存。

  2. 抓一份 Insights 数据

    用 -trace=cpu,frame 启动项目,跑动 15 秒,用 Insights 打开 trace,找出耗时最高的前 5 个函数。

  3. 只改一处并复测

    选一个方向(例如关掉场景里所有装饰物的 Tick),再次记录四个数字,对比差异。

  4. 用 ProfileGPU 找 GPU 大头

    执行 ProfileGPU,看看是阴影、BasePass 还是半透明最贵,再决定动谁。

  5. 做一次画质档对比

    用 sg.ViewDistanceQuality 1 之类的可扩展性命令切档,观察帧率变化——这就是最终要给玩家的选项。

✅ 检查清单

官方原文:Performance and Profiling · Unreal Insights · Scalability and Device Profiles

14

UE C++:把工程能力补上

蓝图能做出完整游戏,但当逻辑变复杂、性能要求变高、需要被大量复用时,C++ 才是最终答案。这一章讲清 UFUNCTION / UPROPERTY 说明符、生命周期、输入、委托、调试与常见编译坑。

反射宏 · 说明符速查生命周期 · 输入 · 委托 · 调试官方:Programming with C++

14.1 先明确分工:什么时候写 C++

C++ 负责:框架与性能 · 被大量实例调用的高频逻辑(Tick、伤害计算) · 数据与规则(属性、技能、存档结构) · 需要与第三方库/平台 SDK 交互的部分 · 复杂算法与容器操作 · 网络同步的服务端权威逻辑 特点:编译慢、门槛高、性能与可维护性最好 蓝图负责:内容与迭代 · 关卡与玩法拼装、数值调参 · UI 逻辑、动画状态切换 · 一次性/低频的逻辑与表现 · 美术与策划直接参与的部分 · 原型验证(先蓝图跑通,再决定是否下沉) 特点:改完即生效、无需编译、但大型逻辑易失控
图 14-1 推荐分工:C++ 定框架,蓝图做内容。C++ 类通过 BlueprintReadWrite / BlueprintCallable 把能力暴露给蓝图,蓝图继承它来做具体变体。
最实用的策略:先用蓝图把玩法做通,再回头把“每帧都跑、实例很多、逻辑很长”的那部分搬进 C++。引擎官方也是这么建议的——不要一开始就用 C++ 从零写一切。

14.2 环境与工程结构

Visual Studio 准备

安装时勾选 “使用 C++ 的游戏开发”工作负载(含桌面向导 C++ 与 Unreal Engine 安装程序组件)。首次生成工程文件:右键 .uproject → Generate Visual Studio project files。

两种迭代方式

关闭编辑器编译(最稳,改头文件必须用它);Live Coding(Ctrl+Alt+F11,改 .cpp 快速热加载,改结构/头文件时可靠性下降)。

目录结构

Source/<项目名>/Public 与 Private 分开放头文件与实现;<项目名>.Build.cs 声明依赖模块;<项目名>.Target.cs 声明构建目标。

模块与 API 宏

每个模块导出符号要带 PROJECTNAME_API(引擎模块是 ENGINE_API),否则跨模块链接会报 unresolved external。

// MyGame.Build.cs —— 需要用到的模块写进依赖列表,否则 include 会报找不到
PublicDependencyModuleNames.AddRange(new string[] {
    "Core", "CoreUObject", "Engine", "InputCore",
    "EnhancedInput",        // 增强输入
    "UMG",                  // UI
    "Niagara",              // 特效
    "AIModule", "GameplayTasks", "NavigationSystem"   // AI
});

14.3 反射与命名:UE C++ 的“潜规则”

UE C++ 不是标准 C++:它有一套反射系统(Unreal Header Tool,UHT)在编译前扫描头文件里的宏,生成额外的胶水代码。这决定了三件事:

  • 类、结构体、枚举、函数、属性要加宏(UCLASS/USTRUCT/UENUM/UFUNCTION/UPROPERTY)才能被引擎、编辑器与蓝图识别;
  • 带 U 前缀的对象由垃圾回收管理,用 UPROPERTY() 持有的引用会被 GC 视为“仍在使用”;
  • 命名前缀是硬约定:U=UObject 子类、A=Actor 子类、F=普通结构体、E=枚举、I=接口、T=模板。
NewObject / Spawn 构造 / OnConstruction BeginPlay Tick(每帧) EndPlay GC 回收 UObject 由 GC 管理:没有 UPROPERTY 引用链指向它,就会被回收 Actor 需要显式 Destroy;普通 UObject 交给 GC
图 14-2 对象生命周期。记不住顺序没关系,记住一件事就够:用 UPROPERTY() 保存引用,否则随时可能被 GC 回收导致崩溃。

14.4 UPROPERTY 说明符速查(属性暴露给编辑器与蓝图)

说明符作用典型写法
EditAnywhere可在编辑器与实例上编辑UPROPERTY(EditAnywhere)
VisibleAnywhere只读显示(不能改)用在组件指针上最安全
EditDefaultsOnly只能改类默认值,实例不可改配置类参数
EditInstanceOnly只能改实例,不能改默认值关卡专属设置
BlueprintReadWrite蓝图可读可写UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Stats")
BlueprintReadOnly蓝图只读(保护数据)血量、状态等不希望被随意改的值
Category在细节面板里的分组名Category="Combat|Damage"
meta=(ClampMin/ClampMax/UIMin/UIMax)数值范围限制(编辑器侧)meta=(ClampMin="0", ClampMax="100")
meta=(AllowPrivateAccess="true")允许私有属性在蓝图访问配合 private: 使用
Transient不序列化(运行时临时数据)缓存引用
SaveGame纳入存档序列化进度相关数据
Replicated / ReplicatedUsing网络复制(可绑定回调)多人游戏必备
Config从 ini 读取(可写回)UPROPERTY(Config) 全局设置

14.5 UFUNCTION 说明符速查(函数暴露给蓝图与网络)

说明符作用备注
BlueprintCallable蓝图里可调用(有执行引脚)最常用
BlueprintPure纯函数(无执行引脚,可有返回值)取值类函数用它,蓝图会自动连线
BlueprintImplementableEvent在 C++ 声明、由蓝图实现只声明不实现(C++ 不能有函数体)
BlueprintNativeEventC++ 提供默认实现,蓝图可覆盖实现函数名要加 _Implementation
Category蓝图右键菜单里的分类写清分类,别人才能找到
meta=(DisplayName)节点显示名(可与函数名不同)让节点更易读
meta=(CompactNodeTitle)紧凑标题(常用于运算符类节点)例如 "+"
meta=(Keywords)搜索关键词提高在节点搜索里的命中率
meta=(WorldContext)指定世界上下文参数库函数里常用
Server / Client / NetMulticast网络执行位置配合 Reliable / Unreliable
Exec可在控制台直接调用调试命令
// 头文件:MyHealthComponent.h
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class MYGAME_API UMyHealthComponent : public UActorComponent
{
    GENERATED_BODY()
public:
    UMyHealthComponent();

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Health", meta=(ClampMin="0", ClampMax="1000"))
    float MaxHealth = 100.f;

    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Health")
    float CurrentHealth = 100.f;

    UFUNCTION(BlueprintCallable, Category="Health")
    void ApplyDamage(float Amount);

    // C++ 想读、蓝图想响应:用 BlueprintNativeEvent 给蓝图留钩子
    UFUNCTION(BlueprintNativeEvent, Category="Health")
    void OnDeath();
    virtual void OnDeath_Implementation();

    // 委托:血量变化通知(蓝图可 Bind)
    UPROPERTY(BlueprintAssignable, Category="Health")
    FOnHealthChanged OnHealthChanged;
};

14.6 生命周期与常用可重写函数

函数时机用来做什么
构造函数对象构建时(编辑器里也会跑)创建组件、设默认值;不要在这里访问世界或做游戏逻辑
PostInitializeComponents()组件初始化完成后需要访问其它组件的初始化
BeginPlay()游戏开始/生成时一次绑定事件、初始化运行时数据、添加输入映射
Tick(float DeltaSeconds)每帧高频逻辑;记得在构造函数里控制是否开启 Tick
EndPlay()销毁或结束播放解绑、清理定时器、存档
Destroyed()被销毁时通知系统、掉落物品
SetupPlayerInputComponent()Pawn 被控制时绑定增强输入(见 14.7)
GetLifetimeReplicatedProps()复制系统注册时声明哪些属性参与网络复制
OnConstruction()构造脚本等价物在编辑器里摆放时就执行的逻辑

14.7 增强输入(Enhanced Input)的 C++ 写法

// MyCharacter.h
UCLASS()
class MYGAME_API AMyCharacter : public ACharacter
{
    GENERATED_BODY()
public:
    AMyCharacter();
protected:
    virtual void BeginPlay() override;
    virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;

    UPROPERTY(EditAnywhere, Category="Input") TObjectPtr<UInputMappingContext> DefaultContext;
    UPROPERTY(EditAnywhere, Category="Input") TObjectPtr<UInputAction> MoveAction;
    UPROPERTY(EditAnywhere, Category="Input") TObjectPtr<UInputAction> LookAction;
    UPROPERTY(EditAnywhere, Category="Input") TObjectPtr<UInputAction> JumpAction;

    void Move(const FInputActionValue& Value);
    void Look(const FInputActionValue& Value);
};

// MyCharacter.cpp
void AMyCharacter::BeginPlay()
{
    Super::BeginPlay();
    if (APlayerController* PC = Cast<APlayerController>(GetController()))
        if (auto* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()))
            Subsystem->AddMappingContext(DefaultContext, 0);   // 优先级 0
}

void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
    Super::SetupPlayerInputComponent(PlayerInputComponent);
    if (UEnhancedInputComponent* EIC = Cast<UEnhancedInputComponent>(PlayerInputComponent))
    {
        EIC->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyCharacter::Move);
        EIC->BindAction(LookAction, ETriggerEvent::Triggered, this, &AMyCharacter::Look);
        EIC->BindAction(JumpAction, ETriggerEvent::Started,   this, &ACharacter::Jump);
        EIC->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
    }
}
为什么要用 Input Action 而不是旧的按键绑定:输入动作把“按键”和“意图”解耦——同一个 Action 可以被键盘、手柄、触屏分别映射;还能按上下文(走路/驾驶/UI)整体切换。UE5 模板全部使用增强输入。

14.8 委托(Delegates):C++ 侧的事件分发器

宏可用于说明
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam蓝图可绑定的多播委托配合 UPROPERTY(BlueprintAssignable),蓝图里能 Bind Event
DECLARE_MULTICAST_DELEGATE仅 C++ 的多播委托性能更好,不能暴露给蓝图
DECLARE_DELEGATE_OneParam单播委托一对一回调
DECLARE_DYNAMIC_DELEGATE蓝图可绑定的单播委托常用于异步加载回调
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnHealthChanged, float, NewHealth, float, Delta);

// 触发
OnHealthChanged.Broadcast(CurrentHealth, -Amount);

// C++ 侧监听
OnHealthChanged.AddDynamic(this, &AMyHUD::HandleHealthChanged);
// 蓝图侧:拖出组件 → Bind Event to OnHealthChanged

14.9 日志、断言与调试

// 1) 声明自定义日志分类(放在 .cpp 顶部或专用头文件)
DEFINE_LOG_CATEGORY_STATIC(LogMyGame, Log, All);

// 2) 三种常见用法
UE_LOG(LogMyGame, Log,   TEXT("Player %s spawned at %s"), *GetName(), *GetActorLocation().ToString());
UE_LOG(LogMyGame, Warning, TEXT("Health below zero: %f"), CurrentHealth);
UE_LOG(LogMyGame, Error,  TEXT("Missing component on %s"), *GetName());

// 3) 断言:check 会崩溃(用于“绝不该发生”),ensure 只报错并继续(可恢复)
check(MyComponent != nullptr);
if (!ensure(MaxHealth > 0.f)) { MaxHealth = 1.f; }

// 4) 屏幕调试(发布版自动消失)
if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 2.f, FColor::Green, TEXT("Debug"));

// 5) 画线/画球(需包含 DrawDebugHelpers.h)
DrawDebugSphere(GetWorld(), GetActorLocation(), 300.f, 16, FColor::Red, false, 2.f);
调试流程:VS 里 Debug → Attach to Process → UnrealEditor.exe 就能打断点单步;DebugGame 配置提供最好的调试体验;崩溃看 Saved/Crashes 里的调用栈,配合引擎调试符号更准。

14.10 网络复制要点(多人游戏,了解即可)

概念要点
Authority(权威)游戏逻辑判定放在服务端;客户端只做表现
Replicated 属性在 GetLifetimeReplicatedProps 里 DOREPLIFETIME 注册
RPCServer(客户端调用→服务端执行)、Client、NetMulticast;分 Reliable / Unreliable
角色判断HasAuthority() / IsLocallyControlled() / GetLocalRole()
移动同步CharacterMovement 自带复制;自定义移动需要自己处理预测与纠正

14.11 C++ 侧性能注意事项

  • 不要每帧调用 GetAllActorsOfClass、GetWorld()->LineTraceMulti 等重量级 API;缓存结果或用事件驱动。
  • 传引用而不是值:const FVector&、const TArray<T>& 避免拷贝;返回大对象用引用或移动语义。
  • FName 比较很快,但字符串转换(FString、ToString)很慢,别放进循环。
  • UPROPERTY 的指针是 GC 追踪点,也是访问间接层;高频访问的组件指针缓存成裸指针前先确认生命周期。
  • 虚函数与蓝图调用(UFunction 调用)比直接 C++ 调用慢一个量级,热路径上避免每帧大量蓝图互调。
  • 用 constexpr / static const 替代重复计算;用 Reserve() 预分配数组。

14.12 常见编译错误对照表

报错原因解决
Unresolved external symbol模块没加进 Build.cs 依赖,或缺少 API 宏补 PublicDependencyModuleNames;类上加 PROJECTNAME_API
Cannot open include file 'xxx.h'模块未依赖或路径不对Build.cs 加模块;用公共头路径
Generating code... / UHT 报错宏用法不对(如 UPROPERTY 用在非 UCLASS 里)检查宏位置、GENERATED_BODY()、结尾分号
Blueprint 里看不到新变量/函数没重新编译,或缺少 BlueprintReadWrite/BlueprintCallable完整编译一次;补说明符
Live Coding 失败 / 编辑器崩溃改了头文件或类结构关掉编辑器用 VS 完整编译
IntelliSense 报红但能编译VS 索引过期先编译一次,或重建数据库
链接错误刷屏中间文件损坏删掉 Binaries 与 Intermediate,重新生成工程文件

🧪 动手练习(60 分钟)

  1. 写一个自定义 ActorComponent

    做 UMyHealthComponent:含 MaxHealth、CurrentHealth、ApplyDamage 与一个 OnHealthChanged 委托,并在蓝图中挂到角色上、Bind 事件显示血量。

  2. 用 C++ 继承一个已有类

    新建 AMyPickup 继承 AActor,在构造函数里创建 UStaticMeshComponent 与 USphereComponent,重写 NotifyActorBeginOverlap 做拾取。

  3. 把蓝图逻辑下沉

    从第 07 章的“会亮的灯”里挑一段每帧逻辑,用 C++ 重写并暴露 BlueprintCallable,对比 stat game 的变化。

  4. 做一次真实调试

    在 ApplyDamage 里打断点,Attach 到编辑器进程,触发伤害并单步查看变量。

  5. 制造并修复一个编译错误

    故意删掉 Build.cs 里的模块依赖,观察报错,再补回来——这是最常遇到的问题。

✅ 检查清单

官方原文:Programming with C++ · UPROPERTY Specifiers · UFunctions · Gameplay Architecture

A5

附录 A5 · 节点速查库(引擎全量 17,000+ 条)

按“我想做什么”反查节点——比按字母顺序背节点表有用得多。

🔎 可搜索的完整节点库:共 17,000+ 条,覆盖蓝图节点、材质表达式与 Niagara 模块,数据来自 UE 5.8.1 引擎。支持中英文关键词、多关键词(空格分隔)、层级筛选(中文精选 / 核心 / 进阶)、类别与模块筛选;其中 554 条高频节点附中文名与常见用法讲解。进页面后自动加载,加载完成前可先用中文精选条目搜索。

蓝图:按意图查节点

我想……用这些节点
对象出现时做初始化Event BeginPlay → Set 变量 / Spawn Actor / Play Sound
每帧做点事(谨慎)Event Tick(配合 Delta Seconds 做与帧率无关的计算)
让东西慢慢变化Timeline、Lerp、Interp To、Set Timer by Event
判断条件Branch、Select、Switch on Enum / Int / String
遍历一堆东西ForEachLoop、ForEachLoopWithBreak、Array Length + Get
只执行一次 / 交替执行Do Once、FlipFlop、Gate、MultiGate
生成/销毁对象Spawn Actor from Class、Spawn Actor Deferred、Destroy Actor
检测前方有没有东西Line Trace By Channel、Sphere Trace、Multi Trace(画 Debug 线确认)
碰到东西时触发OnComponentBeginOverlap、OnHit、OnActorBeginOverlap
改材质外观Create Dynamic Material Instance → Set Scalar/Vector/Texture Parameter Value
播音效 / 特效Play Sound at Location、Spawn System at Location、Spawn System Attached
延时 / 定时Delay、Retriggerable Delay、Set Timer by Function Name、Clear and Invalidate Timer
跨对象通信Blueprint Interface 消息、Event Dispatcher(Call / Bind Event)、Cast To(谨慎)
读写数据Get/Set 变量、Map Find/Add、Data Table 的 Get Data Table Row
调试Print String、Draw Debug Line/Sphere、Breakpoint + Watch Value

材质:按效果查节点

想要的效果节点组合
贴图平铺多次TextureCoordinate × Multiply → TextureSample 的 UVs
贴图流动(水/传送带)Panner(或 Time × Add → TexCoord)
两张贴图混合Lerp(A/B 贴图,Alpha 用遮罩或高度)
颜色渐变/染色VectorParameter × TextureSample → Base Color
边缘发光(轮廓光)Fresnel → Multiply 发光色 → Emissive
闪烁 / 呼吸Time → Sine →(× 0.5 + 0.5)→ Multiply 强度
磨损 / 脏旧Noise(或贴图)→ Multiply/Add 扰动 Roughness、Lerp 换颜色
顶点摆动(草、旗)Time + WorldPosition → Sine → × VertexNormalWS → World Position Offset
软相交 / 边缘淡出DepthFade(半透明)或 CameraDepthFade(距离雾)
地形多层混合LandscapeLayerBlend + LandscapeLayerCoords + 每层材质函数
挖洞 / 消失LandscapeVisibilityMask 或参数 → Opacity Mask(Blend Mode 设 Masked)
全屏特效(受击红屏)Material Domain = Post Process + SceneTexture + Lerp → Emissive
三平面投影(免 UV)WorldPosition → 三个方向的 TextureSample → 用 VertexNormalWS 加权混合
调试可视化把要看的量直接接到 Emissive Color(例如 UV、法线、遮罩)

Niagara:按需求查模块

需求模块 / 设置
控制发射数量Emitter Update → Spawn Rate(持续)/ Spawn Burst Instantaneous(爆发)
控制发射器寿命Emitter Update → Emitter State(Once / Infinite / Multiple)
从某个形状生成Particle Spawn → Shape Location(Sphere / Box / Cylinder / Cone / Ring)
给初速度Particle Spawn → Add Velocity / Initial Velocity(可加 Cone 分布)
重力与阻力Particle Update → Gravity Force、Drag、Solve Forces and Velocity
颜色/大小随时间变化Particle Update → Color over Life、Scale Color、Scale over Life(曲线编辑)
让粒子乱一点Curl Noise Force、Vortex Force、Random Range(在参数里用随机)
碰撞Particle Update → Collision(CPU 精度更高;GPU 可用深度碰撞)
序列帧动画Renderer → Sub UV Animation + 序列图材质
拖尾 / 光束Ribbon Renderer + Ribbon Width / 材质
发光与照明Light Renderer / 材质用 Unlit + Additive
多个发射器联动Events(Death / Collision)+ Event Handler
外部控制参数把参数设为 User 参数 → 蓝图 Set Niagara Variable
性能控制Fixed Bounds、Significance / Scalability、CPU↔GPU 模拟切换
A7

组件速查库(引擎共 511 个)

节点是蓝图里能连的引脚,组件是挂到 Actor 上的功能模块——「让它动起来」「让它发光」都是加组件。

🧱 组件速查库:从 UE 5.8 引擎源码提取的 511 个组件,覆盖渲染、动画、物理、AI、音频、UI、XR 等;其中 50 个常用组件附中文讲解。支持按名称 / 分类 / 说明检索,可筛选分类与「是否可蓝图添加」。

最常用的 12 个组件:什么时候该加它

我想要……加这个组件
让物体出现在场景里Static Mesh(静态网格体)/ Skeletal Mesh(会动的角色)
让角色能被控制、走路跳跃Character Movement + Capsule(Character 类自带)
做第三人称相机Spring Arm → 挂 Camera(弹簧臂自动避障)
判定"玩家走进来了"Box / Sphere Collision,勾选 Generate Overlap Events
角色身上冒火/冒烟Niagara 组件,指定一个 Niagara 系统
血条 / 名字牌跟着角色Widget 组件(可设始终面向相机)
放背景音乐 / 脚步音效Audio 组件(3D 空间化)/ Ambient Sound(环境音)
子弹按抛物线飞Projectile Movement(速度 + 重力 + 反弹)
风扇 / 金币一直转Rotating Movement(不用写 Tick)
平台在两点间来回移动Interp To Movement,设好路点
弹孔 / 血迹 / 涂鸦Decal 组件(投影到表面,不改模型)
敌人会看见玩家、会追AIPerception + Behavior Tree + Blackboard
组件(Component)和节点(Node)有什么区别? 组件是挂在 Actor 上的东西——它有生命周期、能 Tick、能被复制,在「组件层级」面板里排列; 节点是蓝图图表里连线的单元——它没有实体,只是执行一段逻辑。 关系是:你用节点去操作组件(比如用 Set Actor Location 节点移动一个 Scene Component)。 所以查「怎么让角色动」看组件,查「怎么算这个值」看节点。
A6

附录 A6 · 中英术语对照表

看英文教程、查官方文档、逛论坛,都会用到这张表。界面上的名词基本都是英文,记住它们比翻译更实用。

英文中文说明
ActorActor / 可放置对象能被放进关卡的对象的统称
Component组件挂在 Actor 上的功能模块
Pawn / Character卒 / 角色可被控制的 Actor;Character 是带移动组件的 Pawn
Level / Map关卡 / 地图同一件事的两种叫法
Blueprint蓝图可视化脚本
Event Graph事件图表写逻辑的地方
Construction Script构造脚本构建时执行的图表
Variable / Function / Macro变量 / 函数 / 宏蓝图的三种基本构件
Event Dispatcher事件分发器一对多通知机制
Interface接口函数契约,用于解耦通信
Cast / Casting类型转换把对象当成具体类型来访问
Skeletal Mesh骨骼网格体可变形模型
Skeleton骨架骨骼层级资产
Socket插槽骨骼上的挂点(挂武器用)
Animation Sequence动画序列一段关键帧动画
Animation Blueprint (ABP)动画蓝图驱动动画的逻辑蓝图
State Machine状态机状态与转换规则
Blend Space混合空间按轴混合多个动画
Montage / Section / Slot蒙太奇 / 分段 / 插槽一次性动作的组织方式
Notify / Notify State通知 / 通知状态动画上的触发点与区间
Retargeting重定向把动画从一个骨架搬到另一个骨架
Control Rig控制绑定程序化骨骼控制
Sequencer关卡序列编辑器过场动画与关卡动画
Material / Instance / Function材质 / 实例 / 函数材质系统三件套
Material Expression材质表达式材质图表里的“节点”
Shading Model着色模型Default Lit / Unlit / Subsurface…
Blend Mode混合模式Opaque / Masked / Translucent…
Base Color / Roughness / Metallic基础色 / 粗糙度 / 金属度PBR 三大输入
World Position Offset顶点位置偏移顶点动画的入口
Landscape / Layer Info地形 / 图层信息地形的多层绘制
Foliage植被手刷植被系统
Niagara / Emitter / Module特效系统 / 发射器 / 模块粒子特效三件套
Renderer / Sprite / Ribbon渲染器 / 面片 / 拖尾决定粒子外观
PCG / Graph / Point程序化生成 / 图表 / 点规则化生成世界
MetaHuman / Groom数字人 / 毛发资产Epic 的数字人方案
Cook / Stage / Package烘焙 / 整理 / 打包打包流程的三个阶段
Lumen / Nanite全局光照 / 虚拟几何体UE5 的两大渲染特性
A1

附录 A1 · 快捷键速查表

建议收藏这一节。前两周把这张表贴在屏幕边上,第三周开始你会发现自己已经不用看了。

视口导航(最常用)

操作效果
按住 RMB 拖拽环视场景(第一高频操作)
按住 RMB + W/A/S/D前后左右飞行
按住 RMB + E/Q世界坐标上下移动
按住 RMB + R/F局部坐标上 / 下(贴地飞行)
按住 RMB + 滚轮调整相机移动速度
按住 RMB + Z/C拉大 / 缩小视野 FOV
MMB 拖拽 或 LMB+RMB 拖拽平移相机
F聚焦到选中的物体
Alt + LMB / RMB / MMB 拖拽环绕 / 推拉 / 平移轨道

选择与变换

操作效果
Q / W / E / R选择 / 移动 / 旋转 / 缩放工具
Space在移动 → 旋转 → 缩放间循环
Ctrl 或 Shift + 点击加选物体
LMB 拖拽(正交视口)框选
按住 V 拖动顶点吸附
按住 MMB 拖轴心临时移动物体轴心
End把物体吸附到下方表面(落地)
Delete删除选中物体

显示与编辑器

快捷键作用
G游戏模式(隐藏编辑器辅助显示)
Ctrl+R实时渲染开关
F11沉浸模式(视口全屏)
Ctrl+Space内容抽屉
Ctrl+S / Ctrl+Shift+S保存 / 全部保存
Ctrl+Z / Ctrl+Y撤销 / 重做
Ctrl+C / Ctrl+V / Ctrl+D复制 / 粘贴 / 复制副本
Alt+P / Esc开始试玩 / 退出试玩
Ctrl+Alt+F11Live Coding 编译 C++
Ctrl+Tab在打开的编辑器窗口(蓝图 / 材质 / 关卡)之间切换
不同版本、不同键盘布局(尤其是小键盘)与自定义按键设置会导致个别快捷键差异。以编辑器 Edit → Editor Preferences → Keyboard Shortcuts 中的当前设置为准,那里也可以自己改键。

常用控制台命令(试玩时按 ` 呼出命令行)

命令作用
stat fps在屏幕角落显示帧率
stat unit显示帧时间,并拆分为 Game / Draw / GPU,用来判断瓶颈在 CPU 还是 GPU
stat game显示游戏逻辑耗时
t.MaxFPS 60把帧率限制在 60(笔记本降功耗、降风扇噪音很有用)
r.ScreenPercentage 70以 70% 分辨率渲染再拉伸输出,用画质换性能
ShowFlag.Collision 1显示碰撞体(排查“为什么走过去被挡住”必备)
A2

附录 A2 · 四周学习计划

把这条路线拆成 4 周、每周 6–8 小时的节奏。时间可以压缩,但顺序不要跳。

周目标具体任务周末产出
第 1 周入门四步装引擎(含组件选择)→ 用 First Person 建项目 → 熟悉八个面板 → 练完视口操作与全部动手练习能不看教程自由飞场景、选中并修改任意物体
第 2 周启动设计师路线完成第 1–5 课(项目设置 / 灰盒 / 钥匙 / 开门 / HUD)一张能走通的灰盒关卡 + 会开门的钥匙
第 3 周完成设计师路线完成第 6–11 课(平台 / 陷阱 / 敌人 / 冲刺 / 结束状态 / Bonus)一局完整可玩的解谜冒险游戏
第 4 周美术打磨 + 打包做美术路线的第 1–5 课(导入 / 打光 / 材质 / 后处理),然后走一遍打包流程一个能发给朋友、双击就能玩的游戏
第 5–6 周
(进阶)
系统深挖进阶篇 07 蓝图全解 → 08 动画(动画蓝图/状态机/蒙太奇)→ 按目标选学 09 材质 / 10 地形 / 11 Niagara / 12 PCG·MetaHuman一个自己设计的角色 + 一套自制的材质 + 一个自制的特效
之后补第二条路线按兴趣选程序员路线(C++)或美术路线剩余课程在没有教程的情况下,独立做出一个小玩法原型
判断“学会”的标准不是看完了,而是:关掉教程,用一个全新的空项目,在 30 分钟内做出“一个可以走动的角色 + 一个能被拾取的物体 + 一个触发后变化的门”。能做到,说明这条路线真的走通了。
A3

附录 A3 · 新手最常见的问题

这些问题在官方论坛里被问了无数遍,先看这里可以省下你几个小时。

虚幻引擎是免费的吗?用它能商用吗?

引擎本身可以免费下载使用。Epic 的授权模式是:游戏产品在达到一定营收门槛之前不收取分成,超过门槛后按比例分成;具体条款请以官方最新的授权协议为准。学习、做 Demo、发布免费作品完全没有成本。

必须学 C++ 吗?只学蓝图能不能做出游戏?

不必。官方的设计师路线全程使用蓝图,可以做出完整的、可玩的游戏。蓝图的门槛低、迭代快,非常适合做玩法原型与中小型项目。C++ 的优势在大型项目里才明显:更简洁、性能更好、更容易管理复杂逻辑。稳妥的路径是:先用蓝图建立对引擎的理解,再按需要补 C++——而且两者可以混用(C++ 基类 + 蓝图子类)。

我的电脑配置不高,能学吗?

可以,但要降低预期与画质设置:项目画质预设选 Scalable,在项目设置里关闭 Lumen / Nanite(改用传统光照),视口里用 Unlit / Wireframe 视图减轻负担,学习阶段避免打开体积云、高密度植被等吃性能的内容。流程与知识点完全一样,只是画面朴素一点。

项目路径能用中文吗?

强烈建议不要。引擎、编译工具链、部分插件与打包流程对非 ASCII 路径的支持并不完美,最容易出问题的地方就是打包和 C++ 编译。请把引擎安装目录、项目目录、打包输出目录都设成纯英文路径,避免空格更保险。

该装哪个版本?新版一定更好吗?

学习阶段选最新的正式版即可(例如 5.6 / 5.8),教程适配最好。避免 Preview 预览版:插件与第三方教程往往跟不上。另外注意:项目一旦用新版本打开并保存,就无法再用旧版本打开——重要项目升级前先整体复制一份备份。

需要先学建模 / 美术吗?

不需要。引擎自带 Starter Content,官方路线也提供示例素材,美术路线会教你“素材进引擎之后怎么用”。至于用 Blender / Maya 建模,属于另一条技能线,可以在掌握引擎基本流程之后再补。反过来,会一点贴图与材质概念确实能让美术路线学得更顺。

蓝图越做越乱,节点连成蜘蛛网怎么办?

这是必经阶段,几个立刻能用的办法:① 用函数(Function)与宏把一段逻辑封装成一个节点;② 用注释框给节点分组并命名;③ 把相关变量放在同一类里,用结构体组织;④ 定期对齐与整理连线(选中节点按 Q 对齐);⑤ 逻辑复杂到一定程度时,考虑把它挪到 C++ 或拆成组件。

编辑器和打包都好慢,有什么提速办法?

把项目与引擎放到 SSD;给杀毒软件添加项目目录与 DDC 目录的排除项;把项目加入版本控制时排除 Binaries、Intermediate、Saved;不要滥用 Event Tick(每帧执行);定期清理与重建 DDC;打 Development 包而不是 Debug 包。首次打包慢是正常的,第二次会快很多(增量烘焙)。

遇到报错完全看不懂,怎么办?

按这个顺序排查:① 打开底部 Output Log,找第一条 Error(后面的往往是连锁反应);② 复制错误信息到官方论坛 / 搜索引擎搜;③ 用二分法:撤销最近一次改动,看是否恢复;④ 检查资源是否有丢失引用(内容浏览器里的“!”标记);⑤ 实在不行新建项目,把内容一点点迁移过去——比死磕一个损坏的项目快得多。

学完之后该做什么?

做一个小而完整的项目:一个房间、一个机制、一个明确的目标、一个结束画面。完成度比规模重要。然后把它打包发给别人玩,收集反馈再迭代。这一步跨过去,你就从“学引擎的人”变成了“做游戏的人”。

蓝图和 C++ 到底该怎么分工?

主流做法是“C++ 定框架,蓝图做内容”:把性能敏感、逻辑复杂、要被大量复用的系统(属性、技能、伤害、存档、AI 决策)写成 C++ 基类并暴露(UPROPERTY(EditAnywhere) / BlueprintCallable),再用蓝图子类做具体内容与调参。纯蓝图项目也完全可行,但要有“用函数/组件/注释把逻辑封装起来”的纪律。

角色怎么才能动起来?最小步骤是什么?

四步:① 导入带骨骼的角色与动画;② 用 Idle/Walk/Run 建一个 1D 混合空间;③ 新建 动画蓝图,在 Event Graph 里把角色速度写进变量,在 Anim Graph 里把变量接到混合空间,输出到 Output Pose;④ 在角色 SkeletalMeshComponent 的 Anim Class 里指定该动画蓝图。跑起来后,再用状态机加跳跃、用蒙太奇加攻击。

材质节点太多学不完,怎么办?

不要背节点表。只先掌握 8 个:Constant3Vector、ScalarParameter、VectorParameter、TextureSample、Multiply、Lerp、Fresnel、Time。用它们就能做出 80% 的常见材质。等遇到“需要按位置变化”“需要流动”“需要边缘亮”这类需求时,再按第 09 章的“按效果查节点”表反查。看 Stats 面板和控制节点数量,比多学节点更重要。

PCG、MetaHuman 需要什么版本?免费吗?

PCG 在 UE 5.2 及以后作为实验/正式功能提供,5.4+ 的成熟度明显提高(PCG Biome Core 等插件也在后续版本加入);MetaHuman 资产与 Creator 面向项目免费提供,具体条款以官方页面为准。两者都需要在 Edit → Plugins 里启用相应插件,并在项目设置中确认目标平台兼容性。

学了这么多系统,怎么避免“什么都懂一点,什么都做不出来”?

用一个小项目把它们串起来:一个房间 + 一个角色 + 一个机制 + 一个特效 + 一个 UI。每加一个系统就问自己:“它服务于这个玩法吗?”如果答案是否定的,就先不学。引擎的能力是工具库,不是待办清单。

A4

附录 A4 · 官方资源导航

全部链接指向 Epic 官方站点,建议加入浏览器书签,遇到问题先来这里找答案。

资源说明链接
Unreal Engine for New Users本教程的官方母页面,完整路线与三条学习路线入口打开
Install Unreal Engine安装、组件、校验、插件、卸载打开
Create your First Project项目浏览器与模板详解打开
Unreal Editor Interface编辑器界面八个区域打开
Viewport Controls视口操作与全部快捷键表打开
Code a First-Person Adventure Game程序员路线(C++,8 节)打开
Design a Puzzle Adventure Game设计师路线(蓝图,11 节)打开
Art Pass for a Puzzle Adventure Game美术路线(11 节)打开
Packaging Unreal Engine Projects打包、烘焙、构建配置、分发打开
Hardware and Software Specifications硬件与软件要求(配置升级前先看)打开
Set Up Visual StudioC++ 开发环境配置打开
Learning Library(学习库)官方教程、课程、直播回放,可按难度筛选打开
Developer Forums(开发者论坛)提问、看别人踩过的坑打开
Fab官方资源市场:模型、材质、音效、插件打开
Your First Hour in Unreal Engine官方入门视频课程,适合作为本教程的补充在学习库中搜索

📌 最后一句

这条官方路线的价值不在于“看完”,而在于每学完一节就动手做一遍。当你把打包好的游戏发给第一个朋友、看他在你做的关卡里摸索时,这份学习地图就真正走完了。接下来,做你自己的东西。

×