HonorLee 4 months ago
parent
commit
d539ee9c82

+ 18 - 9
CrossgateToolkit/Anime.cs

@@ -53,7 +53,8 @@ namespace CrossgateToolkit
         //GraphicInfo;
         public GraphicInfoData GraphicInfo;
         //动画Sprite
-        public Dictionary<int,Sprite> AnimeSprites = new Dictionary<int, Sprite>();
+        // public Dictionary<int,Sprite> AnimeSprites = new Dictionary<int, Sprite>();
+        public Dictionary<int,Dictionary<bool,Sprite>> AnimeSprites = new Dictionary<int, Dictionary<bool, Sprite>>();
     }
 
     //动画数据
@@ -80,7 +81,8 @@ namespace CrossgateToolkit
         public AnimeFlag FLAG;
         // 高版本 - 结束标识
         public byte[] FLAG_END;
-        public Dictionary<int,Texture2D> AnimeTextures = new Dictionary<int, Texture2D>();
+        // public Dictionary<int,Texture2D> AnimeTextures = new Dictionary<int, Texture2D>();
+        public Dictionary<int,Dictionary<bool,Texture2D>> AnimeTextures = new Dictionary<int, Dictionary<bool, Texture2D>>();
         // public Texture2D AnimeTexture;
         public List<AnimeFrameInfo> AnimeFrameInfos;
         // public byte[] unknown;
@@ -306,9 +308,12 @@ namespace CrossgateToolkit
         }
 
         //预处理动画图形合批烘焙
-        public static void BakeAnimeFrames(AnimeDetail animeDetail,int palet = 0)
+        public static void BakeAnimeFrames(AnimeDetail animeDetail,int palet = 0, bool linear = false)
         {
-            if(animeDetail.AnimeTextures.ContainsKey(palet)) return;
+            if (animeDetail.AnimeTextures.ContainsKey(palet))
+            {
+                if(animeDetail.AnimeTextures[palet].ContainsKey(linear)) return;
+            }
             //所有帧的图形数据
             GraphicDetail[] graphicDetails = new GraphicDetail[animeDetail.FrameCount];
             
@@ -324,7 +329,7 @@ namespace CrossgateToolkit
                 if (graphicInfoData == null) continue;
                 int subPaletIndex = 0;
                 if (animeDetail.IsHighVersion) subPaletIndex = (int)animeDetail.Serial;
-                GraphicDetail graphicDetail = GraphicData.GetGraphicDetail(graphicInfoData, palet, subPaletIndex);
+                GraphicDetail graphicDetail = GraphicData.GetGraphicDetail(graphicInfoData, palet, subPaletIndex, linear);
                 if(graphicDetail == null) continue;
                 graphicDetails[i] = graphicDetail;
                 if(graphicDetail.Height > textureHeight) textureHeight = graphicDetail.Height;
@@ -336,8 +341,9 @@ namespace CrossgateToolkit
                 animeDetail.AnimeFrameInfos[i].GraphicInfo = graphicInfoData;
             }
             //合并图档
-            Texture2D texture2dMix = new Texture2D((int) textureWidth, (int) textureHeight, TextureFormat.RGBA4444, false,false);
-            texture2dMix.filterMode = FilterMode.Point;
+            Texture2D texture2dMix = new Texture2D((int) textureWidth, (int) textureHeight, TextureFormat.RGBA4444, false,linear);
+            if(linear) texture2dMix.filterMode = FilterMode.Bilinear;
+            else texture2dMix.filterMode = FilterMode.Point;
             Color32 transparentColor = new Color32(0, 0, 0, 0);
             Color32[] transparentColors = new Color32[texture2dMix.width * texture2dMix.height];
             for (var i = 0; i < transparentColors.Length; i++)
@@ -358,7 +364,9 @@ namespace CrossgateToolkit
             }
             texture2dMix.Apply();
             
-            animeDetail.AnimeTextures.Add(palet,texture2dMix);
+            if(!animeDetail.AnimeTextures.ContainsKey(palet)) animeDetail.AnimeTextures.Add(palet,new Dictionary<bool, Texture2D>());
+
+            animeDetail.AnimeTextures[palet].Add(linear, texture2dMix);
             
             //创建动画每帧Sprite
             offsetX = 0;
@@ -373,7 +381,8 @@ namespace CrossgateToolkit
                         animeDetail.AnimeFrameInfos[l].Width, animeDetail.AnimeFrameInfos[l].Height),
                     pivot, 1, 1, SpriteMeshType.FullRect);
                 offsetX += animeDetail.AnimeFrameInfos[l].Width + 5;
-                animeFrameInfo.AnimeSprites.Add(palet, sprite);
+                if(!animeFrameInfo.AnimeSprites.ContainsKey(palet)) animeFrameInfo.AnimeSprites.Add(palet,new Dictionary<bool, Sprite>());
+                animeFrameInfo.AnimeSprites[palet].Add(linear, sprite);
             }
             
         }

+ 70 - 27
CrossgateToolkit/AnimePlayer.cs

@@ -10,6 +10,7 @@
 
 using System.Collections.Generic;
 using UnityEngine;
+using UnityEngine.Serialization;
 using UnityEngine.UI;
 
 namespace CrossgateToolkit
@@ -58,15 +59,15 @@ namespace CrossgateToolkit
             public float FrameRate;
             public AnimeDetail AnimeDetail;
             public AnimeCallback onFinishCallback;
+            public int CurrentFrame = 0;
+            public bool KeepFrame = false;
         }
         
-        
-        
         //当前播放
         private uint _currentSerial;
         private AnimeOption _currentAnime;
         private AnimeFrame[] _frames;
-        private int _currentFrame;
+        // private int _currentFrame;
         
         //是否播放
         private bool isPlayable;
@@ -82,9 +83,12 @@ namespace CrossgateToolkit
         //绑定渲染对象
         [SerializeField,Header("Image渲染")] public bool isRenderByImage = false;
         [SerializeField,Header("序列帧合批")] public bool isFrameBatch = false;
+        [SerializeField,Header("线性过滤")] public bool isLinearFilter = false;
         [Header("序列帧Texture")] public Texture2D frameTexture;
+        
         private SpriteRenderer _spriteRenderer;
         private Image _imageRenderer;
+        
         private int _paletIndex = 0;
         public int PaletIndex
         {
@@ -114,8 +118,8 @@ namespace CrossgateToolkit
         {
             get
             {
-                float offsetX = -_frames[_currentFrame].AnimeFrameInfo.OffsetX;
-                float offsetY = _frames[_currentFrame].AnimeFrameInfo.OffsetY;
+                float offsetX = -_frames[_currentAnime.CurrentFrame].AnimeFrameInfo.OffsetX;
+                float offsetY = _frames[_currentAnime.CurrentFrame].AnimeFrameInfo.OffsetY;
                 return new Vector2(offsetX, offsetY);
             }
         }
@@ -131,6 +135,8 @@ namespace CrossgateToolkit
             if(_imageRenderer == null) _imageRenderer = gameObject.AddComponent<Image>();
             if(_spriteRenderer == null) _spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
             if(_rectTransform == null) _rectTransform = gameObject.AddComponent<RectTransform>();
+            
+            gameObject.SetActive(false);
         }
 
         private void Start()
@@ -167,6 +173,11 @@ namespace CrossgateToolkit
             get => _currentSerial;
             set
             {
+                if (value == 0)
+                {
+                    Stop();
+                    return;
+                }
                 Anime.DirectionType direction =
                     _currentAnime?.Direction ?? Anime.DirectionType.North;
                 Anime.ActionType actionType = _currentAnime?.actionType ?? Anime.ActionType.Stand;
@@ -189,6 +200,19 @@ namespace CrossgateToolkit
                 }
             }
         }
+        
+        // 动态调整播放回调
+        public AnimeCallback OnFinishCallback
+        {
+            get => _currentAnime?.onFinishCallback;
+            set
+            {
+                if (_currentAnime != null)
+                {
+                    _currentAnime.onFinishCallback = value;
+                }
+            }
+        }
 
         // 更新渲染模式
         private void _updateRenderMode()
@@ -312,7 +336,7 @@ namespace CrossgateToolkit
 
             if (isFrameBatch)
             {
-                Anime.BakeAnimeFrames(animeOption.AnimeDetail, _paletIndex);
+                Anime.BakeAnimeFrames(animeOption.AnimeDetail, _paletIndex, isLinearFilter);
                 //获取动画帧数据
                 for (int i = 0; i < animeOption.AnimeDetail.AnimeFrameInfos.Count; i++)
                 {
@@ -322,7 +346,7 @@ namespace CrossgateToolkit
                     frames[i] = new AnimeFrame();
                     frames[i].Index = i;
                     frames[i].GraphicInfo = animeOption.AnimeDetail.AnimeFrameInfos[i].GraphicInfo;
-                    frames[i].Sprite = animeOption.AnimeDetail.AnimeFrameInfos[i].AnimeSprites[_paletIndex];
+                    frames[i].Sprite = animeOption.AnimeDetail.AnimeFrameInfos[i].AnimeSprites[_paletIndex][isLinearFilter];
                     frames[i].AnimeFrameInfo = animeOption.AnimeDetail.AnimeFrameInfos[i];
                 }
             }
@@ -344,7 +368,7 @@ namespace CrossgateToolkit
                     int subPaletIndex = 0;
                     if (animeOption.AnimeDetail.IsHighVersion) subPaletIndex = (int)animeOption.AnimeDetail.Serial;
                     GraphicDetail graphicData =
-                        GraphicData.GetGraphicDetail(graphicInfoData, _paletIndex, subPaletIndex);
+                        GraphicData.GetGraphicDetail(graphicInfoData, _paletIndex, subPaletIndex, isLinearFilter);
                     if (graphicData == null)
                     {
                         Debug.Log("GraphicData Serial:" +
@@ -364,7 +388,7 @@ namespace CrossgateToolkit
 
             _currentAnime = animeOption;
             _frames = frames;
-            _currentFrame = -1;
+            // _currentAnime.CurrentFrame = _currentAnime.CurrentFrame;
             isPlayable = true;
             gameObject.SetActive(true);
             UpdateFrame();
@@ -381,7 +405,7 @@ namespace CrossgateToolkit
             isPlayable = false;
             _currentAnime = null;
             _frames = null;
-            _currentFrame = -1;
+            _currentAnime.CurrentFrame = 0;
             gameObject.SetActive(false);
         }
 
@@ -450,6 +474,18 @@ namespace CrossgateToolkit
             return nextPlay(_currentSerial, Direction, ActionType, playType, Speed, onFinishCallback);
         }
         
+        // 保持当前帧并切换动画方向(特殊情况如被暴击或击飞后保持受伤帧旋转)
+        public void changeDirectionKeepFrame(Anime.DirectionType directionType)
+        {
+            if (directionType == _currentAnime.Direction || directionType == Anime.DirectionType.NULL) return;
+            int currentFrame = _currentAnime.CurrentFrame;
+            _currentAnime = CreateAnimeOption(_currentAnime.AnimeSerial, directionType, _currentAnime.actionType,
+                _currentAnime.playType, _currentAnime.Speed, _currentAnime.onFinishCallback);
+            _currentAnime.CurrentFrame = currentFrame;
+            _currentAnime.KeepFrame = true;
+            _play(_currentAnime);
+        }
+        
         //更新计算
         private void Update()
         {
@@ -463,16 +499,14 @@ namespace CrossgateToolkit
             _delay = 0;
             if (!isPlayable || _frames.Length == 0) return;
             
-            _currentFrame++;
-            
             //动画结束
-            if (_currentFrame >= _currentAnime.AnimeDetail.FrameCount)
+            if (_currentAnime.CurrentFrame >= _currentAnime.AnimeDetail.FrameCount)
             {
                 if(_currentAnime.onFinishCallback!=null) _currentAnime.onFinishCallback(_currentAnime.actionType);
                 //循环播放
                 if (_currentAnime.playType == Anime.PlayType.Loop)
                 {
-                    _currentFrame = 0;
+                    _currentAnime.CurrentFrame = 0;
                 }else if (_currentAnime.playType == Anime.PlayType.Once || _currentAnime.playType == Anime.PlayType.OnceAndDestroy)
                 {
                     if (_currentAnime.playType == Anime.PlayType.OnceAndDestroy)
@@ -480,7 +514,7 @@ namespace CrossgateToolkit
                         _spriteRenderer.sprite = null;
                         _imageRenderer.sprite = null;
                         _rectTransform.sizeDelta = Vector2.zero;
-                        // gameObject.SetActive(false);
+                        gameObject.SetActive(false);
                     }
                     //播放下一个动画
                     if(_animeQueue.Count>0)
@@ -490,26 +524,33 @@ namespace CrossgateToolkit
                         return;
                     }else
                     {
-                        isPlayable = false;
-                        return;
+                        if (_currentAnime.KeepFrame)
+                        {
+                            _currentAnime.CurrentFrame--;
+                        }
+                        else
+                        {
+                            isPlayable = false;
+                            return;
+                        }
                     }
                 }
             }
             
             //问题帧自动跳过
-            if (_currentFrame<_frames.Length && _frames[_currentFrame] == null) return;
+            if (_currentAnime.CurrentFrame<_frames.Length && _frames[_currentAnime.CurrentFrame] == null) return;
             
             //根据当前帧Sprite动态调整对象大小
-            float width = _frames[_currentFrame].Sprite.rect.width * 1f;
-            float height = _frames[_currentFrame].Sprite.rect.height * 1f;
+            float width = _frames[_currentAnime.CurrentFrame].Sprite.rect.width * 1f;
+            float height = _frames[_currentAnime.CurrentFrame].Sprite.rect.height * 1f;
 
             Vector3 pos = Vector3.zero;
-            pos.x = _frames[_currentFrame].GraphicInfo.OffsetX;
-            pos.y = -_frames[_currentFrame].GraphicInfo.OffsetY;
+            pos.x = _frames[_currentAnime.CurrentFrame].GraphicInfo.OffsetX;
+            pos.y = -_frames[_currentAnime.CurrentFrame].GraphicInfo.OffsetY;
             
             if (isRenderByImage)
             {
-                _imageRenderer.sprite = _frames[_currentFrame].Sprite;
+                _imageRenderer.sprite = _frames[_currentAnime.CurrentFrame].Sprite;
                 _imageRenderer.SetNativeSize();
                 if (_currentAnime.AnimeDetail.FLAG!=null)
                 {
@@ -536,7 +577,7 @@ namespace CrossgateToolkit
             }
             else
             {
-                _spriteRenderer.sprite = _frames[_currentFrame].Sprite;
+                _spriteRenderer.sprite = _frames[_currentAnime.CurrentFrame].Sprite;
                 _rectTransform.sizeDelta = new Vector2(width, height);
                 _spriteRenderer.size = new Vector2(width, height);
                 _rectTransform.pivot = new Vector2(0.5f,0f);
@@ -559,14 +600,16 @@ namespace CrossgateToolkit
                 }
                 _rectTransform.localPosition = Vector3.zero;
             }
-            frameTexture = _frames[_currentFrame].Sprite.texture;
+            frameTexture = _frames[_currentAnime.CurrentFrame].Sprite.texture;
             
             _timer = Time.time * 1000;
             
             //动画事件帧监听
-            if(_frames[_currentFrame].AnimeFrameInfo.Effect >0 && onEffectListener!=null) onEffectListener(_frames[_currentFrame].AnimeFrameInfo.Effect);
+            if(_frames[_currentAnime.CurrentFrame].AnimeFrameInfo.Effect >0 && onEffectListener!=null) onEffectListener(_frames[_currentAnime.CurrentFrame].AnimeFrameInfo.Effect);
             //音频事件帧监听
-            if(_frames[_currentFrame].AnimeFrameInfo.AudioIndex >0 && onAudioListener!=null) onAudioListener(_frames[_currentFrame].AnimeFrameInfo.AudioIndex);
+            if(_frames[_currentAnime.CurrentFrame].AnimeFrameInfo.AudioIndex >0 && onAudioListener!=null) onAudioListener(_frames[_currentAnime.CurrentFrame].AnimeFrameInfo.AudioIndex);
+            
+            _currentAnime.CurrentFrame++;
         }
     }
 }

+ 1 - 1
CrossgateToolkit/Audio.cs

@@ -40,7 +40,7 @@ namespace CrossgateToolkit
             Dictionary<int,AudioClip> dic = type == Type.BGM ? _bgmDic : _effectDic;
             if (dic.TryGetValue(id, out audioClip))
             {
-                return;
+                _playAudio(audioSource, audioClip);
             }
             else
             {

+ 2 - 1
CrossgateToolkit/Graphic.cs

@@ -147,7 +147,6 @@ namespace CrossgateToolkit
                     VersionInfo versionInfo = AnalysisVersion("animeinfo", fileInfo);
                     // 判断是否存在对应anime文件
                     string animeFileName = "anime" + versionInfo.FullVersion + ".bin";
-                    Debug.Log(animeFileName);
                     FileInfo animeFileInfo = GetFileInfoByName(fileInfo.Directory, animeFileName);
                     if (!animeFileInfo.Exists)
                     {
@@ -183,6 +182,7 @@ namespace CrossgateToolkit
         public static GraphicDetail GetGraphicDetail(uint serial,int palet = 0)
         {
             GraphicInfoData graphicInfoData = GraphicInfo.GetGraphicInfoData(serial);
+            if (graphicInfoData == null) return null;
             return GraphicData.GetGraphicDetail(graphicInfoData, palet);
         }
         
@@ -190,6 +190,7 @@ namespace CrossgateToolkit
         public static GraphicDetail GetGraphicDetailByIndex(string Version,uint index,int palet = 0)
         {
             GraphicInfoData graphicInfoData = GraphicInfo.GetGraphicInfoDataByIndex(Version, index);
+            if (graphicInfoData == null) return null;
             return GraphicData.GetGraphicDetail(graphicInfoData, palet);
         }
     }

+ 21 - 119
CrossgateToolkit/GraphicData.cs

@@ -48,41 +48,43 @@ namespace CrossgateToolkit
     // 图档数据
     public static class GraphicData
     {
-        // // 图档缓存  Serial -> Palet -> GraphicDetail
-        // public static Dictionary<uint,Dictionary<int,GraphicDetail>> _cache = new Dictionary<uint, Dictionary<int, GraphicDetail>>();
-        //
-        // // 图档索引缓存 Index -> Palet -> GraphicDetail
-        // public static Dictionary<uint,Dictionary<int,GraphicDetail>> _indexCache = new Dictionary<uint, Dictionary<int, GraphicDetail>>();
-        
+        // 常规图档缓存
         public static Dictionary<GraphicInfoData,Dictionary<int,GraphicDetail>> _cache = new Dictionary<GraphicInfoData, Dictionary<int, GraphicDetail>>();
+        
+        // 线性图档缓存
+        public static Dictionary<GraphicInfoData,Dictionary<int,GraphicDetail>> _linearCache = new Dictionary<GraphicInfoData, Dictionary<int, GraphicDetail>>();
+        
         // 获取图档
-        public static GraphicDetail GetGraphicDetail(GraphicInfoData graphicInfoData, int palet = 0,int subPalet = 0)
+        public static GraphicDetail GetGraphicDetail(GraphicInfoData graphicInfoData, int palet = 0,int subPalet = 0,bool asLinear = false)
         {
             GraphicDetail graphicDetail = null;
-            if (_cache.ContainsKey(graphicInfoData))
+
+            var checkCache = asLinear ? _linearCache : _cache;
+            
+            if (checkCache.ContainsKey(graphicInfoData))
             {
-                if (_cache[graphicInfoData].ContainsKey(palet))
+                if (checkCache[graphicInfoData].ContainsKey(palet))
                 {
-                    graphicDetail = _cache[graphicInfoData][palet];
+                    graphicDetail = checkCache[graphicInfoData][palet];
                 }
                 else
                 {
-                    graphicDetail = _loadGraphicDetail(graphicInfoData, palet, subPalet);
-                    _cache[graphicInfoData].Add(palet, graphicDetail);
+                    graphicDetail = _loadGraphicDetail(graphicInfoData, palet, subPalet, asLinear);
+                    checkCache[graphicInfoData].Add(palet, graphicDetail);
                 }
             }
             else
             {
-                graphicDetail = _loadGraphicDetail(graphicInfoData, palet, subPalet);
-                _cache.Add(graphicInfoData, new Dictionary<int, GraphicDetail>());
-                _cache[graphicInfoData].Add(palet, graphicDetail);
+                graphicDetail = _loadGraphicDetail(graphicInfoData, palet, subPalet, asLinear);
+                checkCache.Add(graphicInfoData, new Dictionary<int, GraphicDetail>());
+                checkCache[graphicInfoData].Add(palet, graphicDetail);
             }
             
             return graphicDetail;
         }
         
         // 解析图档
-        private static GraphicDetail _loadGraphicDetail(GraphicInfoData graphicInfoData,int palet = 0,int subPalet = 0)
+        private static GraphicDetail _loadGraphicDetail(GraphicInfoData graphicInfoData,int palet = 0,int subPalet = 0,bool asLinear = false)
         {
             GraphicDetail graphicDetail = new GraphicDetail();
             
@@ -104,9 +106,10 @@ namespace CrossgateToolkit
 
             // RGBA4444 减少内存占用
             texture2D = new Texture2D((int) graphicInfoData.Width, (int) graphicInfoData.Height,
-                TextureFormat.RGBA4444, false, false);
+                TextureFormat.RGBA4444, false, asLinear);
             // 固定点过滤
-            texture2D.filterMode = FilterMode.Point;
+            if (asLinear) texture2D.filterMode = FilterMode.Bilinear;
+            else texture2D.filterMode = FilterMode.Point;
             texture2D.SetPixels32(pixels.ToArray());
             // texture2D.LoadRawTextureData(rawTextureData);
             texture2D.Apply();
@@ -142,107 +145,6 @@ namespace CrossgateToolkit
             public List<GraphicInfoData> GraphicInfoDatas = new List<GraphicInfoData>();
         }
         
-        //预备地图缓存
-        [Obsolete("该方法已废弃,请使用BakeGraphics方法")]
-        public static Dictionary<uint, GraphicDetail> BakeAsGround(List<GraphicInfoData> groundInfos,int palet=0)
-        {
-            
-            Dictionary<uint, GraphicDetail> graphicDataDic = new Dictionary<uint, GraphicDetail>();
-            // _mapSpriteMap[MapID].Add(PaletIndex, graphicDataDic);
-            
-            List<BatchData> batchDatas = new List<BatchData>();
-            Texture2D texture2D = null;
-            
-            for (var i = 0; i < groundInfos.Count; i++)
-            {
-                //每1344个图像合并一次,即不超过2048*2048尺寸
-                if (i % 1344 == 0)
-                {
-                    //合并
-                    if (i != 0) Combine(texture2D, batchDatas);
-                    
-                    //清空
-                    batchDatas.Clear();
-                    int height = 2048;
-
-                    if (i + 1344 > groundInfos.Count-1)
-                    {
-                        height = Mathf.CeilToInt((groundInfos.Count - i) / 32f) * 48;
-                    }
-                    texture2D = new Texture2D(2048, height, TextureFormat.RGBA4444, false, true);
-                    texture2D.filterMode = FilterMode.Point;
-                    //默认填充全透明
-                    Color32[] colors = Enumerable.Repeat(new Color32(0, 0, 0, 0), 2048 * height).ToArray();
-                    texture2D.SetPixels32(colors);
-                }
-                
-                GraphicInfoData graphicInfoData = groundInfos[i];
-                GraphicDetail graphicData = GetGraphicDetail(graphicInfoData, palet);
-                
-                int x = i % 32 * 64;
-                int y = i / 32 * 48;
-
-                if(graphicData!=null && graphicData.Sprite!=null)
-                {
-                    Color32[] pixels = graphicData.Sprite.texture.GetPixels32();
-                    texture2D.SetPixels32(x, y, (int) graphicInfoData.Width, (int) graphicInfoData.Height,
-                        pixels.ToArray());    
-                }
-                BatchData batchData = new BatchData();
-                
-
-                batchData.BatchOffsetX = x;
-                batchData.BatchOffsetY = y;
-                batchData.GraphicDetail = graphicData;
-
-                batchDatas.Add(batchData);
-            }
-            
-            //最后一次合并
-            if (batchDatas.Count > 0)
-            {
-                Combine(texture2D, batchDatas);
-                batchDatas.Clear();
-            }
-
-            void Combine(Texture2D texture2D,List<BatchData> batchDatas)
-            {
-                texture2D.Apply();
-                for (var i = 0; i < batchDatas.Count; i++)
-                {
-                    GraphicDetail graphicDataPiece = batchDatas[i].GraphicDetail;
-                    //直接通过Texture2D做偏移,并转为Sprite的偏移量
-                    Vector2 offset = new Vector2(0f, 1f);
-                    offset.x += -(graphicDataPiece.OffsetX * 1f) / graphicDataPiece.Width;
-                    offset.y -= (-graphicDataPiece.OffsetY * 1f) / graphicDataPiece.Height;
-                        
-                    int X = i % 32 * 64;
-                    int Y = i / 32 * 48;
-
-                    Sprite sprite = Sprite.Create(texture2D,
-                        new Rect(X, Y, (int)graphicDataPiece.Width, (int)graphicDataPiece.Height), offset, 1, 1,
-                        SpriteMeshType.FullRect);
-                    
-                    GraphicDetail graphicData = new GraphicDetail()
-                    {
-                        Index = graphicDataPiece.Index,
-                        Serial = graphicDataPiece.Serial,
-                        Width = graphicDataPiece.Width,
-                        Height = graphicDataPiece.Height,
-                        OffsetX = graphicDataPiece.OffsetX,
-                        OffsetY = graphicDataPiece.OffsetY,
-                        Palet = graphicDataPiece.Palet,
-                        Sprite = sprite,
-                        PrimaryColor = graphicDataPiece.PrimaryColor
-                    };
-
-                    graphicDataDic.Add(graphicData.Serial, graphicData);
-                }
-            }
-
-            return graphicDataDic;
-        }
-        
         /// <summary>
         /// 合批图档
         /// 通过指定图档序列,对图档进行合批处理,并返回合批后的图档数据

+ 5 - 0
README.md

@@ -316,6 +316,11 @@ player.Stop();
 
 
 ## 4、更新日志
+### v 2.5
+> `FIX` Audio播放代码忘了补充
+>
+> `UPD` 加入BLiner过滤支持,可以在获取图档时获取对应过滤图像,同时对AnimePlayer增加Liner可选项
+
 ### v 2.4
 > `FIX` 继续调整目录分析,处理部分特殊情况
 >