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); }
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()); }