3、关卡基础:创建与保存关卡、理解关卡蓝图、设置默认关卡与持久关卡
好,咱们进入第三讲。说实话,关卡是Unreal里所有影视内容的「舞台」。你做的角色、灯光、摄像机,最后都得装进这个容器里。我见过不少新手一上来就急着摆资产,结果做到一半发现关卡设置有问题,又得从头来。嗯,咱们先把地基打牢。
3.1 创建与保存关卡
创建关卡其实很简单。在Content Browser里右键,选「Level」就行。但我个人习惯用快捷键——先打开你要继承的关卡,然后File → Save Current As。为什么?因为很多模板设置(比如Post Process、Lighting Scenario)能直接带过来。
保存时有个坑:关卡文件一定要放在Content目录下。我曾经有个项目,美术同事把关卡存到了桌面,结果引擎死活加载不出来。找了半天才发现路径不对。Unreal的引用机制是基于相对路径的,你放错地方,所有引用都会断。
Seq_Chapter03 就比 第三章节 最终版 靠谱得多。
3.2 理解关卡蓝图
关卡蓝图,说白了就是「这个关卡的全局脚本」。它不属于任何Actor,但能控制关卡里的一切。你想想看,如果你想在过场动画开始时触发一个事件,或者播放一段音效,关卡蓝图就是最直接的地方。
打开方式:点击顶部菜单的Blueprints → Open Level Blueprint。或者更快的,直接按Ctrl + B(在选中关卡时)。
我常用的几个场景:
- 开场初始化:在
Event BeginPlay里设置摄像机初始位置、禁用玩家输入。 - 关卡流加载:用
Load Stream Level节点动态加载子关卡,避免一次性加载太多资源。 - 全局变量:比如当前播放到第几个镜头,或者某个角色的对话状态。
举个例子,一个简单的开场逻辑:
Event BeginPlay
→ Set Input Mode (UI Only)
→ Set Cinematic Mode (True)
→ Play Sound (开场音乐)
→ Delay (2秒)
→ Open Level (主关卡)
你看,就这么几个节点,就能控制整个过场的启动流程。我在做《暗夜追踪》那个项目时,就是用关卡蓝图来控制所有章节的切换逻辑,比在每一个Actor上写脚本要清爽得多。
3.3 设置默认关卡与持久关卡
这部分容易搞混。我简单解释一下:
- 默认关卡:游戏启动时第一个加载的关卡。在
Project Settings → Maps & Modes → Default Maps里设置。 - 持久关卡:一直存在的关卡,不会被卸载。通常用来放全局灯光、大气系统、或者UI框架。
为什么要区分?因为影视级过场动画往往需要切换场景。比如主角从室内走到室外,你不可能把整个室内场景一直留在内存里。这时候,持久关卡里放「永远不变的东西」(比如全局光照、天空球),而子关卡里放「会切换的场景」。
设置方法:
- 在World Settings面板里,找到
Persistent Level。 - 把你想作为持久关卡的Level拖到
Persistent Level的插槽里。 - 其他关卡作为Streaming Levels,通过蓝图或C++动态加载/卸载。
我曾经犯过一个错:把角色蓝图放在了子关卡里,结果切换关卡时角色直接被销毁了。后来才意识到,角色应该放在持久关卡里,或者用Move Actor to Level节点迁移过去。嗯,这个坑你们记住就好。
| 类型 | 用途 | 加载方式 | 典型内容 |
|---|---|---|---|
| 持久关卡 | 全局基础设施 | 始终加载 | 天空球、全局光照、玩家角色、UI |
| 子关卡 | 场景内容 | 动态加载/卸载 | 室内场景、室外场景、道具 |
| 默认关卡 | 启动入口 | 游戏开始时加载 | 主菜单、开场关卡 |
最后说一句:持久关卡不是越多越好。我见过有人把整个城市都放在持久关卡里,结果内存直接爆了。持久关卡只放「必须一直存在」的东西,其他的交给流加载。这才是专业做法。
好,这一讲就到这里。下一讲咱们聊聊关卡流加载的具体实现,包括如何用蓝图控制加载进度、如何避免加载卡顿。到时候见。