Unity常用的动画类型

在Unity中,动画主要有有三种类型:
1.序列帧动画:通过快速播放一系列图片产生动画的效果,类似于 Gif一样
2.关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一 个整体的动画,角色比较灵活
3.骨骼动画:应用最广泛的动画,结合上面两种动画形式,内部骨骼,外部蒙皮。
在我实际开发中,最常用的就是序列帧和骨骼动画了

序列帧:

直接给New Sprite赋予如下脚本。实质上在控制哪个毫秒,精灵New Sprite上放的是那张图片而已。这里没有使用Update()这个父进程去播放动画,利用一个协程对应一个GIF的控制,我认为更合适。 

这里唯一一个注意点是,大家可以看到,原来GIF只有46帧,序列帧大图是按8x8共64帧来配置的,所以注意会有空白,因此,在协程中要求播到46帧,则马上从0开始。

在协程中,停顿时间为1/fps秒,fps为刷新频率,也就是帧数,原始游戏是30,高清时代是60,现在貌似去到75,这个自己定好就行。

实质上本程序来来去去都是spriteRenderer.sprite = sprites[i];控制当前是数组那个元素而已

using UnityEngine;
using System.Collections;
public class AnimationController : MonoBehaviour
{
    private Coroutine AnimationPlay;//播放协程
    private Sprite[] sprites;//被切割的序列图数组
    private SpriteRenderer spriteRenderer;//精灵控制器
    void Start()
    {
        sprites = Resources.LoadAll<Sprite>("aa");//载入资源aa.png
        spriteRenderer = GetComponent<SpriteRenderer>() as SpriteRenderer;//这东西在精灵身上自带的,直接拿就行
    }
    void Update()
    {
    }
    //按钮动作
    public void PlayButtonOnClick()
    {
        AnimationPlay = StartCoroutine(AnimationPlayThread(30));
    }
    public void StopButtonOnClick()
    {
        StopCoroutine(AnimationPlay);
    }
    //实质在控制什么时候在精灵上放那张被切割的小图而已
    IEnumerator AnimationPlayThread(float fps)
    {
        int i = 0;
        while (true)
        {
            if (i < 46)
            {
                spriteRenderer.sprite = sprites[i];
                i++;
            }
            else
            {
                i = 0;
            }
            yield return new WaitForSeconds(1 / fps);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42672770/article/details/127510371