当先锋百科网

首页 1 2 3 4 5 6 7

  序列帧动画作为一种2D游戏中经常采用的动画技术,使用unity也是很好实现的。只要在场景中新建一个Quad,然后在添加上如下脚本即可:

using UnityEngine;
using System.Collections;

public class AnimateTest : MonoBehaviour {

    private int startIndex = 266;
    private int lastIndex = 331;
    private string path = "dance/dance_";
    private int currentIndex;
    Texture frameAniTex;
    public float framesPerSecond;
    
    // Use this for initialization
    void Start () 
    {
        currentIndex = startIndex;
    }

    void Update()
    {
        AnimaAlways();
    }
    
    // Update is called once per frame
    void AnimaAlways()
    {
        int nowIndex = (int)(Time.time * framesPerSecond) % (lastIndex - startIndex+1);
        if (currentIndex != startIndex + nowIndex)
        {
            currentIndex = startIndex + nowIndex;
            frameAniTex = (Texture)Resources.Load(path + currentIndex.ToString("D5"));
            if (frameAniTex == null)
            {
                Debug.Log("error:currentIndex:" + currentIndex);
            }
            GetComponent<Renderer>().material.mainTexture = frameAniTex;
            
        }
    }
    
    
}


注意:需要在quad上添加一个材质,后将材质的shader设置为standard,且设置rendering mode为cutout,这样主要是为了实现背景的透明,大致样子如下图,

demo下载地址如下:

http://download.csdn.net/detail/xunni_5241/9620979

还有就是序列帧动画比较占用内存,在实际项目使用过程中,主要找到合适的实际进行内存资源的释放,还有就是unity经过自己的图片处理后会将图片大小放大很多,我们最终采用压缩型的assetbundle来进行资源的载入,在播放完成一个动画后将资源进行释放来缓解内存,要不在移动平台(安卓、ios)就会出现内存报警崩溃的问题。

本人文章纯属个人总结,且某些demo在项目采用前可能来自互联网,最终实验验证后实际项目中采用,若发现来自贵方,谅解;若发现,纰漏错误妄指正。