101 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
		
		
			
		
	
	
			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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |