Unity製作GIF效果
阿新 • • 發佈:2019-02-19
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 }
當然還需要供外部類呼叫的開始播放方法和停止播放方法。
就不一一寫出。