Unity3D腳本逐幀播放指定文件夾下的圖片

using System.Collections; using UnityEngine; using UnityEngine.UI; public class GifPlayTest : MonoBehaviour { [SerializeField] private Image image; [Header("sprite渲染組件")] public Sprite[] sprites; [Header("Resources下的路徑")] public string resPath; [Header("是否賦值了")] public bool isGenerate = false; public bool needRevert = false; private bool isDestroy = false; private bool isFromToEnd = true; private void Start() { PlayAnimation(); } private void Update() { FindSprites(); } private void FindSprites() { if (isGenerate) { // 重新設置sprites數組的長度, // 不然當資源的數量少於上次的資源的時候sprites // 超出的數組長度會變成空值 sprites = new Sprite[0]; // 賦值給sprites sprites = Resources.LoadAll<Sprite>(resPath); // 當點擊isGenerate時,立即設爲false,以保證每次點擊只執行一次 isGenerate = false; } } private int AnimationAmount { get { if (sprites == null) { return 0; } return sprites.Length; } } public void PlayAnimation() { if (image == null) image = GetComponent<Image>(); if (AnimationAmount == 0) { FindSprites(); } StartCoroutine(PlayAnimationForwardIEnum()); } private IEnumerator PlayAnimationForwardIEnum() { int index = 0; //可以用來控制起始播放的動畫幀索引 gameObject.SetActive(true); while (true) { if (isDestroy) { break; } //當我們需要在整個動畫播放完之後 重複播放後面的部分 就可以展現我們純代碼播放的自由性 if (index > AnimationAmount - 1) { if (needRevert) { isFromToEnd = false; index = AnimationAmount - 1; } else { index = 0; } }else if (index < 0) { index = 0; isFromToEnd = true; } image.sprite = sprites[index]; if (isFromToEnd) { index++; } else { index--; } yield return new WaitForSeconds(0.03f); //等待間隔 控制動畫播放速度 } } private void OnDestroy() { isDestroy = true; } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章