马上这星期就要过去了,为了完成每星期写一篇博客的目标,熬夜也要写完。

最近项目中用到了很多序列帧动画,之前看教程也接触过序列帧动画,但当时没用到,就没仔细研究,这次就借着这个机会好好总结一下序列帧动画。

思路

序列帧动画的原理很好理解,首先必须要有一个载体,一般是一个图片,然后申请一个数组或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也可以实现序列帧动画,效果差不多

一些思考

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

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



如图,调节MaxSize属性能控制画质,缩小图片的大小

  • 分割序列帧数组

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

Unity3d的序列帧动画的更多相关文章

  1. unity3d实现序列帧动画

    首先准备一个序列帧图片如下的AngryBird: 场景中随便创建一个物体,这里以Cube为例 将图片拖放到Cube上,这样会在Cube的6各面都有3个bird,为了美观显示一个鸟,我们调整材质的Til ...

  2. Unity3d UGUI序列帧动画

    代码 using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine. ...

  3. 时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画

    系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...

  4. Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系

    2条评论 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移,这个就是通过 applyRootMotion 来达成的,我们只需要在使用 Animator ...

  5. iOS-动画效果(首尾式动画,代码快动画,核心动画,序列帧动画)

    一.各个动画的优缺点 1.首尾动画:如果只是修改空间的属性,使用首尾动画比较方便,如果在动画结束后做后续处理,就不是那么方面了. 2.核心动画:有点在于对后续的处理方便. 3.块动画: (1)在实际的 ...

  6. cocos2d-x 2.0 序列帧动画 深入分析

    转自:http://blog.csdn.net/honghaier/article/details/8222401 序列帧动画主要有几个类: CCSpriteFrame:精灵帧信息,序列帧动画是依靠多 ...

  7. Unity3D之Legacy动画系统学习笔记

    Unity3D的Mecanim动画系统是非常强大的,而且作为Unity推荐的动画系统,其未来会完全代替老的一套动画系统,即Legacy动画系统.目前的情况是Mecanim与Legacy两套动画系统同时 ...

  8. [Cocos2d-x v3.x]序列帧动画

      简单介绍 Cocos2d-x中.动画的详细内容是依靠精灵显示出来的,为了显示动态图片,我们须要不停切换精灵显示的内容.通过把静态的精灵变为动画播放器从而实现动画效果. 动画由帧组成,每一帧都是一个 ...

  9. (二)plist的使用和序列帧动画

    六.plist的使用方法: iOS的程序在安装在手机上以后会把全部资源文件集成在一个文件夹中,这种文件集合称为bundle,对于一般的工程,只有一个bundle,即mainbundle,因此可以通过b ...

随机推荐

  1. Android动画之translate(位移动画)(转)

    转自:http://www.cnblogs.com/bavariama/archive/2013/01/29/2881225.html 上一篇文章讲了 Android的左右滑动切换,实现过程是非常简单 ...

  2. UIStackView属性解释

    Distribution 分布: Fill:填充,会根据优先级来压缩或伸长元素 Fill Equal:全都相等,并且都填充满 Fill Proportionally:按比例填充,根据元素的内容多少的比 ...

  3. RF & Microarray

    REF[24] 随机森林是一个很好适用于微阵列数据的分类算法: 1.即使大多数的预测变量都是噪音,RF仍然具有优秀的性能,因此不需要对基因进行预选择. 2.能够应用于变量数远远大于观测数据量的情况 3 ...

  4. JavaScript 模块化及 SeaJs 源码分析

    网页的结构越来越复杂,简直可以看做一个简单APP,如果还像以前那样把所有的代码都放到一个文件里面会有一些问题: 全局变量互相影响 JavaScript文件变大,影响加载速度 结构混乱.很难维护 和后端 ...

  5. iOS 项目上线流程

    一.证书的导出      1.1 前期工作        首先你需要有一个苹果的开发者帐号,一个Mac系统.        如果没有帐号可以在打开http://developer.apple.com/ ...

  6. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  7. 进度条(ProgressBar)的功能与用法

    进度条也是UI界面中一种非常实用的组件,通常用于向用户显示某个耗时操作完成的的百分比.进度条可以动态的显示进度,因此避免长时间的执行某个耗时的操作,让用户感觉程序失去了响应,从而更好的提高用户界面的友 ...

  8. NetStream.appendBytes, 走向Flash P2P VOD的第一步

    之前被告知可以自行实现Flash p2p的点播功能, 但一直疑惑, 印象中NetStream并未提供相关方法, 前天看订阅时发现的文章: ByteArray Access to NetStream i ...

  9. Bootstrap入门(九)组件3:按钮组

    Bootstrap入门(九)组件3:按钮组   先引入本地的CSS文件和JS文件(注:1.bootstrap是需要jQuery支持的.2.需要在<body>当中添加) <link h ...

  10. ubuntu-14.10下,安装gcc交叉编译器遇到问题及解决方法

    一 下载gcc-arm-none-eabi-4_9 安装成功后上报错误: ./gcc-arm-none-linux-gnueabi-gcc: No such file or directory 网上查 ...