Функция действительно проста для понимания.Сначала он просматривает каждого дочернего элемента с помощью foreach, затем сохраняет округленную позицию дочернего элемента в переменной.Затем он выясняет, находится ли эта позиция внутри границы, а затем выясняет, есть ли уже блок в той же записи сетки.
Другими словами - каждый раз, когда фигура перемещаетсяили поверните, вы должны проверить, была ли эта позиция действительной.
Вы делаете это, проверяя, что положение фигуры находится в пределах границ и что фигура не пересекается с другими формами.
Если оно выходит за границы или пересекается с другими фигурами, вы отменяете свое последнее действие.
Действие: transform.Rotate(0, 0, -90);
Отмена: transform.Rotate(0, 0, 90);
// Rotate
else if (Input.GetKeyDown(KeyCode.UpArrow)) {
transform.Rotate(0, 0, -90);
// See if valid
if (isValidGridPos())
// It's valid. Update grid.
updateGrid();
else
// It's not valid. revert.
transform.Rotate(0, 0, 90);
}