Hey, folks!
Introduction
In case you don’t know what ECS is about: wiki, much more](Entity Component Systems · GitHub).
The main advantage is extendibility: you literally can add or remove the features almost w/o thinking about architecture, it won’t break your game. It becomes really handy when you yet to know all the game’s features, mechanics, etc. However, it is not the only one.
Second cool “feature” is **Data-Oriented **approach, in short it means the processing data will be structured in CPU-friendly
Where ECS really shoots is MOBA-like games – e.g., «Overwatch» uses ECS](http://gad.qq.com/article/detail/28682) (reachable 5-th of Febraury, 2018). However, ECS can be used mostly in any genre. There are still discussions about tough logic (multithreading, pseudo-AI, real-time physics, etc.), but I believe it isn’t a reason not to get common with ECS.
As far as I know Unity is going to add this approach to official build (if they haven’t added it), moreover, there is already Entitas and other stuff.
What is more important, there is nothing ready-to-use for UE4, however, there are tons of ECS-frameworks for C++ (Artemis, EntityX, Anax, SRombauts’, redxdev’s, EnTT, etc.).
Plot
Since one doesn’t want to just add another layer on top of the UE4, we are going to сreate a plug-in that works directly with the core Engine’s pipeline (if it will shoot of course).
For this, I see a several problems (i.e., tasks) for ECS-module-to-UE4 integration (step-by-step plan):
- understand (grasp entirely) how ECS should work
- either adapt existing C++ solution (I think of EnTT), or implement it from scratch
- find the exact spot(s) where the module should touch UE4
- provide a layer for UE4 C++ API (including code generation and stuff)
- provide intuitive GUI for end-user (or end-developer), i.e., plug-in with all the ECS-managers
- get the feedback, fix the bugs, improve the module, etc.
Summary
Problem: there is no ECS pipeline in UE4.
Solution: GUI plug-in for UE4.
Update [2018.02.17]
I’ve found UGameEngine to make custom Game Loop cycle, and UEditorEngine \ UUnrealEdEngine to work with Editor directly (however, I think new GUI plug-in can be made a bit more easily, like that).
The one thing I am not sure is if it it’s possible (i.e., easy enough to work around) to change DefaultEngine.ini from plug-in side.
Moreover, I’ve connected EnTT to UE4 – looks like it works pretty well.
Update [2018.03.25]
For some reason custom GameLoop doesn’t want to be compiled. If anyone has success in this subject, please, write here or PM. [HR][/HR]
Extra
If you have any advices, considerations, notes, or thoughts, please, share.