fix(level-builder): 锚点补偿+旋转修复+天空盒+解析器去重

- asset_mapping: 38种BSP资产实测锚点+pivot_offset_xy自动补偿
- scene_builder: Rotator改关键字参数修正旋转轴映射
- scene_builder: spawn前XY锚点补偿(支持Yaw旋转)
- scene_builder: 新增ExponentialHeightFog+大气效果后处理
- build_cmdline: 构建后自动添加雾+GameMode+DirectionalLight大气
- build_guide_parser: 去重+全局地面+旋转列名兼容+边界段范围修正
- BarrierWall实际尺寸修正(60×210非20×100)
- 搭建指南: 全局地面中心坐标+西边界旋转统一+院门改双开门
This commit is contained in:
2026-06-08 19:05:50 +08:00
parent c3c10a9fcb
commit a3c38aa92a
13 changed files with 1284 additions and 1879 deletions
+46 -41
View File
@@ -69,6 +69,7 @@ LVL_SuburbanV01/
| Wall_100x300 | `Architecture/Walls/SM_Wall_100x300` | 100×20×300 |
| Wall_400x100 | `Architecture/Walls/SM_Wall_400x100` | 400×20×100 |
| WallDoor_200x300 | `Architecture/Walls/SM_WallDoor_200x300` | 200×20×300 |
| WallDoorDouble_400x300 | `Architecture/Walls/SM_WallDoorDouble_400x300` | 400×20×300(双开门洞) |
| WallDoorGarage_400x300 | `Architecture/Walls/SM_WallDoorGarage_400x300` | 400×20×300 |
| WallWindow_400x300 | `Architecture/Walls/SM_WallWindow_400x300` | 400×20×300 |
| WallWindowSmall_200x300 | `Architecture/Walls/SM_WallWindowSmall_200x300` | 200×20×300 |
@@ -197,15 +198,19 @@ LVL_SuburbanV01/
### B1 铺设地面
按区域铺设地面 Floor,使用 Floor_1000x1000 平铺。
先铺设全局地面,再按区域铺设地面 Floor。
#### Z1 家 地面(MI_DevGray)
#### 全局地面(MI_DevGray)
| # | Actor 名称 | 资产 | 位置 (X,Y,Z) | 缩放 |
|---|-----------|------|-------------|------|
| 1 | LVL_Z1_STR_Floor | Floor_1000x1000 | (500, 400, 0) | (1, 0.8, 1) |
| 1 | LVL_Global_GroundFloor | Floor_1000x1000 | (4000, 3000, -5) | (8, 6, 1) |
> Z1 范围 (0,0)→(1000,800),Floor_1000x1000 中心点 (500,400),Y 方向缩放 0.8 覆盖 800cm。
> 全局地面覆盖整个场景 8000×6000cm,Z=-5 略低于区域地面,作为兜底防穿模。
#### Z1 家 地面(MI_DevGray)
> Z1 院子地面在 C1 结构体表中定义(LVL_Z1_STR_CourtyardFloor),此处不重复。
#### Z2 小卖部 地面(MI_DevGray)
@@ -265,7 +270,7 @@ LVL_SuburbanV01/
| # | Actor 名称 | 资产 | 位置 (X,Y,Z) | 旋转 (Pitch,Yaw,Roll) | 材质 |
|---|-----------|------|-------------|----------------------|------|
| 1 | LVL_BND_West_01 | Wall_400x300 | (0, 200, 0) | (0,0,0) → Yaw=90° | MI_DevRed |
| 1 | LVL_BND_West_01 | Wall_400x300 | (0, 200, 0) | (0,90,0) | MI_DevRed |
| 2 | LVL_BND_West_02 | Wall_400x300 | (0, 600, 0) | (0,90,0) | MI_DevRed |
| 3 | LVL_BND_West_03 | Wall_400x300 | (0, 1000, 0) | (0,90,0) | MI_DevRed |
| 4 | LVL_BND_West_04 | Wall_400x300 | (0, 1400, 0) | (0,90,0) | MI_DevRed |
@@ -281,19 +286,15 @@ LVL_SuburbanV01/
| 14 | LVL_BND_West_14 | Wall_400x300 | (0, 5400, 0) | (0,90,0) | MI_DevRed |
| 15 | LVL_BND_West_15 | Wall_400x300 | (0, 5800, 0) | (0,90,0) | MI_DevRed |
> Wall_400x300 旋转 90° 后沿 Y 方向排列,每块 400cm 高 × 300cm 长(需纵向排列覆盖 250cm 墙高)。
> **实际操作**:Wall_400x300 放置时默认长轴沿 X。Yaw=90° 旋转后长轴沿 Y。但墙高只有 300cm,而围挡只需 250cm,300cm 足够。
> **修正**:Wall 默认高度 300cm(Z轴),宽度 400cm(X轴),厚度 20cm(Y轴)。放置在 X=0 处,Yaw=90° 使 400cm 宽度沿 Y 方向。每块覆盖 Y 方向 400cm,15 块覆盖 6000cm。Z 方向 300cm > 250cm 要求,足够。
> Wall_400x300 默认 400×20×300。Yaw=90° 后 400cm 宽度沿 Y 方向。15 块 × 400cm = 6000cm 覆盖全线。
#### 东边界(X=8000, Y=0-6000)
| # | Actor 名称 | 资产 | 位置 (X,Y,Z) | 旋转 | 材质 |
|---|-----------|------|-------------|------|------|
| 1-15 | LVL_BND_East_01~15 | BarrierWall_600 | (8000, 200+400n, 0) n=0~14 | (0,90,0) | MI_DevBlue |
| 1-15 | LVL_BND_East_01~15 | Wall_400x300 | (8000, 200+400n, 0) n=0~14 | (0,90,0) | MI_DevBlue |
> BarrierWall_600 默认 600cm 长。旋转 90° 后沿 Y 方向。10 块覆盖 6000cm。
> **修正**:BarrierWall_600 高度 100cm,需要堆叠 3 层达到 300cm。改为使用 Wall_400x300 更经济。
> 实际建议:使用 Wall_400x300 替代,与西边界相同方式,15 块。
> 改用 Wall_400x300(300cm 高度一次到位),与西边界相同方式。15 块 × 400cm = 6000cm。
#### 北边界(Y=6000, X=0-8000)
@@ -307,26 +308,29 @@ LVL_SuburbanV01/
南边界分段处理:
- X=0-1000:Z1 南院墙(已含在 Z1 结构体中)
- X=1000-1600:Z2 后墙区域
- X=1600-5000:施工围挡
- X=5000-8000:补齐围挡
- X=1000-1600:Z2 后墙区域(已含在 Z2 结构体中)
- X=1600-5500:施工围挡(Wall_400x300)
- X=5500-7000:**Z7 碰撞围墙已覆盖**(见 C7 结构体),此处不重复放置
- X=7000-8000:补齐围挡
| # | Actor 名称 | 资产 | 位置 (X,Y,Z) | 材质 |
|---|-----------|------|-------------|------|
| 1 | LVL_BND_South_01 | BarrierWall_600 | (1900, 0, 0) | MI_DevBlue |
| 2 | LVL_BND_South_02 | BarrierWall_600 | (2500, 0, 0) | MI_DevBlue |
| 3 | LVL_BND_South_03 | BarrierWall_600 | (3100, 0, 0) | MI_DevBlue |
| 4 | LVL_BND_South_04 | BarrierWall_600 | (3700, 0, 0) | MI_DevBlue |
| 5 | LVL_BND_South_05 | BarrierWall_600 | (4300, 0, 0) | MI_DevBlue |
| 6 | LVL_BND_South_06 | BarrierWall_600 | (4900, 0, 0) | MI_DevBlue |
| 7 | LVL_BND_South_07 | BarrierWall_600 | (5500, 0, 0) | MI_DevBlue |
| 8 | LVL_BND_South_08 | BarrierWall_600 | (6100, 0, 0) | MI_DevBlue |
| 9 | LVL_BND_South_09 | BarrierWall_600 | (6700, 0, 0) | MI_DevBlue |
| 10 | LVL_BND_South_10 | BarrierWall_600 | (7300, 0, 0) | MI_DevBlue |
| 11 | LVL_BND_South_11 | BarrierWall_600 | (7900, 0, 0) | MI_DevBlue |
| 1 | LVL_BND_South_01 | Wall_400x300 | (1800, 0, 0) | MI_DevBlue |
| 2 | LVL_BND_South_02 | Wall_400x300 | (2200, 0, 0) | MI_DevBlue |
| 3 | LVL_BND_South_03 | Wall_400x300 | (2600, 0, 0) | MI_DevBlue |
| 4 | LVL_BND_South_04 | Wall_400x300 | (3000, 0, 0) | MI_DevBlue |
| 5 | LVL_BND_South_05 | Wall_400x300 | (3400, 0, 0) | MI_DevBlue |
| 6 | LVL_BND_South_06 | Wall_400x300 | (3800, 0, 0) | MI_DevBlue |
| 7 | LVL_BND_South_07 | Wall_400x300 | (4200, 0, 0) | MI_DevBlue |
| 8 | LVL_BND_South_08 | Wall_400x300 | (4600, 0, 0) | MI_DevBlue |
| 9 | LVL_BND_South_09 | Wall_400x300 | (5000, 0, 0) | MI_DevBlue |
| 10 | LVL_BND_South_10 | Wall_400x300 | (5400, 0, 0) | MI_DevBlue |
| 11 | LVL_BND_South_11 | Wall_400x300 | (7200, 0, 0) | MI_DevBlue |
| 12 | LVL_BND_South_12 | Wall_400x300 | (7600, 0, 0) | MI_DevBlue |
> BarrierWall_600 需注意高度仅 100cm。建议堆叠 2-3 层达到 200-300cm 视觉高度。
> **替代方案**:改用 Wall_400x300 更高效(300cm 高度一次到位)。
> X=5500-7000 区段由 Z7 碰撞围墙(CollisionFront/2/3)覆盖,不重复放置。
> 全部改用 Wall_400x300(300cm 高度一次到位),间距 400cm。
> X=1600-5500 共 10 块,X=7000-8000 共 2 块。
---
@@ -351,7 +355,7 @@ LVL_SuburbanV01/
| 5 | LVL_Z1_STR_EastWall_01 | Wall_400x300 | (980, 200, 0) | (0,90,0) | — | MI_DevRed |
| 6 | LVL_Z1_STR_EastWall_02 | Wall_400x300 | (980, 600, 0) | (0,90,0) | — | MI_DevRed |
| 7 | LVL_Z1_STR_NorthWall_West | Wall_400x300 | (200, 780, 0) | (0,0,0) | — | MI_DevRed |
| 8 | LVL_Z1_STR_NorthWall_Gate | WallDoor_200x300 | (500, 780, 0) | (0,0,0) | — | MI_DevRed |
| 8 | LVL_Z1_STR_NorthWall_Gate | WallDoorDouble_400x300 | (500, 780, 0) | (0,0,0) | — | MI_DevRed |
| 9 | LVL_Z1_STR_NorthWall_East | Wall_400x300 | (800, 780, 0) | (0,0,0) | — | MI_DevRed |
| 10 | LVL_Z1_STR_GateDoor | RotativeDoor_01 | (500, 780, 0) | (0,0,0) | — | MI_DevGreen |
| 11 | LVL_Z1_STR_HouseSouthWall | WallWindow_400x300 | (400, 30, 0) | (0,0,0) | — | MI_DevWhite |
@@ -366,9 +370,9 @@ LVL_SuburbanV01/
| 20 | LVL_Z1_STR_HouseRoof_02 | Floor_300x400 | (650, 230, 280) | (0,0,0) | — | MI_DevBrown |
| 21 | LVL_Z1_STR_CourtyardFloor | Floor_1000x1000 | (500, 400, 0) | (0,0,0) | (1, 0.8, 1) | MI_DevGray |
> **Z1 房屋内空间**:约 (200,30,0)→(800,410,280),即 600×380×280cm。
> **门洞高度问题**:WallDoor_200x300 门洞 200cm 宽,300cm 高,但设计要求院门高度 220cm。300cm 资产足够高,门洞实际开口约 200cm 高(标准 BSP 门洞),对于 120cm 身高儿童足够通过。
> **房屋北墙上方补齐**:WallDoor_200x300 上方需要补齐至 280cm。可用 Wall_200x100 放在 Z=200 处,或者直接用 Wall_400x300 整块(门洞在下方,上方自然有墙体)。
> **院门修改**:改用 WallDoorDouble_400x300(双开门洞墙),门洞更宽(~200cm),匹配执行案院门 200cm 宽要求。
> **Z1 房屋**:西墙/东墙旋转 (0,90,0) 使其沿 Y 轴展开,正确围合房屋。
> **房屋北墙**:WallDoor_200x300 门洞用于室内木门(100cm 宽足够),上方用 Wall_400x300 自然覆盖。
#### C1.2 布景物(Props)
@@ -679,17 +683,18 @@ LVL_SuburbanV01/
#### C7.1 结构体
| # | Actor 名称 | 资产 | 位置 (X,Y,Z) | 缩放 | 材质 |
|---|-----------|------|-------------|------|------|
| 1 | LVL_Z7_STR_Building | Building_01 | (6400, 800, 0) | — | MI_DevGray |
| 2 | LVL_Z7_STR_CollisionFront | Wall_400x300 | (6200, 150, 0) | — | MI_DevGray |
| 3 | LVL_Z7_STR_CollisionFront2 | Wall_400x300 | (6600, 150, 0) | — | MI_DevGray |
| 4 | LVL_Z7_STR_CollisionFront3 | Wall_400x300 | (7000, 150, 0) | — | MI_DevGray |
| 5 | LVL_Z7_STR_CollisionSide | Wall_400x300 | (5750, 400, 0) | (0,90,0) | MI_DevGray |
| 6 | LVL_Z7_STR_CollisionSide2 | Wall_400x300 | (5750, 800, 0) | (0,90,0) | MI_DevGray |
| # | Actor 名称 | 资产 | 位置 (X,Y,Z) | 旋转 (P,Y,R) | 缩放 | 材质 |
|---|-----------|------|-------------|-------------|------|------|
| 1 | LVL_Z7_STR_Building | Building_01 | (6400, 800, 0) | (0,0,0) | — | MI_DevGray |
| 2 | LVL_Z7_STR_CollisionFront | Wall_400x300 | (6200, 150, 0) | (0,0,0) | — | MI_DevGray |
| 3 | LVL_Z7_STR_CollisionFront2 | Wall_400x300 | (6600, 150, 0) | (0,0,0) | — | MI_DevGray |
| 4 | LVL_Z7_STR_CollisionFront3 | Wall_400x300 | (7000, 150, 0) | (0,0,0) | — | MI_DevGray |
| 5 | LVL_Z7_STR_CollisionSide | Wall_400x300 | (5750, 400, 0) | (0,90,0) | — | MI_DevGray |
| 6 | LVL_Z7_STR_CollisionSide2 | Wall_400x300 | (5750, 800, 0) | (0,90,0) | — | MI_DevGray |
> Building_01 放置在 (6400, 800) — 即区域中心偏南。
> 碰撞围墙阻挡玩家靠近。Building_01 的默认尺寸可能与设计 1200×600 有出入,需在编辑器中调整。
> CollisionFront 沿 X 轴展开(不旋转),CollisionSide 沿 Y 轴展开(Yaw=90°)。
> 碰撞围墙同时作为全局南边界的一部分(X=5800-7000 区段),南边界不再重复放置围挡。
#### C7.2 布景物