Esempio n. 1
0
        public static SequenceFrame[] Preload(TextAsset gifAsset)
        {
            //Create folder
            var saveFolder = string.Format(_savePath, gifAsset.name, "");

            Directory.CreateDirectory(saveFolder);

            //Decode
            var memoryFrames      = GifHelper.GetFrames(gifAsset);
            var delaySecondsArray = string.Join(",", memoryFrames.Select(m => m.DelaySeconds.ToString()).ToArray());

            for (var index = 0; index < memoryFrames.Length; index++)
            {
                FileWrite(string.Format(_savePath, gifAsset.name, index + ".png"), memoryFrames[index].Sprite.texture.EncodeToPNG());
            }
            FileWrite(string.Format(_savePath, gifAsset.name, "delays.txt"), Encoding.UTF8.GetBytes(delaySecondsArray));

            //Refresh Adb
            AssetDatabase.Refresh();

            //Load Adb
            var delaySecondsAsset = AssetDatabase.LoadAssetAtPath(string.Format(_savePath, gifAsset.name, "delays.txt"), typeof(TextAsset)) as TextAsset;
            var delaySeconds      = delaySecondsAsset.text.Split(',');
            var adbFrames         = new SequenceFrame[delaySeconds.Length];

            for (var index = 0; index < adbFrames.Length; index++)
            {
                var texture = AssetDatabase.LoadAssetAtPath(string.Format(_savePath, gifAsset.name, index + ".png"), typeof(Texture2D)) as Texture2D;
                adbFrames[index] = new SequenceFrame(texture, float.Parse(delaySeconds[index]));
            }
            return(adbFrames);
        }
Esempio n. 2
0
        IEnumerator DecodeAndPlay()
        {
            if (!GifAsset)
            {
                Debug.LogError("UnityGif@" + name + ": Gif asset is null, please check gif asset SerializeField !");
                yield break;
            }

            var gifData = new GifData(GifAsset.bytes);

            yield return(GifHelper.GetFramesEnumerator(gifData));

            if (gifData.Frames == null)
            {
                Debug.Log("Gif decoding by Coroutine does not effect, use no-Coroutine instead !");
                GifHelper.GetFramesVoid(gifData);
            }
            Frames = gifData.Frames;
            StartCoroutine(PlayNextFrame());
        }