间歇性地多次输入触发动作

时间:2014-07-17 02:26:23

标签: unity3d

无法弄清楚导致间歇性错误的原因。问题在于,当持有A键或快速按下A键时,“爆炸A”动画会多次触发,但并非总是如此。

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;
    }
}

2 个答案:

答案 0 :(得分:1)

问题在于,即使aUsable bool已经为真,也会调用CooldownManager,并且当Time.time非常接近aTimer时可能会触发该法术,因此在允许下一个法术触发之前经过的时间是" aTimer - Time.time"那比cooldown少。

要解决此问题,您可以:

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;
    }
}

这应该会给你一个关于法术触发的正确频率。

我希望这能解决你的错误。 罗伯特

答案 1 :(得分:0)

在Cast()函数

中尝试此操作
if (Input.GetKeyDown(KeyCode.A) && aUsable){
//...
}