首页 > 解决方案 > Unity C# if 语句失败?

问题描述

我正在努力学习 Unity,以努力追求成为游戏设计师的梦想工作。我遇到了一件奇怪的事情,我不明白为什么它似乎不起作用。

本质上,我有一个基于回合的战斗系统,但我正在尝试添加一个回合限制。我设置的基本上是:

int Clock = 5;

Clock--;

if (Clock <= 0)
{
    EndCombat();
}

尽管成功更新了在 if 语句之前完成的健康栏,但它似乎从未结束战斗。我尝试了几件事,例如放置0 >= Clock而不是Clock <= 0,更改 HUD 中的文本以查看 if 语句是否甚至触发,我什至只是Clock = 0if语句之​​前设置,但它似乎没有触发,我不知道出为什么。

目前它将 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;
    }
}

我不知道发生了什么变化,但我正在测试代码并在其他地方进行了更改,它在时钟为负数时显示了胜利文本,但随后它继续运行。所以它似乎有点解决了?

没关系,我添加了一些应该改变场景的代码,但它从未改变场景

标签: c#unity3dif-statement

解决方案


推荐阅读