/* PyxelEditReader in DTU gives you an easy access to canvas, layers, palette, tileset, tilemap and animations in PyxelEdit file. Here's an example how to convert PyxelEdit file into atlassed tileset and import that as Unity sprites 1. Load PyxelEdit file 2. Generate atlas using DTU AtlasGenerator and sprites "tile0", "tile1"... 3. Save atlas and setup it to use sprites using AtlasGenerator layout 4. Reimport the atlas and extract Unity sprites */ public Sprite[] ExportTilesetAsSprites() { //############################# // 1. Load PyxelEdit file //############################# PyxelEditFile pef = PyxelEditReader.ReadPE("Assets/mytiles.pyxel"); //############################# // 2. Generate atlas //############################# // generate atlas for Unity var tiles = pef.tileset.tileTextures; AtlasGenerator ag = new AtlasGenerator(); ag.parameters.packingMethod = AtlasGenerator.PackingMethod.SpriteSheet; ag.parameters.padding = 0; ag.parameters.packingDirection = AtlasGenerator.PackingDirection.TopDown; for (int i = 0; i < tiles.Count; i++) ag.AddAtlasRect(tiles[i], "tile" + i); if (!ag.GenerateLayout()) return null; var atlas = ag.GenerateTexture(); //############################# // 3. Save atlas and setup Unity sprites //############################# var atlasPath = "Assets/mytiles.png"; var savedAtlas = TextureUtils.SavePNG(atlas, atlasPath); // setup Unity sprite settings UnityEditor.TextureImporter ti = UnityEditor.AssetImporter.GetAtPath(assetPath) as UnityEditor.TextureImporter; if (ti == null) { AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceSynchronousImport); ti = UnityEditor.AssetImporter.GetAtPath(assetPath) as UnityEditor.TextureImporter; } ti.textureType = TextureImporterType.Sprite; ti.spriteImportMode = SpriteImportMode.Multiple; ti.spritePixelsPerUnit = pef.canvas.tileWidth; // we have 1 world unit = 1 tile // create sprite metadata from atlas generator layout List spritesheet = new List(); for (int i = 0; i < ag.rectCount; i++) { AtlasGenerator.AtlasRect rect = ag.GetRect(i); SpriteMetaData smd = new SpriteMetaData(); smd.rect = new Rect(rect.rect.x, rect.rect.y, rect.rect.width, rect.rect.height); smd.name = rect.id; spritesheet.Add(smd); } ti.spritesheet = spritesheet.ToArray(); //############################# // 4. Reimport the atlas and extract Unity sprites //############################# AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceSynchronousImport); // finally load sprites // load sprites as well Object[] generatedSpritesAssets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(atlasPath)); List sprites = new List(); // take only the sprites (first entry is usually the actual Texture2D) foreach (var spriteAsset in generatedSpritesAssets) { Sprite sprite = spriteAsset as Sprite; if (sprite) sprites.Add(sprite); } return sprites.ToArray(); }