
一、场景构建
首先新建一个空白场景,使用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键可以控制动画正放和倒放。