Just wanted to add a few pointers. Im sure you probably saw my ECS experiments with unreal engine http://victor.madtriangles.com/code%…cs-battle.html .
On the topic of ECS frameworks/libraries, the unity ECS is a unique type of model, in the way it works by storing entities with the same set of components into contiguous blocks. I implemented my own version of the same concept here. GitHub - vblanco20-1/decs: High performance Entity/Component/System library. . Its performance characteristics are absurd even in its prototype “barely works” stage. Its really not that hard to create a ECS framework, which is why you see so many of them, but all performant ECS dont guarantee pointer stability, so trying to allocate an uobject like that would be impossible.
The best ECS library you can find in internet is EnTT (GitHub - skypjack/entt: Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more), which uses a different model than unity ECS, but its very solid and nice to use. This is the one i have used in my experiments. It has different performance characteristics than unity ecs, but its really fast anyway.
Ive been doing a lot of different ECS experiments around, trying different ways to interface it with unreal engine. Ive actually shipped a game that used ECS (through entt) in a real project, a music game. It worked because i was loading the music charts from json files manually, and the Blueprints for the notes were display-only.
The issue with doing such things is the same as if you just ignore the game framework and code the game code in your own architecture. You completely lose access to blueprints, and you also lose access to assets and editor in general. Multiplayer is out of the question.
Even IF you do something like that, you will likely get bottlenecked by having to interface through the game framework to do things into unreal, unless you want to modify the engine itself. For one of the prototypes i had, i added hooks into the StaticMeshComponent so i could update the ComponentToWorld matrix and update the render proxy without going through the entire UpdateComponent flow.
One of the biggest roadblocks for such a thing is that to get UPROPERTY() support, you need to use UStructs or UObjects, but they have their limitations. UStructs cant be uproperty-d by pointer, and need to be stored by value in a component or actor, and uobjects have to be allocated through unreal engine internal systems, which means you cant use any custom memory management or pooling for them.
Im still doing different prototypes with different approach for this stuff, to see if there is a way that could work smoothly. The best i was able to make is to make ECS components have a UActorComponent wrapper, and use a special type of actor called a " ECS Template actor". The idea is that you would create a blueprint with this Actor, give it some of the wrapper components, and then you can apply a template actor into any scene-component to create a paired ECS entity with those components. Its a shame EditInline is as buggy as it is, as the template actor would work better as data asset or similar.
This is one of my most advanced prototypes:
In here, All of the objects are pure ECS, using the template-actor model i described. It has its own transformation/scenegraph system so it can interface well with parenting to/from unreal actors and back](ECS Tower defense prototype 1 - YouTube). The renderer is hybrid. Some of the objects are pure-ecs, and rendered with some global instanced mesh system, and some objects are just an actor that is getting transformed by the ecs logic.