Ejemplo n.º 1
0
    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);
    }