You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity房间生成系统死胡同识别异常问题求助

问题排查与解决方案

核心问题原因

  1. 计数未重置
    roomCorridorCount变量在遍历每个房间前没有重置为0,导致后续房间的计数是之前所有房间的累加值,完全偏离实际走廊连接数量。比如第一个房间统计出1条走廊,第二个房间即使有2个连接方向,计数会变成3,无法被正确判定;若第一个房间计数为2,第二个房间无连接,计数仍为2,会被误判为非死胡同。

  2. 同一方向走廊重复计数
    遍历所有走廊格子时,同一个房间的单一连接方向(比如右侧)如果有多个连续的走廊 tile,会被多次触发计数。例如房间右侧有3个走廊格子,代码会让roomCorridorCount加3,而实际该房间只有1个连接方向,本该是死胡同却被错误排除。

修复后的代码实现

HashSet<Vector2Int> corridors = ConnectRooms(roomCenters);
HashSet<Vector2Int> deadEnds = new HashSet<Vector2Int>();
HashSet<Vector2Int> nearRoomCenter = new HashSet<Vector2Int>();
HashSet<Vector2Int> oneCorridorRooms = new HashSet<Vector2Int>();

// 定义四个方向的偏移量
Vector2Int[] directions = new Vector2Int[] {
    Vector2Int.right,
    Vector2Int.left,
    Vector2Int.up,
    Vector2Int.down
};

foreach (var room in newRoomCenters)
{
    int roomCorridorCount = 0; // 每个房间遍历前重置计数
    foreach (var dir in directions)
    {
        Vector2Int checkPos = room + dir;
        if (corridors.Contains(checkPos))
        {
            roomCorridorCount++;
            nearRoomCenter.Add(checkPos);
            // 每个方向只统计一次,避免重复计数
            continue;
        }
    }

    if (roomCorridorCount == 1)
    {
        deadEnds.Add(room);
        oneCorridorRooms.Add(room);
    }
}

// 后续渲染逻辑保持不变
tilemapVisualizer.PaintTiles(corridors, floorMap, white);
tilemapVisualizer.PaintTiles(newRoomCenters, floorMap, green);
tilemapVisualizer.PaintTiles(nearRoomCenter, floorMap, orange);
tilemapVisualizer.PaintTiles(oneCorridorRooms, floorMap, pink);
floor.UnionWith(corridors);

if(deadEnds.Count > 0)
{
    var playerSpawnRoom = deadEnds.ElementAt(Random.Range(0, deadEnds.Count));
}
Debug.Log(deadEnds.Count);

额外优化建议

如果你的房间是矩形区域(而非仅中心一个点),建议改为检查房间边缘的所有格子是否与走廊连接,而不是仅房间中心的四个方向。这样能避免因走廊连接到房间边缘而非中心,导致死胡同漏判的情况。例如:

  • 先为每个房间存储其所有占据的格子集合
  • 遍历房间的边缘格子,检查是否有相邻的走廊格子
  • 统计该房间有多少个不同的连接方向(上下左右),若为1则判定为死胡同

内容的提问来源于stack exchange,提问作者Spacter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:53:19