private void ChangeCollisionLayers(MapPropertiesBrush brush, MapProperties properties, CollisionLayer layer) { brush.Selection.HasDifferentCollisionLayer = false; brush.ActiveTileInfo.CollisionLayer = layer; foreach (var position in brush.Selection.Bounds.allPositionsWithin) { if (layer == CollisionLayer.None) { var tile = properties.GetTile(new Vector2Int(position.x, position.y)); if (tile != null) { tile.CollisionLayer = CollisionLayer.None; } } else { var tile = properties.AddOrGetTile(new Vector2Int(position.x, position.y)); tile.CollisionLayer = layer; } } var size = brush.Selection.Bounds.size.x * brush.Selection.Bounds.size.y; var tileArray = Enumerable.Repeat(brush.CollisionTile, size).ToArray(); var nullArray = new TileBase[size]; for (int index = 0, value = 1; index < CollisionLayerData.LayerCount; index++, value *= 2) { if ((value & (int)layer) > 0) { var tilemap = properties.AddOrGetCollisionLayer(index); tilemap.SetTilesBlock(brush.Selection.Bounds, tileArray); } else { var tilemap = properties.GetCollisionLayer(index); if (tilemap) { tilemap.SetTilesBlock(brush.Selection.Bounds, nullArray); properties.CheckForCollisionRemoval(tilemap, index); } } } properties.UpdateBounds(); }