创建一个Unity项目,该项目在按下某个键时播放动画,但是如果再次按下相同的键则不会取消/重新启动动画

时间:2018-12-13 05:00:58

标签: c# unity3d animation

我正在尝试创建一个 Unity 2018 1.4f1 项目,该项目将在按下特定键时播放特定的动画,并在同时按下同一键时播放动画的副本。一审仍在播放。

这个想法是,用户可以键入一个单词,并且他们输入的每个字母都会播放一个动画来代表该字母。

我尝试使用Animation.PlayQueued之类的动画来排队动画,但没有成功。

这是我的基本代码的样子(这只是尝试在按键上播放动画):

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

public class AnimateKey : MonoBehaviour
{

    public Animator animator;


    // Use this for initialization
    void Start()
    {
        animator = GetComponent<Animator>();

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown("1"))
        {
            animator.Play("Take1");

        }

    }
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

来自this thread

您可以使用GetCurrentAnimatorStateInfo检查Animator是否已经处于某种状态,并且仅在IsName返回false时进行呼叫:

if (!animator.GetCurrentAnimatorStateInfo(0).IsName("Take1"))
{
    animator.Play("Take1");
}

注意GetCurrentAnimatorStateInfo的参数是图层索引。因此,当您处理多层时,必须采用该方法。


但是对于多个并行动画,您可能想检出Animation组件。

您不必处理States,而只需启动和停止AnimationClip。你会比做

public Animation animation;

private void Awake()
{
    animation = GetComponent<Animation>();
}

private void Update()
{
    if(!Input.GetKeyDown("1")) return;

    if(animation.IsPlaying("Take1")) return;

    animation.Play("Take1");
}