Unity3d 间歇多次输入触发动作
无法找出导致间歇性错误的原因。问题是,有时按住A键或快速按下A键时,“explosionA”动画会多次触发,但并不总是如此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) &&
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 setaUsable=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;
}
}