您的位置:首页 > 移动开发 > Unity3D

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

2016-02-27 11:19 555 查看
在上一篇中我介绍了用NGUI来实现序列帧动画,这一节我们用unity中的Texture来制作序列帧动画。

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



这里是所有素材都在一张图片上,我们通过切割来实现动画,然后将图片的格式设置为Texture;将这个图片挂载在有Renderer的物体上,我们是通过修改

来实现

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));

    }

}

我们要播放具体地动画来设置最大和最小值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: