【问题标题】:Reverse animation in unity 3Dunity 3D 中的反向动画
【发布时间】:2015-07-01 23:17:17
【问题描述】:

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

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

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

    animation.wrapMode = WrapMode.PingPong;
    

    注意,你不需要

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

    再说了,这是自动完成的。

    【讨论】:

      【解决方案2】:

      当动画结束时,它的时间被重置为开始。

      简单的解决方法是在向后播放之前设置结束时间。

      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");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多