Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как перезапустить цикл в unity c#

Глеб Гуменяк Ученик (160), на голосовании 5 месяцев назад
Короче есть цикл(ниже код будет) если isNearPlayer это false то нужно начинать цикл сначала, а если true то отнимать 10 от переменной Health, ждать 1 секунду и снова проверять isNearPlayer это true или false. Вообщем проблема в том, что если писать yield break то цикл заканчивается и не начинается снова, а если писать yield return null то цикл продолжается даже если isNearPlayer равно false
private IEnumerator deadZoneLogic()
{
while (true)
{

if (!isNearPlayer)
{
//print("daleko");
yield break; // если не в дедзоне, то ничего не делаем
}

Health -= 10;// снимаем нужное хп

if (0 >= Health)
{
print("dead");
}

yield return new WaitForSeconds(1f); // ждём 1 секунду, чтобы не съедало всё здоровье за в один миг

}
}
Голосование за лучший ответ
Evgeny Ek Знаток (297) 7 месяцев назад
Alt+F4
Глеб ГуменякУченик (160) 7 месяцев назад
Гений
Evgeny Ek Знаток (297) Глеб Гуменяк, не благодари
Vasyok Мудрец (19673) 7 месяцев назад
зачем ты пишешь генератор то для этого?
похоже что бесконечный цикл должен быть снаружи генератора.
и еще обьясни с каком потоке вызывается он, потомучто если в основном то он стопанет все остальное дейтсвие.
а так чтото такое:
if (!isNearPlayer)
{
//print("daleko");
}
else
{Health -= 10;// снимаем нужное хп }


ваще такие штуки как радиенс если я правильно понял надо писать в одельном потоке и войдом.
Плюс создай базовый класс для действий и реализуй его наседников которых будешь в игроом цикле или в отдельных потоках чекать просто паттерном обсервер
Глеб ГуменякУченик (160) 7 месяцев назад
Вообще мне надо чтобы если переменная isNearPlayer равно true(т.е. когда игрок входит в тригер врага) то каждую секунду из переменной Health отнимается 10
Похожие вопросы