2016-11-01 2 views
0

Итак, я получил этот кусок кода, который заполняет заданную область определенного размера напольной плитки.Unity Rectangle Overlapping

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); 
} 

Но все же у меня проблема, когда некоторые из моих комнат перекрываются. Что я делаю неправильно и что мне делать, чтобы исправить эту проблему?

ответ

0

Это звучит, как вам нужно использовать метод Overlaps вместо ...

+0

Я попытался использовать его, но у меня была та же проблема. –

+0

Это должен быть комментарий, а не ответ. – FakeCaleb

+0

У меня нет необходимой репутации для комментариев. Спасибо за проголосовать, хотя:/ –

0

Yeeah. Я просто решил проблему, перейдя через весь список, а не выбрав последний элемент в списке.