【问题标题】:How to run subsequent animations only after the previous animation is completed in Unity?如何在Unity中只有上一个动画完成后才能运行后续动画?
【发布时间】:2018-12-20 17:42:01
【问题描述】:

我试图得到它,以便在按下对撞机时运行一个动画,并且只有当它完成时,另一次按下对撞机才会激活下一个动画。

我一直在尝试关注这个:Wait for an animation to finish in unity3d

但目前我遇到了一个错误,提示“没有给出与 'reduced_grill.WaitForAnimation(Animation)' 的所需形式参数 'animation' 相对应的参数”。

我对此还是很陌生。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class reduced_grill : MonoBehaviour {

    public GameObject grill_standard;
    public Animator minimal_grill;
    public GameObject reduced_grill_obj;
    public GameObject grill_price;





    private IEnumerator WaitForAnimation(Animation animation)
    {
        do
        {
            yield return null;
        } while (animation.isPlaying);
    }




    IEnumerator OnMouseOver()
    {

           minimal_grill.GetComponent<Animation>();
           yield return WaitForAnimation();

        if (Input.GetMouseButtonUp(0) && minimal_grill.GetCurrentAnimatorStateInfo(0).IsName("none"))
        {
            grill_standard.SetActive(true);

            reduced_grill_obj.SetActive(true);
            minimal_grill.enabled = true;
            minimal_grill.Play("minimal_grill_red", -1, 0f);



            CallLater.DoAfter(5, x =>
            {
                grill_price.SetActive(true);
            });


        }

        if (Input.GetMouseButtonUp(0) && minimal_grill.GetCurrentAnimatorStateInfo(0).IsName("minimal_grill_red"))

        {


            minimal_grill.enabled = true;
            minimal_grill.Play("minimal_grill_exit", -1, 0f);
            grill_price.SetActive(false);
            CallLater.DoAfter(8, x =>
            {
                reduced_grill_obj.SetActive(false);

            });

        }

        if (Input.GetMouseButtonUp(0) && minimal_grill.GetCurrentAnimatorStateInfo(0).IsName("minimal_grill_exit"))
        {
            grill_standard.SetActive(true);

            reduced_grill_obj.SetActive(true);
            minimal_grill.enabled = true;
            minimal_grill.Play("minimal_grill_red", -1, 0f);

            CallLater.DoAfter(5, x =>
            {
                grill_price.SetActive(true);
            });

        }

    }


}

编辑

我正在尝试按照以下建议添加动画事件,但由于某种原因,我无法选择任何动画以输入到字段框中。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    使用 AnimationController 并使用可视化编辑器创建动画路线。

    【讨论】:

      【解决方案2】:

      您可以在每个动画结束时添加动画事件,相互触发。看看:

      Unity Animation Events

      【讨论】:

      • 我添加了一个事件,但我无法在函数 waitforanimation 的“动画”字段中选择动画。
      • 您能说明一下您要达到的目标吗?您有 2 或 3 个动画状态,并且您想在单击鼠标时循环浏览它们,等待动画结束后再切换到下一个?如果是这样,您只能在脚本中使用 Animator.SetBool 方法并在 Animator 中调整动画退出和过渡参数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多