Unity3D不支持GIF格式。
前幾天想做一個UI的特效,就是那種呼吸的效果。
之前認識一個技術很厲害的美術,我問他,你的Unity中UI的動態效果是怎麼做的?他回答:序列幀動畫,PS中的。
本人稍微懂點PS技術,所以聽到了也學者做了下我的效果。
但是後來發現序列幀保存後的GIF,Unity不識別。
後來再問美工,他說是用了網上的一個插件代碼做的。
而且查詢了網上所有相關的代碼都沒有說純粹 脫離代碼而實現序列幀的。
所以我也試着寫了一下,發現效果還行,可以滿足當前的需求,也可以複用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ChangBackGroundDynamic : MonoBehaviour {
public List<Sprite> _Pics = new List<Sprite>(); //替換的圖片,是一個圖片組
private Image _SourceImage; //需要被替換的目標圖片
public bool _IsReverse = false; //是否反轉,就是看需不需要出現從頭到尾,從尾到頭的效果
public bool _IsAutoPlay = true; //自動播放嗎?
public float _DelayTime = 0; //延時播放時間
public float _DeltaTime=0.1f; //照片切換間隔
private int _PicIndex=0; //照片的編碼,就是下標
private int _PicLength; //照片組長度
void Start()
{
_SourceImage = this.GetComponent<Image>(); //目標圖片
_PicLength = _Pics.Count; //圖片的長度進行存儲
if (_IsReverse) //如果需要反轉
{
for (int i = _PicLength - 1; i >= 0; i--) //按照目前的長度,反向存一遍
{
_Pics.Add(_Pics[i]);
}
_PicLength = _Pics.Count; //重新設置長度
}
if (_IsAutoPlay) //是自動播放嗎?
InvokeRepeating("ChangeBackGround", _DelayTime, _DeltaTime); //調用切換代碼,輸入延時時間與間隔時間
}
/// <summary>
/// 修改背景方法
/// </summary>
void ChangeBackGround()
{
if (_PicIndex >= _PicLength) //如果下標溢出
_PicIndex = 0; //下標清零
_SourceImage.sprite = _Pics[_PicIndex]; //修改背景
_PicIndex++; //下標自加1
}
當然還需要供外部類調用的開始播放方法和停止播放方法。
就不一一寫出。