Unity-在Animator中实现单个动画的倒放

一、场景构建

首先新建一个空白场景,使用unity内置的Cube物体搭建一个门的模型。四个Cube分别作为门框的四周,然后用一个扁平的Cube作为门。记得使用一个空物体把门轴移动到合适位置,方便下一步制作开门动画。

二、制作动画

在Hierarchy窗口中选择Door,然后使用快捷键Ctrl+6打开动画窗口。使用Unity内置的动画编辑工具制作简单的开门动作。

三、设置动画状态机

在Hierarchy窗口中选择Door,双击Animator组件上的名为Door的AnimatorController,打开动画状态机窗口Animator。新建一个空的动画片段,并且把它设为默认状态,这样运行时不会自动播放动画。添加一个float类型的参数,取名为“speed”。然后在DoorOpen的动画片段中速度乘以该参数。具体设置如下。

四、编写代码

新建一个AnimatorReverse的脚本,粘贴下面内容。

using UnityEngine;

public class AnimatorReverse : MonoBehaviour
{
    private Animator anim;

    private void Start()
    {
        anim = GetComponent<Animator>();
    }

    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.A))
        {
            Open();
        }
        if(Input.GetKeyDown(KeyCode.B))
        {
            Close();
        }
    }
    private void Open()
    {
        if (anim.GetCurrentAnimatorStateInfo(0).normalizedTime < 0)
        {
            anim.Play("DoorOpen", 0, 0);
        }
        else
        {
            anim.Play("DoorOpen");
        }
        anim.SetFloat("speed", 1);
    }
    private void Close()
    {
        if (anim.GetCurrentAnimatorStateInfo(0).normalizedTime > 1)
        {
            anim.Play("DoorOpen", 0, 1);
        }
        else
        {
            anim.Play("DoorOpen");
        }
        anim.SetFloat("speed", -1);
    }
}

把这个脚本挂载到Door物体上。

五、运行

使用键盘上的A键、B键可以控制动画正放和倒放。

点赞

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像