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
}
当然还需要供外部类调用的开始播放方法和停止播放方法。
就不一一写出。