[置顶] unity中制作序列帧动画

在上一篇中我介绍了用NGUI来实现序列帧动画,这一节我们用unity中的Texture来制作序列帧动画。

  首先我们将图片导入到工程中,

[置顶] unity中制作序列帧动画_第1张图片

这里是所有素材都在一张图片上,我们通过切割来实现动画,然后将图片的格式设置为Texture;将这个图片挂载在有Renderer的物体上,我们是通过修改[置顶] unity中制作序列帧动画_第2张图片来实现

public class AnimationController : MonoBehaviour {


    public int min;//从第几行的第几列开始播放
    public int max;//到第几行的第几列结束播放
    public int fps = 2;//每秒播放几帧
    float timer;//计时器
    public int columns = 8;//根据图片的每列分为几个素材来定义
    public int rows = 8;//根据图片的每行分为几个素材来定义
    public int currentFrame = 0;//当前调用的帧数
    // Use this for initialization
    void Start()
    {
        currentFrame = min;//初始开始位置
        HandleMaterial();
        ResetTimer();
    }


    // Update is called once per frame
    void Update()
    {


            timer -= Time.deltaTime;
            if (timer < 0)
            {
                ResetTimer();
                currentFrame++;
                if (currentFrame > max)
                {
                    currentFrame = min;
                }
                HandleMaterial();
            }
        }
    //重置计时器
    void ResetTimer()
    {
        timer = 1f / fps;
    }
    //处理材质
    public void HandleMaterial()
    {
        Vector2 framePosition = new Vector2();
        framePosition.x = currentFrame % columns;//取余
        framePosition.y = currentFrame / columns;//取整

//"_MainTex"是默认Shader的名称
        this.GetComponent<Renderer>().sharedMaterial.SetTextureScale("_MainTex", new Vector2(1f / columns, 1f / rows));

//这里我是从最上面开始播放的,如果你是从下面播放的则1 - (framePosition.y + 1) / rows)改为(framePosition.y + 1) / rows)
        this.GetComponent<Renderer>().sharedMaterial.SetTextureOffset("_MainTex", new Vector2(framePosition.x / columns, 1 - (framePosition.y + 1) / rows));
    }
}

我们要播放具体地动画来设置最大和最小值



你可能感兴趣的:(动画,unity,2d,序列帧)