unity 3D中的反向动画

本文关键字:动画 3D unity | 更新日期: 2023-09-27 18:18:14

我有一个带有动画的FBX对象。对象是一个带有打开动画的盒子。我想做的是当用户点击按钮时,盒子会打开(播放打开的动画),当按钮再次被点击时,盒子会关闭(播放打开的动画)。

当打开动画播放时,我再次点击按钮,打开动画停止,盒子开始关闭,这很好。问题是,当动画完成(打开),然后我点击按钮关闭,动画没有播放,它只是跳到一个没有动画的封闭框。

下面是我的代码:
public class ClickBtn : MonoBehaviour {
    public GameObject box = null;
    bool reverse = false;
    private void OnMouseDown()
    {
        Debug.Log(reverse);
        if (!reverse)
        {
            box.animation["Take 001"].speed = 1;
        }
        else
        {
            box.animation["Take 001"].speed = -1;
        }
        reverse = !reverse;
        box.animation.Play("Take 001");
    }
}

unity 3D中的反向动画

你的动画。WrapMode设置错误(可能是WrapMode。一次(默认值)。在您的情况下,您可以使用:

WrapMode。乒乓球:乒乓球在开始和结束之间来回。

animation.wrapMode = WrapMode.PingPong;

请注意,你不需要

box.animation["Take 001"].speed = -1;

动画完成后,时间被重置为开始。

简单的解决方法设置播放前的结束时间。

public GameObject box;
bool direction = false;
private void OnMouseDown()
{
    Debug.Log(direction);
    if (!direction)
    {
        box.animation["Take 001"].speed = 1;

    }
    else
    {
        box.animation["Take 001"].speed = -1;
        //if animation already finisihed, set time to end before playing it backwards
        if(!box.animation.isPlaying){ 
            box.animation["Take 001"].time =box.animation["Take 001"].clip.length;
        }
    }
    direction = !direction;
    box.animation.Play("Take 001");
}