Полезное

Мы Вконтакте

Discord канал

#
1 ... 45678
Аватара пользователя
Пользователь
Сообщения: 237
Цитата:
Есть же такие штуки, ну вроде if-ов и bool-ов, не?))) Я могу вызвать код однократно и только при необходимости повторить.

Ну, если в твоем понимании разумности ловить каждый тик событие и проверять булами это круто, то делай.
Хотя нормальной практикой является запуск события по необходимости а не проверка состояния наступления события каждый тик.
Правда понимание логичности у каждого свое. Для кого-то путь из Новосиба в Омск через Владивосток логичнее.

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

Нет не остановится, просто каждый тик будет поступать событие и каждый раз будет запускаться еще один процесс. В итоге ты получишь 100500 одновременно работающих процессов что и вызовет зависание (может даже без вылета).

Цитата:
Есть какаие-то встроенные возможности движка?

Да, есть. Таймеры.
Аватара пользователя
Пользователь
Сообщения: 98
Цитата:
Да, есть. Таймеры.

Это они?
https://docs.unrealengine.com/en-US/Pro ... ure/Timers
Он создает новый поток или выполняется(встраивается) в существующем(их)? Мне без разницы, главное, могу ли я смело обращаться к экторам на сцене, как-то влиять на них напрямую из таймера и т.д.?
Аватара пользователя
Пользователь
Сообщения: 237
Цитата:
Он создает новый поток или выполняется(встраивается) в существующем(их)?

Под каждый таймер свой поток.
Если глубже копнуть, то выяснится что это по-сути часть общего потока, но с технической точки зрения таймер может контролировать отдельный поток.
Можешь обращаться к кому угодно и влиять, естессно..
Аватара пользователя
Пользователь
Сообщения: 98
Цитата:
Можешь обращаться к кому угодно и влиять, естессно..

И что-то тяжелое или требовательное к времени не будет останавливать основной поток (игру)?
Аватара пользователя
Пользователь
Сообщения: 237
rachok писал(а):
И что-то тяжелое или требовательное к времени не будет останавливать основной поток (игру)?


Будет, если время вычисления будет по продолжительности приближено ко времени кадра.
Если это сохранение, то можно внутри таймера поставить контроль потока.
Например тебе нужно сохранить локацию, на которой 100500 объектов.
Ты запускаешь таймер сохранения и он через интервалы (0.3 секунды например или же даже по тику) сохраняет каждый объект. По факту это параллельный процесс и не сильно грузит потому как игровой Тик не перегружается.
А если всю карту разом сохранять за один проход массива сохраняемых объектов, то таймер не нужен и тогда все встанет пока игра не будет сохранена...
Как-то так..
Аватара пользователя
Пользователь
Сообщения: 98
Цитата:
А если всю карту разом сохранять за один проход массива сохраняемых объектов, то таймер не нужен и тогда все встанет пока игра не будет сохранена...
Как-то так..

Я могу запустить такую вещь 1 раз в Tick (да-да, на if и bool)?
Я ж могу создать отдельный эктор, отспавнить его, а у него будет одна единственная функция, с проверкой, не запускали ли ее. Если ее не запускали, то в ней он будет находить все 100500 объектов и записывать их координаты и повороты.
Будет остановка?
Или остановки не будет - движок создаст отдельный поток и т.п...?
Аватара пользователя
Пользователь
Сообщения: 2319
таймер выполняется в мейн треде(основной поток)...
в блупринтах вообще нет инструментов для многопоточности... на с++ инструменты уже есть.
движек не создает отдельных потоков сам... неважно чем ты его нагрузишь.

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

при много поточности мейн-тред будет выполняться независимо от других потоков, тоесть без фризов.
_________________
we need to go deeper
Последний раз редактировалось Snake 17 май 2018, 15:45, всего редактировалось 2 раз(а).
Аватара пользователя
Пользователь
Сообщения: 2319
а многопоточность на с++ инфа благополучно гуглится, 4 разных способа точно находятся.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 237
Аватара пользователя
Пользователь
Сообщения: 2319
Dany , многопоточсть самая распространенная задача для игр...
В идеале мейн тред получает только результат вычислений из остальных потоков , тогда будет 999 фпс и парарлельно со всеми плюхами возможными.
Но конечно все по потокам не распихаешь, ограничение критических секций.
Асинхронно желательно делать любую задачу которая имеет не около нулевую стоимость.
В мейн треде есть всего 16 миллисекунд (60фпс) чтоб порешать свои задачи на текущий фрейм, все что больше - уменьшение фпс.
_________________
we need to go deeper
Последний раз редактировалось Snake 17 май 2018, 16:05, всего редактировалось 1 раз.


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

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