Unity3d的序列帧动画

马上这星期就要过去了,为了完成每星期写一篇博客的目标,熬夜也要写完。
最近项目中用到了很多序列帧动画,之前看教程也接触过序列帧动画,但当时没用到,就没仔细研究,这次就借着这个机会好好总结一下序列帧动画。

思路

序列帧动画的原理很好理解,首先必须要有一个载体,一般是一个图片,然后申请一个数组或List用来存放序列帧,然后再根据需要遍历这个数组替换载体的图片源,这样就实现动画效果了。

代码


public class Anim : MonoBehaviour {

    public float animSpeed = 10;  //动画播放速度 默认1秒播放10帧图片
    private float animTimeInterval = 0;  //帧与帧间隔的时间
   
    public SpriteRenderer animRenderer;//动画载体的渲染器
   
    public Sprite[] SpriteArray; //序列帧数组
    private int frameIndex = 0;  //帧索引
    private int animLength = 0;  //多少帧
    private float animTimer = 0; //动画时间计时器

   // Use this for initialization
    void Start () {
        animTimeInterval = 1 / animSpeed;//得到每一帧的时间间隔
        animLength = SpriteArray.Length; //得到帧数
       
    }

    // Update is called once per frame
    void Update()
    {
        animTimer += Time.deltaTime;
        if (animTimer > animTimeInterval)
        {
            animTimer -= animTimeInterval;//当计时器减去一个周期的时间
            frameIndex++;//当帧数自增(播放下一帧)
            frameIndex %= animLength;//判断是否到达最大帧数,到了就从新开始  这里是循环播放的
            animRenderer.sprite = SpriteArray[frameIndex]; //替换图片实现动画
        }      

    }
}

其他形式

基于上面的代码还可以添加一些其他动画的功能,比如暂停/停止(添加bool变量,Pause方法内判断是否暂停)快进慢进(方法内调节每秒播放的帧数)主要通过对这个类变量的控制来实现的,NGUI里有SpriteAnimation,UI SpriteAnimation等内置的序列帧动画脚本,里面的序列帧动画的功能比较全,有感兴趣的可以去看下NGUI的源码。
除了spriterenderer,通过texturerenderer和ui sprite也可以实现序列帧动画,效果差不多

一些思考

在最近项目中遇到的序列帧动画是全屏的,图片都很大,第一次加载时非常卡,这个问题后来通过两个途径解决的,在这里说一下

  • 在可以接受的情况下降低画质

    1.png
    如图,调节MaxSize属性能控制画质,缩小图片的大小
  • 分割序列帧数组

    因为序列帧在播放前需要先加载进数组里面,图片多了内存占用过大就很卡,因此可以优化资源加载算法实现分阶段加载视频,具体代码就不写了,这里我说一下思路:有500帧图片,不要一次加载完,100帧100帧的加载,第一个100帧播放到50帧的时候开始加载第二个100帧,以此类推,这样就分散了对系统资源的占用,相应的会流畅一些。

转载于:https://www.cnblogs.com/qiaogaojian/p/6443474.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值