c# - 在 Unity C# 中制作现代 FPS 游戏健康再生系统
问题描述
我目前正在尝试在时间系统后进行再生,但无论我做什么都没有用,基本上是这样的:
玩家被击中,等待 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 秒内获得多次击中,则不会重新启动等待过程,这是我的主要问题。
解决方案
这里的一个简单解决方案是CancelInvoke
在每次Invoke
调用之前使用:
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;
}
}
}
推荐阅读
- mysql - 捕获/处理 django.db.utils.OperationalError(2013,与服务器的连接丢失)后无法关闭和重新打开 MySQL 连接
- python - Python:将 1D 列表转换为 3D numpy 数组
- javascript - 对象的 == 和 === 是否相同?
- r - r knit to pdf/html: pandoc 文档转换失败,错误 2
- visual-studio - IISExpress 远程访问
- tensorflow - Keras,训练期间验证集上的 auc 与 sklearn auc 不匹配
- css - sass css输出中的差距
- c# - ASP.NET MVC 将 DateTime 转换为 UTC 以发送到 API
- django - Django Auth:“此字段是必需的”
- html - 在 Ruby 中使用 Nokogiri 抓取特定标题