Animation 当我按下一个按钮而不等待另一个动画时,如何启用我的动画梅卡尼姆

Animation 当我按下一个按钮而不等待另一个动画时,如何启用我的动画梅卡尼姆,animation,unity3d,unity3d-mecanim,Animation,Unity3d,Unity3d Mecanim,我正在学习如何使用mecanim。在animator中,我有3个动画(空闲、行走和运行),这些动画工作正常,但问题是当我按下按钮W时,例如,两秒钟后动画(行走)才启用,因为该动画(行走)将等待另一个动画(空闲)完成。我想动画被激活时,按下按钮。我该怎么做呢?我想你基本功都做对了 1.创建“animator controller”,然后设置animator控件的动画并获取其布尔值,例如:对于跳跃状态,获取布尔值作为跳跃,对于滑动状态,获取布尔值作为滑动 2.然后将这些布尔变量从“任何状态”状态设置

我正在学习如何使用mecanim。在animator中,我有3个动画(空闲、行走和运行),这些动画工作正常,但问题是当我按下按钮W时,例如,两秒钟后动画(行走)才启用,因为该动画(行走)将等待另一个动画(空闲)完成。我想动画被激活时,按下按钮。我该怎么做呢?

我想你基本功都做对了

1.创建“animator controller”,然后设置animator控件的动画并获取其布尔值,例如:对于跳跃状态,获取布尔值作为跳跃,对于滑动状态,获取布尔值作为滑动

2.然后将这些布尔变量从“任何状态”状态设置为转换箭头

3. 您必须将转换添加到“AnyState”,因为从那里开始,它很容易更改为其他状态

4.不要忘记在每个动画动作中勾选这些项目,除非它无法正确返回到您想要的状态

5.这是一个示例代码,我已经实现了它来控制一个跑步者

你的问题是你没有像这样设置延迟时间
Invoke(“停止跳跃”,0.01f)。这0.01f是导致
你的按钮的反应时间

使用UnityEngine;
使用系统集合;
公共阶层人物运动:单一行为{
私人动画师;
私家车内巷;
//用于初始化
无效开始(){
车道=0;

animator=GetComponent,我自己引用了它。

我找到了我需要的答案。当您选择称为“Has Exit Time”的转换时,有一个复选框。单击后,您必须删除复选框中的勾号,当您按下“确定”按钮时,您在Animator控制器上放置的动画将重新生成。:)

回答非常好,我认为非常完整。谢谢您的回答。我只是来这里搜索其他内容,猜猜看,我发现我创建的视频正在引用瑞德,让我感觉很好,很自豪。很高兴,如果我能帮上忙的话:):@Ashish谢谢你的指导伙伴。它帮了我很多(Y)
 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);
        }   
    }