find-object-bundle-builder/FindVerticalBundleBuilder/Assets/Editor/AtlasUtils.cs

101 lines
3.8 KiB
C#

using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.U2D;
using UnityEngine;
using UnityEngine.U2D;
public static class AtlasUtils
{
public static SpriteAtlas CreateAtlas(string name, List<Sprite> sprites, string path, int packPadding = 2,
FilterMode filterMode = FilterMode.Bilinear,
int maxTextureSize = 2048,
TextureImporterFormat androidFormat = TextureImporterFormat.ASTC_6x6,
TextureImporterFormat iosFormat = TextureImporterFormat.ASTC_6x6)
{
SpriteAtlas spriteAtlas = new SpriteAtlas();
spriteAtlas.Add(sprites.ToArray());
spriteAtlas.SetProjectCommonSetting(name, packPadding, filterMode, maxTextureSize, androidFormat, iosFormat);
string assetPath = $"{path}/{spriteAtlas.name}.spriteatlas";
if (File.Exists(assetPath))
{
File.Delete(assetPath);
AssetDatabase.Refresh();
}
AssetDatabase.CreateAsset(spriteAtlas,$"{path}/{spriteAtlas.name}.spriteatlas");
return spriteAtlas;
}
}
public static partial class Extensions
{
public static SpriteAtlas SetProjectCommonSetting(this SpriteAtlas spriteAtlas, string name, int packPadding = 2,
FilterMode filterMode = FilterMode.Bilinear,
int maxTextureSize = 2048,
TextureImporterFormat androidFormat = TextureImporterFormat.ASTC_6x6,
TextureImporterFormat iosFormat = TextureImporterFormat.ASTC_6x6)
{
spriteAtlas.name = name;
spriteAtlas.SetCommonPackingSetting(packPadding)
.SetCommonTextureSetting(filterMode)
.SetCommonAndroidTextureSettings(maxTextureSize, androidFormat)
.SetCommonIOSTextureSettings(maxTextureSize, iosFormat);
return spriteAtlas;
}
public static SpriteAtlas SetCommonPackingSetting(this SpriteAtlas spriteAtlas, int padding = 2)
{
SpriteAtlasPackingSettings packingSettings = new SpriteAtlasPackingSettings
{
enableTightPacking = false,
enableRotation = false,
blockOffset = 1,
padding = padding
};
spriteAtlas.SetPackingSettings(packingSettings);
return spriteAtlas;
}
public static SpriteAtlas SetCommonTextureSetting(this SpriteAtlas spriteAtlas, FilterMode filterMode = FilterMode.Bilinear)
{
SpriteAtlasTextureSettings textureSettings = new SpriteAtlasTextureSettings
{
readable = false,
anisoLevel = 1,
filterMode = filterMode,
generateMipMaps = false,
sRGB = true
};
spriteAtlas.SetTextureSettings(textureSettings);
return spriteAtlas;
}
public static SpriteAtlas SetCommonAndroidTextureSettings(this SpriteAtlas spriteAtlas, int maxTextureSize = 2048, TextureImporterFormat format = TextureImporterFormat.ASTC_6x6)
{
TextureImporterPlatformSettings settings = new TextureImporterPlatformSettings
{
name = "Android",
maxTextureSize = maxTextureSize,
format = format,
overridden = true,
textureCompression = TextureImporterCompression.Compressed
};
spriteAtlas.SetPlatformSettings(settings);
return spriteAtlas;
}
public static SpriteAtlas SetCommonIOSTextureSettings(this SpriteAtlas spriteAtlas, int maxTextureSize = 2048, TextureImporterFormat format = TextureImporterFormat.ASTC_4x4)
{
TextureImporterPlatformSettings settings = new TextureImporterPlatformSettings
{
name = "iPhone",
maxTextureSize = maxTextureSize,
format = format,
overridden = true,
textureCompression = TextureImporterCompression.Compressed
};
spriteAtlas.SetPlatformSettings(settings);
return spriteAtlas;
}
}