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 OriginTexture2TextureInfo = new(); public List 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()); } } }