#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 записаны из вашего кода, в котором вы вызываете этот метод?