unity3d Unity:快速按下按钮时未触发动画事件

lrl1mhuk  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(256)

我正在做一个2D视频游戏项目,但是我在角色的攻击上有一个奇怪的错误。我已经使用Unity很短的时间了...
当我按下攻击按钮时,播放一个动画,并将一个布尔变量设置为true,当攻击动画结束时,它有一个事件到位,调用一个函数将布尔变量改回false。

添加到玩家游戏对象的主脚本(MonoBehaviour):

void Update(){
    if (Input.GetKey(script_buttons.button_attack))
                {
                    gun_attacking = false;
                    player_animator.Play("gun_attack");
                }
}

武器攻击动画结束时调用的事件:

void foot_gun_attack()
     {
       attack_script.gun_attacking = false;
     }

它工作正常,但如果我快速按下攻击按钮,有些时候变量永远不会变成假,游戏就会疯狂。
在动画中使用事件本身是不可靠的吗?为什么它失败了,并且没有再次将布尔变量更改为false?
我已经通过在动画中添加状态机行为脚本部分修复了这个问题,在上述脚本中,我将OnStateExit函数中的变量更改为false。这样就可以了,无论您按下按钮的速度有多快,攻击都不会错过,这个问题迫使我同时拥有动画事件和状态机行为脚本。如果我删除事件,变量就不会变为false。如果我删除状态机行为,变量确实会变为false,但偶尔会失败。

状态机行为脚本:

override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
       attack_script.gun_attacking = false;

    }

唯一不失败的方法是在两个地方都设置变量为false,我认为这很疯狂,不应该是正常的行为。动画事件应该足够并且工作正常,但是为什么它不能正常工作呢?我不想限制按钮点击或者添加超时,或者这是唯一的方法吗?
也许是我的错误或统一的问题,有人知道发生了什么事?

6l7fqoea

6l7fqoea1#

原因可能是动画永远不会结束并进入另一个状态
第一种方法是当动画开始时调用你想要的函数,但是在协程中,它等待动画时间,然后将bool返回为false。
或者继续使用您自己的方法,但在动画前后的过渡中检查并更改此配置。

请特别尝试以下两个复选框

相关问题