Request for guidance and feedback : Modular architecture for a training application

Good afternoon everyone.
I hope you’re doing great despite the current pandemic.

I’m reaching out as I’m a new Unreal Engine user, and I have few question regarding the design’s architecture for my application. Before going deep in development, I’ll love to get some of your precious feedback.

I’m currently developing a training environment, that I want to be modular and easy to customize (even after the build). My end users (trainers and trainees) won’t be programmers, but I would like to give them the ability to create and adapt their own training scenarios so that it will fit their needs.

In order to do so, I’m envisioning a setup like this one (cf picture).
Where a bunch of “digital lego brick” (asset with physical and logical properties) could be assembled together to allow complex behaviours.

The idea would then be to store those assets outside the application, and load them only when needed (with async loading or similar). Following this philosophy, this library of assets could even be expended afterward with new asset addition (ex: Adding a ladder). In this paradigm it becomes possible for teachers to create, download or even exchange assets tailored to their training needs.

  • The scenario’s description will be stored aside into a worldConfig files (in .xml, .json, or .x3d,…). Such files will define the layout of the scene, which asset to load and how they interact or should be use.

  • Ideally each asset should use a format (maybe .pak) embedding both their physical properties and behaviour (logic) :

    • For the physical properties, .glTF seems a better candidate as material exports is better than .fbx.
    • Regarding logic I’m looking for at scripted language that can be similarly integrated. Hence .Lua JIT seems to be interesting, but Javascript V8 or even Python are interesting alternatives. Some people might suggest to stick to blueprints, but it’s really fitting my platform agnostic design.

Concerning the scenario’s “logic” (number of trials, training parametrization, …) and interaction scheme (selection, grasping, snapping, …) I’m still trying to figure how to make it work it in such architecture. One approach might be to use wrapper and delegate those function to the engine itself with interfaces. The added value of this approach is a platform agnostic design, but is part is not critical for now.

Did you already developed similar architectures?
What would be your recommendations?

My big question is mainly about the use of Lua, as the current opinions on its usefulness seem to be very polarized (especially against JavaScript V8), and I cannot make up my mind.

I would like to thank you in advance for your interest and future feedback.

See you soon.


Ps: If its not in the right section, please feel to move it on the right one.