把「Freedom 异形双层监狱 V4.1」场景接进 AGLS(Adventure Game Locomotion System)v1.7.0, 使其从"只能看的场景"变成可直接 Play 的第三人称冒险关卡:角色、相机、移动/攀爬/交互全部由 AGLS 提供, 监狱作为游玩场地。
Rebuild of the "Freedom" prison level (V4.1) inside AGLS v1.7.0 on Unreal Engine 5.6, turning a scene-only project into a playable third-person adventure level.
引擎:Unreal Engine 5.6.1 | 依赖:自备 AGLS v1.7.0 (UE5.6) 资产包(本仓库不包含,见 NOTICE.md)
| 目录 | 内容 |
|---|---|
Content/Freedom_Prison_V41/ |
关卡:L_Prison_AGLS(已接好 AGLS 的可玩版)、L_Prison_Detail(原始场景版) |
Content/Freedom_Prison_V41_20260914_173736/ |
44 组异形静态网格、简单材质、电梯 Level Sequence |
Scripts/integrate_prison_agls_ue5.py |
集成脚本:复制关卡、刷新碰撞、挂 AGLS GameMode、放角色、保存 |
Scripts/refresh_prison_collision_ue5.py |
碰撞刷新脚本(编辑器内执行) |
Scripts/build_prison_v41_ue5.py |
V4.1 原始生成脚本(留档,可在空关卡重建整套几何) |
Verification/ |
9 份验证记录(集成、PIE 实跑、碰撞、相机修复、最终状态) |
设计与关卡流程.md |
原关卡设计、房间流程、电梯与依赖说明 |
不含:AGLS 本体的美术/动画/蓝图与 C++ 插件(付费授权内容,请自行从原作者处获取,见 NOTICE.md)。
| 项目 | 内容 |
|---|---|
| 关卡 | /Game/Freedom_Prison_V41/Maps/L_Prison_AGLS |
| GameMode | ALS_GameMode_SP → 角色 ALS_AnimMan_CharacterBP_C、控制器 ALS_Player_Controller_C |
| 玩家角色 | 出生点预放 ALS_AnimMan_CharacterBP,AutoPossessPlayer = Player 0(相机正常工作的前提) |
| 出生点 | Prison_Start = (-1430.4, -1772.0, 110),即设计中的 R01 起始牢房 |
| 场景规模 | 256 Actor / 102 静态网格 / 43 盏灯(全 Movable)/ 电梯 40 秒往返 Level Sequence |
| 碰撞 | 29 个实体网格 = Complex as Simple + 双面 + 逐 Section 开启(保留弯折回廊与深井孔洞) |
| 楼层 | 两层 0 / 4.2 m,75 组禁入囚室,14 个功能房间(R01–R10、U01–U04) |
- 准备好 UE 5.6.1 与 AGLS v1.7.0 (UE5.6) 工程。
- 把本仓库的
Content/两个文件夹整体复制进 AGLS 工程的Content/下(保持包路径不变)。 - 打开
L_Prison_AGLS:World Settings 的 GameMode 已是ALS_GameMode_SP;出生点位置已放好 一个ALS_AnimMan_CharacterBP(务必保留AutoPossessPlayer = Player 0)。 - 如果角色站在地板上会陷下去:编辑器里 Tools → Execute Python Script →
Scripts/refresh_prison_collision_ue5.py,再 Play。 - 直接 Play —— 键位见下面的按键说明。
把本仓库内容搬进既有工程时,也可以用 Scripts/integrate_prison_agls_ue5.py 复现整套集成
(复制关卡 → 刷碰撞 → 挂 GameMode → 放角色 → 保存),路径常量在脚本顶部。
键位来自 AGLS v1.7.0 自带的输入配置(Enhanced Input 映射上下文 + DefaultInput.ini),本工程未改动任何键位。
完整清单也可看 按键说明.md,原始映射导出在 Verification/13_input_mappings.json。
| 操作 | 键鼠 | 手柄 |
|---|---|---|
| 前后左右移动 | W A S D |
左摇杆 |
| 转视角 | 鼠标移动 | 右摇杆 |
| 跳跃 | Space |
A |
| 冲刺(按住) | Left Shift |
左摇杆按下 |
| 走 / 跑 切换(按住) | Left Ctrl |
RB |
| 蹲(按住) | Left Alt |
B |
| 爬行 | 按住 Left Alt 约 0.5 秒 |
— |
| 布娃娃 | X |
十字键左 |
| 操作 | 键鼠 | 手柄 |
|---|---|---|
| 交互 / 拾取 / 开门 | E |
A |
| 瞄准(按住) | 鼠标右键 | LT |
| 射击 / 近战处决 | 鼠标左键 | RT |
| 手雷 / 缩放 | 鼠标中键 | 十字键上 |
| 换弹 | R |
Y |
| 拿 / 收绳索 | F |
— |
| 操作 | 键鼠 | 手柄 |
|---|---|---|
| 打开 Overlay 菜单 | Q |
LB |
| 直接切第 1/2/3/4 个 | 1 2 3 4 |
十字键 左/下/右 |
| 上一个 / 下一个 | 滚轮 上 / 下 | 十字键 上/下 |
| Overlay 第二分区切换 | Tab |
— |
| 操作 | 键鼠 | 手柄 |
|---|---|---|
| 切换相机模式 | C |
右摇杆按下 |
| 旋转模式 1 / 2 | 5 / 6 |
十字键 左/右 |
| 暂停 / 菜单 | K |
— |
| 存档 | H(只对 AGLS 自带 Grid_Level 生效) |
— |
| 调试显示 | V M U I Y |
— |
- 攀爬 / 边缘悬挂:空中 + 方向键开始攀爬;
A/S左右横移;Shift+方向键找下一个落脚点;Shift+方向键+Space跳过去;Space上翻;Left Ctrl松手。 - 窄边行走:
W+Space开始;A/D左右移动;Left Ctrl下到地面。 - 游泳:
WASD移动;Shift加速;Alt下潜;Space+方向键爬上水面。 - 冰镐攀爬:空中 + 方向键开始;方向键移动;
Left Ctrl停止;Shift+方向键+Space在两种攀爬间切换。
- 出生在 R01 起始牢房,
WASD+ 鼠标即可探索。 - 电梯在 R05 电梯配电厅:全自动,一层停靠 10 秒且门开着,直接走进轿厢;约 12 秒开始上行, 二层开门 8 秒后自动下行回到一层。没有呼叫键。
- 监狱是白盒:没有攀爬点、水域、车辆,攀爬/游泳相关按键在本关没有作用对象;
E也暂时没有可交互目标。
AGLS 的角色身上没有相机组件、也没有弹簧臂,相机由 ALS_PlayerCameraManager + 相机资产
(GameplayCameras:MainCameraRig 等)驱动。它要求 PlayerController 的视目标(View Target)是角色,
相机系统才会给出"身后偏上"的第三人称机位。
AGLS 自带演示关卡(Grid_Level)不靠 PlayerStart,而是在关卡里预放角色 + AutoPossessPlayer = Player 0,
由这条附身路径设置视目标。若关卡里只有 PlayerStart、没有预放角色,PlayerController 会一直没有视目标,
相机就退化成"控制器自身视点"(眼睛高度、跟随控制旋转)——表现上就是第一人称。
本仓库的 L_Prison_AGLS 已按 AGLS 的方式修复:出生点预放角色并勾选 AutoPossessPlayer = Player 0。
实测 PIE:视目标 = ALS_AnimMan_CharacterBP_C,相机在角色后方 150 cm、上方 16 cm(R01 牢房狭窄,
相机被墙体挤近;出牢房后自动拉开),世界中仅 1 个角色。
用命令行 -nullrhi 冷加载关卡时,OBJ 导入网格的碰撞查询可能失灵(原 V4.1 包就记录过这个现象)。
图形界面正常打开不受影响;真遇到角色穿透,执行 Scripts/refresh_prison_collision_ue5.py 再 Play。
刷碰撞建议加命令行参数 -ddc=NoShared -DDC-ForceMemoryCache,否则无界面运行可能因 DDC 无写入权限而报错退出。
白盒电梯原本是 LS_PrisonLift_Shuttle(Level Sequence 自动往返)。原始状态有两个问题:
- 运行时没有绑定:序列里的 10 个 possessable 没有映射到关卡里的 Actor,播放器里的 sequence 也是空的—— 于是序列"在播",轿厢和轿门却一动不动。
- 时间轴不可用:一层厅门在 40 秒循环里只开 4 秒,而且循环点是硬切(开门状态直接跳回关门),玩家几乎赶不上。
本仓库的修复:
- 重建为
LS_PrisonLift_Shuttle_AGLS,10 条轨道(轿厢根 + 4 樘厅门 + 2 扇轿门 + 对重 + 2 根钢索)用FindNamedBinding+AddBinding显式绑到关卡 Actor,auto_play=true、无限循环; - 时间轴改成 38 秒无缝循环,两层都长时间开门等待:
| 时间 | 状态 |
|---|---|
| 0 – 10 s | 一层停靠,门开(可直接走进轿厢) |
| 10 – 12 s | 关门 |
| 12 – 18 s | 上行 |
| 18 – 20 s | 二层开门 |
| 20 – 28 s | 二层停靠,门开 |
| 28 – 30 s | 关门 |
| 30 – 36 s | 下行 |
| 36 – 38 s | 一层开门 → 无缝回到 0 s |
复现/重建脚本:Scripts/rebuild_prison_lift_sequence.py。
PIE 实测(Verification/12_pie_lift_playtest.json):playing=True,轿厢停在 z=0,一层厅门 Y 位移 +110 cm(开),
二层厅门保持关闭。
全部在 UE 5.6.1(CL 44394996)实测,原始 JSON 在 Verification/:
| 文件 | 证明了什么 |
|---|---|
01_integration_report.json |
关卡复制、29 个实体网格碰撞刷新、GameMode/角色/控制器解析、保存成功 |
02_pie_playtest.json |
PIE 实跑:角色在 R01 落点 z=92.2 站稳,前进 283 cm 后被牢房墙体挡停,未穿地板 |
03_collision_probe.json |
16 个房间锚点 + 电梯的射线探针与通道对照 |
04_mesh_collision_data.json |
网格/组件碰撞响应与 Complex as Simple 数据 |
05_room_anchors.json |
R01–R10、U01–U04、电梯上下站坐标锚点 |
06_final_smoke.json |
交付配置能正常启动并加载关卡 |
07_camera_fix.json |
相机修复动作与保存结果 |
08_pie_camera_after_fix.json |
修复后 PIE:视目标=角色、相机身后 150 cm/上方 16 cm、角色数量=1 |
09_final_state.json |
最终状态:256 Actor、GameMode 覆盖、预放角色与 Player 0、电梯序列 |
- 电梯是白盒 40 秒自动往返:无呼叫按钮、无防夹、不读任务供电状态。
- 没有解谜状态机、017 交易、守卫 AI;要接 AGLS 的 AI 需自行放置 NavMeshBoundsVolume 并烘焙导航。
r.AllowStaticLighting=False(监狱灯全为 Movable,不需要烘焙静态光)。- 未接第三人称模板以外的相机模式切换;AGLS 的
C(CameraAction)等按键保持包内默认。
- 本仓库自有内容(监狱关卡、网格/材质、脚本、文档)可自由用于你的项目。
- AGLS(Adventure Game Locomotion System)版权归 Jakub W 所有,本仓库不包含其任何资产, 使用前请自行获取授权,详见 NOTICE.md。
- 关卡设计文档与生成脚本源自 Freedom V4.1 白盒迭代。