Создание проекта Unity, который воспроизводит анимацию при нажатии клавиши, но не отменяет / перезапускает анимацию при повторном нажатии этой же клавиши - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь создать проект 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 голосов
/ 13 декабря 2018

С этой темы

Вы можете проверить, находится ли Animator уже в определенном состоянии, используя GetCurrentAnimatorStateInfo и сделать вызов только, если 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...