0

我正在学习如何使用 mecanim。在动画师中,我有 3 个动画(空闲、步行和运行),这些动画可以正常工作,但问题是当我按下按钮 W 时,例如,两秒钟后才启用动画(步行),因为动画(步行)等到另一个动画(空闲)完成。我希望按下按钮时激活动画。我怎样才能做到这一点?

4

2 回答 2

0

我找到了我需要的答案。当您选择称为“有退出时间”的转换时,会有一个复选框。单击它,然后您必须删除复选框的勾号,当您按下确定的按钮时,您放在 Animator Controller 上的动画将重现。:)

于 2015-12-31T12:07:00.760 回答
0

我认为你已经做对了基础知识,

1.创建“动画控制器”,然后设置动画控件的动画并获取它们的布尔值,例如:跳跃状态获取布尔值作为跳跃,滑动状态获取布尔值作为滑动。

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

3. 你必须添加过渡到“AnyState”,因为从那里开始,它很容易改变到其他状态。

在此处输入图像描述

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);
        }   
    }

如果你想参考一个教程,只需检查这个,这是我自己参考的。

于 2015-12-24T02:35:00.553 回答