Files
BookRPG/Library/PackageCache/com.unity.2d.tooling@9d6aff712598/Editor/Insider/SpriteAtlas/SpriteAtlasReportUtility.cs
2026-07-16 21:49:59 +01:00

78 lines
3.0 KiB
C#

using System.Collections.Generic;
using UnityEditor.U2D.Common;
using UnityEngine;
using UnityEngine.U2D;
namespace UnityEditor.U2D.Tooling.Analyzer
{
class SpriteAtlasReportUtility
{
public static List<(Sprite sprite, GUID assetGUID)> GetAtlasSpritesToPack(SpriteAtlas atlasToPack)
{
var packables = atlasToPack.GetPackables();
var masterAtlas = atlasToPack.isVariant ? atlasToPack.GetMasterAtlas() : null;
if (masterAtlas != null)
{
packables = masterAtlas.GetPackables();
}
var sprites = new List<(Sprite sprite, GUID assetGUID)>();
for (int i = 0; i < packables.Length; ++i)
{
var packable = packables[i];
if (packable == null)
continue;
if (packable is DefaultAsset folder)
{
var folderPath = AssetDatabase.GetAssetPath(folder);
var spriteGuids = AssetDatabase.FindAssets("t:Sprite", new[] { folderPath });
for (int j = 0; j < spriteGuids.Length; ++j)
{
var spritePath = AssetDatabase.GUIDToAssetPath(spriteGuids[j]);
var assets = AssetDatabase.LoadAllAssetsAtPath(spritePath);
foreach (var asset in assets)
{
if (asset is Sprite sprite)
{
GUID.TryParse(spriteGuids[j], out GUID assetGUID);
sprites.Add((sprite, assetGUID));
}
}
}
}
else if (packable is Texture2D)
{
var texturePath = AssetDatabase.GetAssetPath(packable);
var assets = AssetDatabase.LoadAllAssetsAtPath(texturePath);
var assetGUID = AssetDatabase.GUIDFromAssetPath(texturePath);
foreach (var asset in assets)
{
if (asset is Sprite sprite)
{
sprites.Add((sprite,assetGUID));
}
}
}
else if (packable is Sprite sprite)
{
sprites.Add((sprite, AssetDatabase.GUIDFromAssetPath(AssetDatabase.GetAssetPath(sprite))));
}
else
{
Debug.LogError("Packed is " + packable.GetType());
}
}
return sprites;
}
public static (SpriteFitDataTask task,List<(Sprite sprite, GUID assetGUID)> sprites) PackAtlas(SpriteAtlas atlasToPack)
{
var sprites = GetAtlasSpritesToPack(atlasToPack);
return (SpriteAtlasBridge.SpriteAtlasFitDataAsync(atlasToPack, sprites.Count),sprites);
}
}
}