Как я могу включить свои анимации, когда я нажимаю кнопку, чтобы она не ждала другую анимацию? | Mecanim

Я учусь использовать mecanim. В аниматоре у меня есть 3 анимации (бездействие, прогулка и бег), эти анимации работают правильно, но проблема в том, что, когда я нажимаю кнопку W, например, проходит две секунды, пока анимация (прогулка) не включена, потому что эта анимация (прогулка) дождитесь окончания другой анимации (холостого хода). Я хочу, чтобы анимации активировались при нажатии на кнопку. Как я могу это сделать?

2 ответа

Я думаю, что вы сделали все правильно,

1. Создайте "контроллер аниматора", затем установите анимации вашего элемента управления аниматором и получите их логические значения, например: для состояния прыжка получить значение bool как прыжок, а для состояния скольжения получить значение bool как скольжение.

2. Затем вы устанавливаете эти булевы переменные в стрелки перехода из состояния "Любое состояние".

3. Вы должны добавить переходы в "Any State", потому что с этого момента его изменения в другие состояния легко.

4. Не забывайте ставить галочки на этих элементах в каждом из ваших анимационных движений, если только он не вернется обратно в состояние, которое вы хотите иметь,

5. Это пример кода, который я реализовал для управления бегуном.

Ваша проблема в том, что вы не установили время задержки, как это Invoke("stopJumping",0.01f);.Это 0,01f - задержка, которая вызывает время реакции вашей кнопки.

 using UnityEngine;
    using System.Collections;

    public class CharacterMovement : MonoBehaviour {
    private Animator animator;
    private int lane;

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

        // Update is called once per frame
        void Update () {
          if(Input.GetKeyDown(KeyCode.UpArrow)) //When you pressed UpArrow
          {
             animator.SetBool("jumping",true); //Activate jumping 
              Invoke("stopJumping",0.01f);     // state(because it's boolval
                                               // And invoke stopJumping                                                                                                
          }                                     //     method      
          if(Input.GetKeyDown(KeyCode.DownArrow))
          {
              animator.SetBool("sliding",true);
              Invoke("stopSliding",0.01f);
          }
          if(Input.GetKeyDown(KeyCode.LeftArrow))
          {if(lane > -1)    //when you slide left,switch lane
                             //to left
              lane--;     
          }
           if(Input.GetKeyDown(KeyCode.RightArrow))
          {if(lane < 1)
              lane++;     
          }
          Vector3 newPosition =transform.position;
          newPosition.x=lane;
          newPosition.y=0f;
          transform.position= newPosition;

        }

        void stopJumping()
        {
            animator.SetBool("jumping",false);
        }
        void stopSliding()
        {
            animator.SetBool("sliding",false);
        }   
    }

Если вы хотите сослаться на учебник, просто отметьте это, на что я ссылался сам.

Я нашел ответ, который мне был нужен. Есть флажок, когда вы выбираете переход, который называется "Время выхода". Если щелкнуть его, необходимо снять флажок, и анимация, которую вы поместили на контроллер аниматора, будет воспроизводиться при нажатии определенной кнопки.:)

Другие вопросы по тегам