【问题标题】:Unity Rectangle Overlapping统一矩形重叠
【发布时间】:2017-03-14 10:50:12
【问题描述】:

所以我得到了这段代码,它用地砖填充了特定大小的给定区域。

while (roomsPlaced < roomCount.maximum)
{
    Vector3 randomPosition = RandomPosition();
    int roomHeight = GetRandomNumber(8, 15);
    int roomWidth = GetRandomNumber(6, 15);

    if (OutOfMap(randomPosition, roomHeight,roomWidth))
    {
        continue;
    }

    if (roomsPlaced > 0) {
        if (Overlaps(new Rect(randomPosition.x, randomPosition.y, roomWidth, roomHeight), roomPositions[roomPositions.Count -1]))
            continue;
    }

    roomPositions.Add(new Rect(randomPosition.x, randomPosition.y, roomWidth, roomHeight));

    for (int x = (int)randomPosition.x; x <= (int)randomPosition.x + roomWidth; x++)
    {
        for (int y = (int)randomPosition.y; y <= (int)randomPosition.y + roomHeight; y++)
        {
            if (x == randomPosition.x || y == randomPosition.y)
                toInstantiate = floorTiles[Random.Range(0, floorTiles.Length)];

            GameObject instance = Instantiate(toInstantiate, new Vector3(x, y, 0f), Quaternion.identity) as GameObject;

            instance.transform.SetParent(boardHolder);
        }
    }

    roomsPlaced++;
}

这里的函数应该检查当前矩形是否与列表中的最后一个矩形重叠。

bool Overlaps(Rect rA, Rect rB)
{
    return (rA.x < rB.x + rB.width && rA.x + rA.width > rB.x && rA.y < rB.y + rB.height && rA.y + rA.height > rB.y);
}

但是当我的一些房间重叠时,我仍然有问题。 我做错了什么,我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: c# unity3d rectangles overlapping


    【解决方案1】:

    听起来您需要改用Overlaps 方法...

    【讨论】:

    • 这应该是评论,而不是答案。
    • 我没有必要的代表发表评论。感谢您的反对票:/
    • 我认为投反对票是合理的,我建议您耐心等待,直到您需要评论为止
    【解决方案2】:

    是的。我只是通过遍历整个列表而不是选择列表中的最后一个元素来解决问题。

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 2023-04-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 2017-01-15
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多