Давайте предположим, что у вас есть 2D массив геймобжекты, которые представляют каждый объект
objects = new GameObject[sizeX][sizeY];
Затем вам нужно будет получить индексы двух щелкнули объекта (не знаю, как вы хотите, чтобы определить это, вы можете сделать кучу коллайдеров для каждого объекта, затем использовать OnMouseDown и raycasting, или Unity, встроенный в проверку, если объект щелкнул, или просто определить, на какой объект щелкнут, на основе положения мыши и жестко закодированных значений, где находятся объекты).
После того, как вы получите индексы для двух щелкнутых объектов, каждый объект между этими двумя индексами является членом прямоугольника. Проблема в том, что вы не уверены, в каком направлении должен идти цикл (например, вы нажали 1-й объект, затем 5-й объект и цикл для этой оси идут ++, но если вы нажмете 5-й, а затем 1-й, тогда цикл пройдет -).
Мы определяем направление, как это:
int indexX1;
int indexY1;
int indexX2;
int indexY2;
int dirX;
int dirY;
if(indexX1 > indexX2) dirX = 1; else dirX = -1;
if(indexY1 > indexY2) dirY = 1; else dirY = -1;
for(int i = indexX1; i * dirX < indexX2 * dirX; i+=dirX){
for(int j = indexY1; i * dirY < indexY2 * dirY; i+=dirY){
//your code goes here
}
}
Эта вещь с Dir работает из-математического термина:
х> у
< -x -y
например.
5> 3 |
-5 < -3
Но самая большая проблема в том, что я должен проверить положение каждого объекта в игре все время, я хочу, чтобы нарисовать прямоугольник так:/Может быть, я должен делить мир на куски или что-то, поэтому проверка всего не будет необходимой. – Konowy