So I was looking for a way to automatically generate a spritesheet from an imported texture. And I found this thread with an example on how to do so. However when trying it out myself using the InternalSpriteUtility.GenerateGridSpriteRectangles() - Method It generates my sprites but the sprites are 22x32 instead of 32x32 as in the metadata spritesheet.
In the console the SpriteMetaData rects are 32x32 in the spritesheet, but when postprocessing the sprites they’re 22x32.
Any help is appreciated!
public class OverWorldSpriteAnimationImporter : AssetPostprocessor
{
static string animationFolder = "Assets/Overworlds/Overworld Animations";
public void OnPreprocessTexture()
{
if (assetPath.Contains("Overworlds/Spritesheets"))
{
if (!AssetDatabase.IsValidFolder(animationFolder))
{
Debug.Log("Created folder: " + animationFolder);
AssetDatabase.CreateFolder("Assets/Overworlds", "Overworld Animations");
}
Debug.Log("OnPreprocesstexture overwriting defaults...");
TextureImporter importer = assetImporter as TextureImporter;
importer.textureType = TextureImporterType.Sprite;
importer.spriteImportMode = SpriteImportMode.Multiple;
importer.spritePixelsPerUnit = 32;
importer.alphaSource = TextureImporterAlphaSource.FromInput;
importer.wrapMode = TextureWrapMode.Repeat;
importer.mipmapEnabled = true;
importer.spriteBorder = new Vector2(32, 32);
importer.textureCompression = TextureImporterCompression.Uncompressed;
}
}
public void OnPostprocessTexture(Texture2D texture)
{
if (assetPath.Contains("Overworlds/Spritesheets"))
{
TextureImporter importer = assetImporter as TextureImporter;
if (importer.spriteImportMode != SpriteImportMode.Multiple)
return;
Debug.Log("OnPostprocessTexture generating sprites...");
Vector2 spriteSize = new Vector2(32, 32);
Rect[] rects = InternalSpriteUtility.GenerateGridSpriteRectangles(texture, Vector2.zero, spriteSize, Vector2.zero);
List<SpriteMetaData> metas = new List<SpriteMetaData>();
string fileNameNoExtension = Path.GetFileNameWithoutExtension(assetPath);
for (int i = 0; i < rects.Length; i++)
{
SpriteMetaData meta = new SpriteMetaData();
meta.rect = rects[i];
meta.name = fileNameNoExtension + "_" + i;
metas.Add(meta);
}
importer.spritesheet = metas.ToArray();
Debug.Log("Meta rects:");
for (int i = 0; i < importer.spritesheet.Length; i++)
{
Debug.Log(importer.spritesheet[i].rect);
}
}
}
public void OnPprocessSprites(Texture2D texture, Sprite[] sprites)
{
Debug.Log("Sprite rects:");
for (int i = 0; i < sprites.Length; i++)
{
Debug.Log(sprites[i].rect);
}
}