static void CreatePalette(string tilesetName, string tilesetTileTargetDir, ImportedTile[] tileAssets, bool singleImageTileset, int tileWidth, int tileHeight, int columns, int cellWidth, int cellHeight)
        {
            GameObject newPaletteGO = new GameObject(tilesetName, typeof(Grid));

            newPaletteGO.GetComponent <Grid>().cellSize = new Vector3(1.0f, 1.0f, 0.0f);
            GameObject paletteTilemapGO = new GameObject("Layer1", typeof(Tilemap), typeof(TilemapRenderer));

            paletteTilemapGO.transform.SetParent(newPaletteGO.transform);

            paletteTilemapGO.GetComponent <TilemapRenderer>().enabled = false;

            Tilemap paletteTilemap = paletteTilemapGO.GetComponent <Tilemap>();

            paletteTilemap.tileAnchor = TiledTSXImporter.GetPivot(tileWidth, tileHeight, cellWidth, cellHeight);
            if (columns <= 0)
            {
                columns = 5;
            }

            if (singleImageTileset)
            {
                for (int i = 0; i < tileAssets.Length; i++)
                {
                    Sprite sprite = tileAssets[i].tile.sprite;
                    Rect   rect   = sprite.rect;
                    int    x      = (int)rect.x / tileWidth;
                    int    y      = (int)rect.y / tileHeight;
                    paletteTilemap.SetTile(new Vector3Int(x, y, 0), tileAssets[i].tile);
                }
            }
            else
            {
                int x = 0;
                int y = 0;
                for (int i = 0; i < tileAssets.Length; i++)
                {
                    paletteTilemap.SetTile(new Vector3Int(x, y, 0), tileAssets[i].tile);
                    x++;
                    if (x >= columns)
                    {
                        x = 0;
                        y--;
                    }
                }
            }
            string palettePath = tilesetTileTargetDir + Path.DirectorySeparatorChar + tilesetName + ".prefab";

            palettePath = palettePath.Replace('\\', '/');
            UnityEngine.Object newPrefab = PrefabUtility.CreateEmptyPrefab(palettePath);
            PrefabUtility.ReplacePrefab(newPaletteGO, newPrefab, ReplacePrefabOptions.Default);
            GameObject.DestroyImmediate(newPaletteGO);

            GridPalette gridPalette = ScriptableObject.CreateInstance <GridPalette>();

            gridPalette.cellSizing = GridPalette.CellSizing.Automatic;
            gridPalette.name       = "Palette Settings";
            AssetDatabase.AddObjectToAsset(gridPalette, palettePath);
            AssetDatabase.ImportAsset(palettePath);
        }
        static void CreatePalette(string tilesetName, string tilesetTileTargetDir, ImportedTile[] tileAssets, bool singleImageTileset, int tileWidth, int tileHeight, int columns, int cellWidth, int cellHeight)
        {
            GameObject newPaletteGO = new GameObject(tilesetName, typeof(Grid));

            newPaletteGO.GetComponent <Grid>().cellSize = new Vector3(1.0f, 1.0f, 0.0f);
            GameObject paletteTilemapGO = new GameObject("Layer1", typeof(Tilemap), typeof(TilemapRenderer));

            paletteTilemapGO.transform.SetParent(newPaletteGO.transform);

            paletteTilemapGO.GetComponent <TilemapRenderer>().enabled = false;

            Tilemap paletteTilemap = paletteTilemapGO.GetComponent <Tilemap>();

            paletteTilemap.tileAnchor = TiledTSXImporter.GetPivot(tileWidth, tileHeight, cellWidth, cellHeight);
            if (columns <= 0)
            {
                columns = 5;
            }

            if (singleImageTileset)
            {
                for (int i = 0; i < tileAssets.Length; i++)
                {
                    Sprite sprite = tileAssets[i].tile.sprite;
                    Rect   rect   = sprite.rect;
                    int    x      = (int)rect.x / tileWidth;
                    int    y      = (int)rect.y / tileHeight;
                    paletteTilemap.SetTile(new Vector3Int(x, y, 0), tileAssets[i].tile);
                }
            }
            else
            {
                int x = 0;
                int y = 0;
                for (int i = 0; i < tileAssets.Length; i++)
                {
                    paletteTilemap.SetTile(new Vector3Int(x, y, 0), tileAssets[i].tile);
                    x++;
                    if (x >= columns)
                    {
                        x = 0;
                        y--;
                    }
                }
            }
            string palettePath = tilesetTileTargetDir + Path.DirectorySeparatorChar + tilesetName + ".prefab";

            palettePath = palettePath.Replace('\\', '/');

            bool       createdPrefab = false;
            GameObject newPrefab     = PrefabUtility.SaveAsPrefabAsset(newPaletteGO, palettePath, out createdPrefab);

            Debug.Log("Created tile palette asset = " + createdPrefab);

            AssetDatabase.SaveAssets();

            UnityEngine.GameObject.DestroyImmediate(newPaletteGO);

            // Clear out any old subassets
            UnityEngine.Object[] assets = AssetDatabase.LoadAllAssetsAtPath(palettePath);
            for (int i = 0; i < assets.Length; i++)
            {
                UnityEngine.Object asset = assets[i];
                if (!AssetDatabase.IsMainAsset(asset) && asset is GridPalette)
                {
                    UnityEngine.Object.DestroyImmediate(asset, true);
                }
            }

            GridPalette gridPalette = ScriptableObject.CreateInstance <GridPalette>();

            gridPalette.cellSizing = GridPalette.CellSizing.Automatic;
            gridPalette.name       = "Palette Settings";
            AssetDatabase.AddObjectToAsset(gridPalette, newPrefab);
            AssetDatabase.SaveAssets();
        }