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

Использование классов движка и генерация мира.
http://uengine.ru/forum/viewtopic.php?f=19&t=14494
Страница 1 из 1

Автор:  Monolag [ 08 авг 2018, 21:10 ]
Заголовок сообщения:  Использование классов движка и генерация мира.

Здравствуйте. Пытаюсь сделать грамотную генерацию мира, в котором будут рендериться и выгружаться чанки.
Вопрос в том как использовать FRunnable и компоненты папки RenderCore, такие как IndexBuffer, FVertexBuffer и т.п.
Вопрос: Лендскейп строится с помощью компонента ProceduralMesh, высоты высчитываются PerlinNoise. Если я буду генерировать его по чанкам, к примеру 16 на 16 и буду разбивать это на RunnableThread? Это вообще реально и стоит ли того? Как это сделать примерно? Я понимаю, что я должен создать класс, который будет наследоваться от FRunnable. И буду использовать я все функции оттуда. Это все ясно, ладно. Но как это сделать? Мне ведь нужно иметь доступ к proceduralMesh в этом классе с FRunnable... Вся основная нагрузка ведь идет, когда непосредственно идет CreateSection, создается лендскейп, а не просто высчитываются координаты. В общем, как использовать в таком случае FRunnable?
Такой же вопрос и с RenderCore. Понимаю, что создаю классы, которые наследуют FIndexBuffer и т.п. Но как это все будет использоваться? Как это работает?
И еще, если возможно, подскажите через что лучше реализовать свою систему созранений в анриале? Понимаю, что вся информация о уровне должна записываться в какой-нибудь бинарник, считываться оттуда, но как это все реализовать? Так, чтобы именно, допустим, все изменения в опенворлде сохранялись, а потом загружались в игре?
Большое спасибо.

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

Создаете класс
Код:
class FTerrainGenerationWorker : public FRunnable
{
public:
   /*Default constructor*/
   FTerrainGenerationWorker();
   bool IsThreadFinished;
   virtual ~FCGWorldGeneratorWorker();
   virtual bool Init();
   virtual uint32 Run();
   virtual void Stop();
   virtual void Exit();

   FORCEINLINE TStatId GetStatId() const
   {
      RETURN_QUICK_DECLARE_CYCLE_STAT(PrimeCalculationAsyncTask, STATGROUP_ThreadPoolAsyncTasks);
   }
};


В cpp вашего эктора пишите

Код:
FRunnableThread::Create(new FTerrainGenerationWorker());

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