private Tilemap CopyAndColorTilemap(string p_newTilemapName, Tilemap p_original, Color p_color, int p_zPosition) { GameObject newTilemap = new GameObject(p_newTilemapName); newTilemap.transform.parent = p_original.transform.parent; newTilemap.layer = LayerMask.NameToLayer("LevelMap"); newTilemap.transform.position += new Vector3(0, 0, p_zPosition); Tilemap levelMapTilemap = (Tilemap)p_original.Copy(typeof(Tilemap), newTilemap); TilemapRenderer tileRenderer = (TilemapRenderer)p_original.Copy(typeof(TilemapRenderer), newTilemap); Material mat = new Material(m_mapMaterial); mat.SetColor(Shader.PropertyToID("_Color"), p_color); tileRenderer.material = mat; List <Vector3Int> positions = new List <Vector3Int>(); List <TileBase> tiles = new List <TileBase>(); for (int y = p_original.origin.y; y < (p_original.origin.y + p_original.size.y); y++) { for (int x = p_original.origin.x; x < (p_original.origin.x + p_original.size.x); x++) { Vector3Int position = new Vector3Int(x, y, 0); TileBase tile = p_original.GetTile(position); if (tile != null) { positions.Add(position); tiles.Add(tile); } } } levelMapTilemap.SetTiles(positions.ToArray(), tiles.ToArray()); foreach (Vector3Int pos in positions) { levelMapTilemap.SetTileFlags(pos, TileFlags.None); levelMapTilemap.SetColor(pos, p_color); } return(levelMapTilemap); }