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;
}
}
Unity3D腳本逐幀播放指定文件夾下的圖片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.