From a8bcfb8218825d2aec169a19e9216c5c8290833e Mon Sep 17 00:00:00 2001 From: starmen1265 Date: Mon, 8 Jun 2026 19:05:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(assets):=20v01=E7=99=BD=E6=A8=A1=E5=85=B3?= =?UTF-8?q?=E5=8D=A1=E9=87=8D=E5=BB=BA=E2=80=94=E2=80=94238Actor=E9=94=9A?= =?UTF-8?q?=E7=82=B9=E8=A1=A5=E5=81=BF+=E5=A4=A9=E7=A9=BA=E7=9B=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关卡文件更新:雾+大气+锚点补偿后的238个Actor Agent记忆:BSP锚点类型+Rotator关键字参数+V01修复记录 --- .claude/agent-memory/game-dev/MEMORY.md | 6 ++-- .../agent-memory/game-dev/bsp-pivot-types.md | 34 +++++++++++++++++++ .../game-dev/level-builder-bugfix-v01.md | 27 +++++++++++++++ .../agent-memory/game-dev/ue57-python-api.md | 11 ++++++ Content/Maps/LVL_SuburbanV01.umap | 4 +-- 5 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 .claude/agent-memory/game-dev/bsp-pivot-types.md create mode 100644 .claude/agent-memory/game-dev/level-builder-bugfix-v01.md diff --git a/.claude/agent-memory/game-dev/MEMORY.md b/.claude/agent-memory/game-dev/MEMORY.md index 01cc23e..a75b164 100644 --- a/.claude/agent-memory/game-dev/MEMORY.md +++ b/.claude/agent-memory/game-dev/MEMORY.md @@ -1,2 +1,4 @@ -- [Level Builder Tool](level-builder-tool.md) — 白模关卡自动生成 Python 脚本(tools/level-builder/,265 Actor 解析验证通过) -- [UE5.7 Python API](ue57-python-api.md) — 实测 API 差异(set_actor_rotation、new_level、CWD、import 路径) +- [Level Builder Tool](level-builder-tool.md) — 白模关卡自动生成 Python 脚本(tools/level-builder/,265→238 Actor 修复后验证通过) +- [UE5.7 Python API](ue57-python-api.md) — 实测 API 差异(set_actor_rotation、new_level、CWD、import 路径、Rotator 关键字参数) +- [V01 Bugfix](level-builder-bugfix-v01.md) — 8个白模关卡问题诊断修复(搭建指南6+解析器双重解析+构建器静默fallback) +- [BSP Pivot Types](bsp-pivot-types.md) — 38种 BSP 资产实测锚点+自动补偿机制(角落/底边中心/底面中心) diff --git a/.claude/agent-memory/game-dev/bsp-pivot-types.md b/.claude/agent-memory/game-dev/bsp-pivot-types.md new file mode 100644 index 0000000..ccffaf3 --- /dev/null +++ b/.claude/agent-memory/game-dev/bsp-pivot-types.md @@ -0,0 +1,34 @@ +--- +name: bsp-pivot-types +description: BlockingStarterPack 全部 38 种 BSP 资产的实测锚点位置和补偿方案 +metadata: + type: project +--- + +# BSP 资产锚点实测数据(2026-06-08) + +## 锚点模式分类 + +| 模式 | 资产 | 特征 | 补偿 | +|------|------|------|------| +| **角落** | Floor_*, Cube, Fence_Small_400 | min≈(0,0,0) | XY 各偏半尺寸 | +| **底边中心** | Wall_*, BarrierWall_* | min≈(0, ±half_thickness, 0) | X 偏半宽度,Y 已居中 | +| **底面中心** | Cylinder, CirclePlatform, 家具, 道具 | min≈(-half, -half, 0) | 无需补偿 | + +## 关键实测尺寸(非 default_size) + +- **BarrierWall_600**: 实际 600×**60**×**210**cm(非 mapping 中的 20×100) +- **BarrierWall_200**: 实际 200×**60**×**210**cm +- **Floor_1000x1000**: Z 范围 -20 到 2(厚度 22cm,表面在 Z=2) +- **Fence_Small_400**: 实际 407×6×112cm +- **Wall_400x300**: 所有墙体 Y 方向已居中(±10cm) + +## 补偿实现 + +`asset_mapping.py` 中 `pivot_offset_xy` 字段 + `get_pivot_compensation()` 函数: +- 输入: asset_key, scale, rotation +- 输出: (dx, dy) 偏移量 +- builder 中: spawn_pos = json_pos - compensation + +## Why: 搭建指南统一用视觉中心坐标,但 BSP 资产锚点各异,不补偿会差半模型 +## How to apply: 新增 BSP 资产时先跑 check_pivots.py 实测锚点,再填 pivot_offset_xy。新增搭建指南时位置直接写视觉中心即可。 diff --git a/.claude/agent-memory/game-dev/level-builder-bugfix-v01.md b/.claude/agent-memory/game-dev/level-builder-bugfix-v01.md new file mode 100644 index 0000000..420643b --- /dev/null +++ b/.claude/agent-memory/game-dev/level-builder-bugfix-v01.md @@ -0,0 +1,27 @@ +--- +name: level-builder-bugfix-v01 +description: v01白模关卡8个问题的诊断和修复记录,包括搭建指南/解析器/构建器的修改 +metadata: + type: project +--- + +# v01 白模关卡问题修复记录(2026-06-08) + +## 修复的文件 + +| 文件 | 修改内容 | +|------|---------| +| `docs/technical/关卡-v01-搭建指南.md` | 修复6个问题:全局地面、Z1双Floor、西边界旋转统一、东边界改Wall_400x300、Z1房屋墙旋转、院门改WallDoorDouble、南边界Z7去重 | +| `tools/level-builder/parsers/build_guide_parser.py` | 新增 `_deduplicate_actors()` 去重;`_parse_phase_ground` 缩小范围到B1段;支持 `旋转 (P,Y,R)` 列名;支持全局地面标题 | +| `tools/level-builder/builder/scene_builder.py` | `load_asset` 失败时用 Cube 占位 + `[MISSING]` 前缀 + MI_DevPink 标记 | +| `tools/level-builder/config/asset_mapping.py` | 新增 `WallDoorDouble_400x300` 资产映射 | +| `tools/level-builder/parsers/markdown_table.py` | `parse_rotation` 增加箭头注释处理说明 | + +## 诊断结论 + +- 8个问题中6个源头在**搭建指南**,2个涉及执行案 +- 解析器有双重解析bug(地面段解析了边界表格)已修复 +- 构建器有静默fallback已改为醒目标记 + +## Why: 用户检查生成的白模关卡发现多处明显错误,需要追溯源头并修复 +## How to apply: 重新生成关卡时使用修复后的 JSON(238 Actor)。如再出问题,先查搭建指南再查解析器。 diff --git a/.claude/agent-memory/game-dev/ue57-python-api.md b/.claude/agent-memory/game-dev/ue57-python-api.md index 45670de..a7e8814 100644 --- a/.claude/agent-memory/game-dev/ue57-python-api.md +++ b/.claude/agent-memory/game-dev/ue57-python-api.md @@ -20,6 +20,17 @@ actor.set_actor_rotation(unreal.Rotator(pitch, yaw, roll), False) **Why:** UE5.7 改了 API 签名,positional argument `teleport_physics` 变为必需 **How to apply:** 所有 `set_actor_rotation()` 调用都加第二个参数 `False` +### `unreal.Rotator` 位置参数顺序不是 (Pitch, Yaw, Roll) +```python +# ❌ 错误:位置参数顺序非 P,Y,R,Yaw=90 会落到 Pitch(Y显示) +actor.set_actor_rotation(unreal.Rotator(0, 90, 0), False) + +# ✅ 正确:用关键字参数避免歧义 +actor.set_actor_rotation(unreal.Rotator(pitch=0, yaw=90, roll=0), False) +``` +**Why:** UE5.7 Python `unreal.Rotator` 的位置参数顺序与关键字参数名不一致,第二个位置参数映射到 Pitch 而非 Yaw +**How to apply:** 所有 `unreal.Rotator()` 调用必须使用关键字参数 `pitch=, yaw=, roll=` + ### `-ExecutePythonScript` 模式下 CWD 不是项目目录 ```python # ❌ 错误:CWD 是引擎 Binaries 目录 diff --git a/Content/Maps/LVL_SuburbanV01.umap b/Content/Maps/LVL_SuburbanV01.umap index b3fed88..c77137f 100644 --- a/Content/Maps/LVL_SuburbanV01.umap +++ b/Content/Maps/LVL_SuburbanV01.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95d2a827ac837b17ae648984eb4c3f0936b15c5a88770252a689b1696342c86f -size 1090058 +oid sha256:7f4fab03f7fc3dc638447be773eb9b73425f9a966f47bbe614855ab80fe6225b +size 529605