1. 程式人生 > >Unity製作GIF效果

Unity製作GIF效果

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
    }

當然還需要供外部類呼叫的開始播放方法和停止播放方法。

就不一一寫出。