首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我按下一个按钮而不等待其他动画时,如何启用我的动画?| Mecanim

当我按下一个按钮而不等待其他动画时,如何启用我的动画?| Mecanim
EN

Stack Overflow用户
提问于 2015-12-24 08:08:52
回答 2查看 1K关注 0票数 0

我正在学习如何使用机甲。在动画制作工具中,我有3个动画(idle、Walk和Run),这些动画工作正常,但问题是当我按下按钮W时,例如,在动画(walk)被启用之前,两秒钟过去了,因为该动画(walk)等待其他动画(idle)完成。我希望当按下按钮时,动画被激活。我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2015-12-24 10:35:01

我认为你已经做好了基本的准备,

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

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

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

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

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

你的问题是你没有设置延迟时间,像这样,Invoke("stopJumping",0.01f); .This 0.01f是导致你的按钮反应时间的延迟。

代码语言:javascript
复制
 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);
        }   
    }

如果你想推荐教程,只需查看this,这是我自己推荐的。

票数 0
EN

Stack Overflow用户

发布于 2015-12-31 20:07:01

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34445586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档