我目前正在尝试在时间系统之后重新生成,但无论我做了什么,它都不起作用,基本上是这样的:
玩家被击中,等待2-3秒,恢复开始。但是我不能让“等待2-3秒”来重新生成。
代码:
private void Hit()
{
if (PlayerShield > 0)
{
PlayerShield -= EnemyScript.EnemyBulletDamage;
}
else
{
Health = Health - EnemyScript.EnemyBulletDamage;
}
Invoke("Regen", 3);
if (Health < 0)
{
Debug.Log("player dead");
}
}
private void Regen()
{
while (PlayerShield < 120)
{
PlayerShield += 10*Time.deltaTime;
if (PlayerShield > 120)
{
PlayerShield = 120;
}
}
}当我运行这段代码时,如果播放器没有被击中几次,这个代码可以工作,但是如果它在3秒内被击中多次,它就不会重新启动等待过程,这就是我的主要问题。
发布于 2020-06-27 04:59:50
这里有一个简单的解决方案,就是在每次Invoke调用之前使用CancelInvoke:
private void Hit()
{
if (PlayerShield > 0)
{
PlayerShield -= EnemyScript.EnemyBulletDamage;
}
else
{
Health = Health - EnemyScript.EnemyBulletDamage;
}
CancelInvoke("Regen");
Invoke("Regen", 3);
if (Health < 0)
{
Debug.Log("player dead");
}
}
private void Regen()
{
while (PlayerShield < 120)
{
PlayerShield += 10*Time.deltaTime;
if (PlayerShield > 120)
{
PlayerShield = 120;
}
}
}https://stackoverflow.com/questions/62602255
复制相似问题