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

如何在unity(Unity3d,C#)中的每个按键上重复动画,c#,visual-studio,unity3d,animation,3d,C#,Visual Studio,Unity3d,Animation,3d,我对C#和Unity还不熟悉,我想知道当我按下一个键时,如何在Unity play中为一个对象制作动画,但我只能让动画播放一次,然后它就坏了,无法工作。(我正在尝试制作一个FPS游戏) 我现在拥有的代码如下所示: void Start() { gameObject.GetComponent<Animator>().enabled = false; } // Update is called once per frame void Update() { if (

我对C#和Unity还不熟悉,我想知道当我按下一个键时,如何在Unity play中为一个对象制作动画,但我只能让动画播放一次,然后它就坏了,无法工作。(我正在尝试制作一个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;
    }       
}
void Start()
{
gameObject.GetComponent().enabled=false;
}
//每帧调用一次更新
无效更新()
{
if(Input.GetButtonDown(“Fire1”))
{
射击();
gameObject.GetComponent().enabled=true;
}       
}

当我按run并左键单击时,动画会触发并按预期的方式执行,但当我再次尝试执行时,动画无法工作。有谁能帮我更改此代码,使动画在每次按下按钮时都能工作和播放吗?

我假设您的动画是非循环的,就好像它是循环的一样,它在结束后会自动播放

我对您的代码的一个简要说明是,不要在更新函数中使用GetComponent,因为这相当昂贵。重置动画状态的一个简单方法是启用和禁用它,但是我假设您希望拥有比拍摄更多的动画。您可能希望查看所谓的动画树或动画,并将状态添加到动画中。状态的例子是空闲、行走、运行、拍摄、Crouch等。我会考虑研究动画树和混合树来获得完整的动画循环。

一旦你让一个状态机工作,我会让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);
     }
}
我还没有测试代码,但我相信这将与您的设置工作。我仍然强烈建议不要这样做,去看树。实现树后,不要使用已启用的调用,只需使用行anim.Play(“AnimationStateName”,-1,0f),或者如果您在isAttacking bool设置为true时将状态设置为从Idle/Run/Walk/etc转换为Attacking,则可以执行anim.SetBool(isAttacking,true)


我找到了一个可以帮你的方法。我不想发布关于动画状态和混合树的完整解释,只想为您指出更好的方法的正确方向。

谢谢!我将尝试这段代码,并对动画树和混合树进行一些研究。如果您在使用它时遇到任何问题,请告诉我,因为它未经测试。我相当肯定它会起作用。@v007只是想办理登机手续。这对你有用吗?如果这样做,你会考虑接受和/或投票的答案,让别人知道谁发现你的问题,这是解决办法。如果没有,您目前有哪些错误/问题?它成功了,谢谢!