Полезное

Мы Вконтакте

Discord канал

#
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 10
Пытаюсь создать зону радиации. Когда актор входит в неё, радиация начинает накапливаться, вместе с этим появляется урон здоровью. Чем больше радиации, тем быстрее уменьшается здоровье. Когда актор выходит, накопленная радиация начинает уменьшаться, вместе с тем, чем меньше остаётся накопленной радиации, тем меньше урон, и медленнее уменьшается здоровье.

1. Создал Blueprint, подгрузил ему бокс и визуальный plane, чтобы было видно где зона (для теста).

Изображение

2. В Event Graph'е создал два события: когда актор входит в зону, и когда выходит. На 'On component begin overlap' повесил добавление радиации и цикл для урона, но цикл не работает, там нужны начальное и конечное значение, я подумал, что можно подключить булевы переменные, но походу бред, а как по другому не знаю. Плюс, если я установлю к примеру, от 1 до 10, то здоровье будет уменьшаться не постепенно, а сразу на 10. Не знаю как сделать постепенно, если использовать таймеры, то подскажите, где как они работают, но вроде тоже не верное решение.

Изображение

3. И, собственно, добавление радиации. Но добавляет не всегда, когда нахожусь в зоне, а только когда зайду, один раз, после выхода и захода добавит снова 10, но не постепенно.

Изображение
Аватара пользователя
Пользователь
Сообщения: 10
Изменил цикл 'ForLoop' на 'WhileLoop'! Не знаю, почему первый раз так ступил, но в общем, теперь логично всё, урон будет наноситься, пока переменная "RadiationHas" - true, при выходе из зоны, переменная "RadiationHas" становится false, соответственно, и нанесение урона прекратится, но вот в чём проблема: урон происходит мгновенный, а не постепенный, актор умирает сразу. Как реализовать работу этой зоны правильно?

Изображение
Аватара пользователя
Пользователь
Сообщения: 2319
да потому что цикл тут не нужен совсем...
таймер или тик в помощь.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 469
Ага таймер самое то, для этой задачи. А вот использовать вайл лооп в таком виде вообще неправильно, да и вообще может крах вызвать.
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 10
Использовал Event Tick, и проверки, всё работает. Только осталось понять, как рассчитывать расстояние для урона, т.е. в самом центре зоны радиация накапливается быстрее, и урон больше, а по краям медленнее...
Аватара пользователя
Пользователь
Сообщения: 469
Я настоятельно рекомендую забыть про существование EventTick
Цитата:
т.е. в самом центре зоны радиация накапливается быстрее, и урон больше, а по краям медленнее...

для этого используем например Map Range

Изображение

Таймер работает так. Весь функционал дамага запихиваем в функцию(у меня указано RadDamage)определяем таймер через SetTimerbyFunctionName(прописываем название функции) ниже Time это задержка перед выполнением - зациклить looping.
Соответственно остановить таймер через ClearTimirbyFunctionName.
Это как вариант их можно придумать много.
_________________
Project SKIT


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница