在团结3D中反转动画

时间:2014-08-17 06:43:12

标签: c# unity3d

我有一个带动画的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");
    }
}

2 个答案:

答案 0 :(得分:4)

你的animation.WrapMode设置错误(可能是WrapMode.Once,这是默认值)。在您的情况下,您可以使用:

WrapMode.PingPong:Ping Pong在开始和结束之间来回。

animation.wrapMode = WrapMode.PingPong;

提醒你,你不需要

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

,这是自动完成的。

答案 1 :(得分: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");
}