Unreal Engine 4
http://uengine.ru/forum/

Unreal C++ общие вопросы.
http://uengine.ru/forum/viewtopic.php?f=19&t=12369
Страница 7 из 8

Автор:  Dany [ 17 май 2018, 08:33 ]
Заголовок сообщения: 

Цитата:
Есть же такие штуки, ну вроде if-ов и bool-ов, не?))) Я могу вызвать код однократно и только при необходимости повторить.

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

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

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

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

Да, есть. Таймеры.

Автор:  rachok [ 17 май 2018, 11:56 ]
Заголовок сообщения: 

Цитата:
Да, есть. Таймеры.

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

Автор:  Dany [ 17 май 2018, 12:03 ]
Заголовок сообщения: 

Цитата:
Он создает новый поток или выполняется(встраивается) в существующем(их)?

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

Автор:  rachok [ 17 май 2018, 12:20 ]
Заголовок сообщения: 

Цитата:
Можешь обращаться к кому угодно и влиять, естессно..

И что-то тяжелое или требовательное к времени не будет останавливать основной поток (игру)?

Автор:  Dany [ 17 май 2018, 12:36 ]
Заголовок сообщения:  Re:

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


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

Автор:  rachok [ 17 май 2018, 14:16 ]
Заголовок сообщения: 

Цитата:
А если всю карту разом сохранять за один проход массива сохраняемых объектов, то таймер не нужен и тогда все встанет пока игра не будет сохранена...
Как-то так..

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

Автор:  Snake [ 17 май 2018, 15:37 ]
Заголовок сообщения: 

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

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

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

Автор:  Snake [ 17 май 2018, 15:41 ]
Заголовок сообщения: 

а многопоточность на с++ инфа благополучно гуглится, 4 разных способа точно находятся.

Автор:  Dany [ 17 май 2018, 15:50 ]
Заголовок сообщения: 


Автор:  Snake [ 17 май 2018, 15:58 ]
Заголовок сообщения: 

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

Страница 7 из 8 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/