如何在统一的每个按键上重复动画(Unity3d,C#)

Posted

技术标签:

【中文标题】如何在统一的每个按键上重复动画(Unity3d,C#)【英文标题】:How to make animation repeat on every keypress in unity (Unity3d, C#) 【发布时间】:2021-04-04 22:40:04 【问题描述】:

我是 C# 和 Unity 的新手,我试图弄清楚当我按下一个键时如何在统一播放中为一个对象制作动画,但我只能让动画播放一次,然后它就坏了不起作用。 (我正在尝试制作一个FPS游戏)

我现在的代码如下所示:

  void Start()

    gameObject.GetComponent<Animator>().enabled = false;



// Update is called once per frame
void Update()

    if (Input.GetButtonDown("Fire1"))
    
        Shoot();
        gameObject.GetComponent<Animator>().enabled = true;
           

当我按下运行并左键单击时,动画会触发并按预期执行,但是当我再次尝试执行此操作时,动画不起作用。谁能帮我更改此代码,以便每次按下按钮时动画都可以正常播放?

【问题讨论】:

【参考方案1】:

我假设您的动画是非循环的,就好像它正在循环一样,它在结束时已经播放回自身。

我对您的代码的一个快速说明是不要在更新函数中使用 GetComponent,因为它非常昂贵。重置动画状态的一种简单方法是启用和禁用它,但是我假设您希望拥有比拍摄更多的动画。您可能想查看所谓的动画树或Blend Tree 并将状态添加到您的动画中。状态的示例是空闲、步行、跑步、射击、蹲伏等。我会考虑研究动画树和混合树以获得完整的动画循环。

一旦你让状态机工作,我会让 enter 进入空闲状态,然后设置一个转换 Bool 或直接在代码中切换动画。

// when you serialize a private field, it will appear in 
// the inspector so you can drag in the reference in the editor
[SerializeField] private Animator anim = null;

private void Start()

     anim.enabled = false;


private void Update

     if(Input.GetButtonDown("Fire1")
     
          Shoot();
          if(!anim.enabled)
               anim.enabled;
          else
               anim.Play("AnimationStateName", -1, 0f);
     

我没有测试过代码,但我相信这适用于您的设置。我仍然强烈建议不要这样做并查看 Trees。实现树后,不要使用启用的调用,只需使用行 anim.Play("AnimationStateName", -1, 0f) 或者如果您将状态设置为从 Idle 转换,则可以执行 anim.SetBool(isAttacking, true) /运行/步行/等。当 isAttacking 布尔值设置为 true 时进行攻击。

我找到了一个video 可能会对您有所帮助。我不想发布对动画状态和混合树的完整解释,只是为您指出正确的方向以找到更好的方法。

【讨论】:

谢谢!我会尝试这段代码并对动画树和混合树做一些研究。 如果您在使用它时遇到任何问题,请告诉我,因为它未经测试。我很确定它应该可以工作。 @v007 只是想签到。这最终对你有用吗?如果确实如此,您是否会考虑接受和/或支持答案,以让其他人知道谁发现了您的问题,这就是解决方案。如果没有,您目前遇到的错误/问题是什么?

以上是关于如何在统一的每个按键上重复动画(Unity3d,C#)的主要内容,如果未能解决你的问题,请参考以下文章

unity3d 如何用GUI按钮播放动画脚本怎么写

如何在unity3d中创建最简单的按钮

Unity3D 中如何同时获得鼠标点击和键盘按键

android.view.animation - LayoutAnimationController 和 GridLayoutAnimationController

Unity3D无法列出目标平台错误[重复]

如何在 Unity3D 中编辑动画