c# - Unity C# if 语句失败?
问题描述
我正在努力学习 Unity,以努力追求成为游戏设计师的梦想工作。我遇到了一件奇怪的事情,我不明白为什么它似乎不起作用。
本质上,我有一个基于回合的战斗系统,但我正在尝试添加一个回合限制。我设置的基本上是:
int Clock = 5;
Clock--;
if (Clock <= 0)
{
EndCombat();
}
尽管成功更新了在 if 语句之前完成的健康栏,但它似乎从未结束战斗。我尝试了几件事,例如放置0 >= Clock
而不是Clock <= 0
,更改 HUD 中的文本以查看 if 语句是否甚至触发,我什至只是Clock = 0
在if
语句之前设置,但它似乎没有触发,我不知道出为什么。
目前它将 Clock 设置为 5,然后在任何回合(玩家或敌人)之后它会Clock--;
调用此方法:
void UpdateCombatHUD()
{
LeftHUD.SetHpAndMp(LeftUnit);
RightHUD.SetHpAndMp(RightUnit);
Timer.text = "Time: " + Clock;
if (Clock <= 0)
{
StartCoroutine(HELLO());
if (LeftUnit.CurrentHp > RightUnit.CurrentHp)
{
state = CombatState.Won;
EndCombat();
return;
}
else if (LeftUnit.CurrentHp < RightUnit.CurrentHp)
{
state = CombatState.Lost;
EndCombat();
return;
}
else if (LeftUnit.CurrentHp == RightUnit.CurrentHp)
{
state = CombatState.Draw;
EndCombat();
return;
}
else
{
return;
}
}
}
LeftHUD.SetHpAndMp
确保玩家的 Hp 和 Mp 条是准确的。
RightHUD.SetHpAndMp
确保敌人的 Hp 和 Mp 条是准确的。
StartCoroutine(HELLO());
应该显示一条消息,然后等待 5 秒钟,然后再执行其他任何操作(我用它来尝试帮助我找出问题所在,但StartCoroutine(HELLO())
从未触发)。
有人问过EndCombat()
,如果这有帮助,那就是:
void EndCombat()
{
switch (state)
{
default:
return;
case CombatState.Won:
DialogueText.text = "A winner is you!!!";
break;
case CombatState.Lost:
DialogueText.text = RightUnit.Name + ": Git Gud Scrub!!!";
break;
case CombatState.Draw:
DialogueText.text = "Wow, a tie ... that's akward ...";
break;
}
}
我不知道发生了什么变化,但我正在测试代码并在其他地方进行了更改,它在时钟为负数时显示了胜利文本,但随后它继续运行。所以它似乎有点解决了?
没关系,我添加了一些应该改变场景的代码,但它从未改变场景
解决方案
推荐阅读
- javascript - jQuery点击方法需要双击响应式布局
- python - 在 Django 2 中创建多种类型的自定义用户
- linux - 如何使用 libcurl 构建而不使用 apt-get 库?
- laravel - Laravel 没有将空值更新到列
- typescript - 如何监听父点击 JS?
- django - 如何使用 dJango 导入 csv 文件并将内容保存为具有正确列数的模型
- c# - 无法访问 UWP 中的视频库
- javascript - 在 Android 中,JavaScript 接口注入漏洞
- rust - 为什么 for 循环绑定上的 `ref mut` 与被循环的变量上的 `&mut` 不同?
- php - 从 Woocommerce 商店页面中的特定自定义元数据中过滤产品