Unity3d 间歇多次输入触发动作

Unity3d 间歇多次输入触发动作,unity3d,Unity3d,无法找出导致间歇性错误的原因。问题是,有时按住A键或快速按下A键时,“explosionA”动画会多次触发,但并不总是如此 void Start() { aUsable = true; aCooldown = 0.5f; aTimer = 0; } void Update () { CooldownManager(); Cast(); } void Cast() { if (Input.GetKey(KeyCode.A) &&

无法找出导致间歇性错误的原因。问题是,有时按住A键或快速按下A键时,“explosionA”动画会多次触发,但并不总是如此

void Start() {
    aUsable = true;
    aCooldown = 0.5f;
    aTimer = 0;
}

void Update () {
    CooldownManager();
    Cast();
}

void Cast() {
    if (Input.GetKey(KeyCode.A) && aUsable){
        spell.SetTrigger("explosionA");
        aUsable = false;
    }
}

void CooldownManager() {
    if (Time.time > aTimer){
        aUsable = true;
        aTimer = Time.time + aCooldown;
    }
}
在Cast()函数中尝试此操作


问题是,即使aUsable bool已经为真,并且可能会在Time.Time非常接近aTimer时触发该法术,那么在允许下一个法术触发之前经过的时间是“aTimer-Time.Time”,比aCooldown短

要解决此问题,您可以执行以下操作:

void Cast() {
    if (Input.GetKey(KeyCode.A) && aUsable){
        spell.SetTrigger("explosionA");
        aUsable = false;
        aTimer = Time.time + aCooldown;
    }
}

void CooldownManager() 
{
    if (!aUsable && Time.time >= aTimer)
    {
            aUsable = true;
            aTimer = Time.time + aCooldown;
    }
}
这会给你一个正确的触发频率

我希望这将修复您的错误。
Roberto

FixedUpdate
而不是
Update
如何?这并没有解决问题。不幸的是,我希望用户能够在技能冷却结束后按住键继续使用该技能。我不确定,但可能会拼写.SetTrigger()函数需要更长的时间来执行,从而导致施法()在aUsable标志设置为false之前要再次执行的函数?我在Unity Docs中看到了一个非常类似的触发速率实现:。您可以将其选中,而不是更改强制转换条件以将Time.Time检查包含在if语句中,以解决此问题,但是我需要弄清楚为什么我当前的实现不起作用,因为CooldownManager函数将处理不同长度的多个法术冷却。我不希望所有的检查都在Cast函数的if语句中。您能尝试更改if块中的调用顺序吗。i、 e set
aUsable=false然后调用
spell.SetTrigger(“explosionA”)
void Cast() {
    if (Input.GetKey(KeyCode.A) && aUsable){
        spell.SetTrigger("explosionA");
        aUsable = false;
        aTimer = Time.time + aCooldown;
    }
}

void CooldownManager() 
{
    if (!aUsable && Time.time >= aTimer)
    {
            aUsable = true;
            aTimer = Time.time + aCooldown;
    }
}