Unity C# , если инструкция не выполняется?

#c# #unity3d #if-statement

Вопрос:

Я пытаюсь научиться Unity, чтобы попытаться продолжить работу своей мечты-стать геймдизайнером. Я наткнулся на странную вещь, которую я не понимаю, почему это, похоже, не работает.

По сути, у меня есть пошаговая боевая система, которая в противном случае работает, но я пытаюсь добавить ограничение на ход. То, что я настроил, в основном:

 int Clock = 5;

Clock--;

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

Казалось, что бой никогда не закончится, несмотря на успешное обновление полос здоровья, которое выполняется прямо перед заявлением if. Я попробовал несколько вещей , таких как добавление 0 >= Clock вместо Clock <= 0 , изменение текста в HUD, чтобы увидеть, срабатывает ли вообще оператор if, я даже просто установил Clock = 0 прямо перед if оператором, но, похоже, он не срабатывает, и я не могу понять, почему.

В настоящее время он устанавливает время на 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;
    }
}
 

Я не знаю, что изменилось, но я тестировал код с изменением где-то в другом месте, и он отображал текст победы, пока часы были отрицательными, но затем он продолжал работать. так что, похоже, это вроде как решено?

неважно, я добавляю некоторый код, который должен изменять сцены, но он никогда не менял сцены

Комментарии:

1. Трудно сказать без дополнительного кода, но если это прямая копия метода, то вы никогда не нажмете на триггер, потому что вы всегда инициализируете переменную тактовой частоты до 5 и вычитаете 1, поэтому ее значение всегда будет равно 4 в операторе if.

2. Пожалуйста, опубликуйте весь код целиком.

3. извините, я попытался сократить его, чтобы быть прямым и по существу, позвольте мне обновить вопрос

4. @Kolichikov это помогает?

5. часы = часы -1; можете ли вы попробовать это вместо часов -? и вы уверены, что часы = 5 записаны из вашего кода, в котором вы вызываете этот метод?