2025-11-05 17:34:40 +08:00

57 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using Unity.Mathematics;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering;
namespace TexturePacker
{
public sealed class TextureMapInfo : ScriptableObject
{
public const string TextureMapDir = "Assets/Editor/TexturePack/Resources";
[Serializable]
public struct TextureInfo
{
public Texture2D OriginTexture;
public int ArrayIndex;
public float2 Offset;
}
[Serializable]
public enum EPackType
{
Atlas,
Array
}
public EPackType PackType = EPackType.Atlas;
public SerializedDictionary<Texture2D, TextureInfo> OriginTexture2TextureInfo = new();
public List<Texture2D> Textures;
public Texture2D TextureAtlas;
public float AtlasScale;
public string TextureAtlasPath;
public Texture2DArray TextureArray;
public string TextureArrayPath;
public bool IsNormalMap;
[ContextMenu("Test")]
private void Test()
{
Texture2D offsetTex = new Texture2D(Textures.Count, 1, TextureFormat.RG16, false);
for (int i = 0; i < Textures.Count; i++)
{
var tex = Textures[i];
var info = OriginTexture2TextureInfo[tex];
offsetTex.SetPixel(i, 0, new Color(info.Offset.x, info.Offset.y, 0));
}
var path = EditorUtility.SaveFilePanelInProject("保存offset图", "OffsetMap", "png", "");
File.WriteAllBytes(path, offsetTex.EncodeToPNG());
}
}
}