Reusable code and content. Plugins or game modules ?

Hi everybody!

I’m making some 3d tilemaps tools that I plan to use with my games (and hopefully share with the unreal community at some point).
I started it as plain game code in a new project but now I want to setup it in a way I can share it between projects easily.

At first the obvious choice was to convert it into a plugin, however I need to be able to use the tilemap code from my C++ game code, and seems that plugins are not really thought to be used in that way .

I made a small test to see if I could call plugin code from a game module, and while it seems to be possible, hot-reload stops working.

The other option is to convert it into a separated game module, since it doesn’t modify the editor in any way. The problem is that the code has some content dependencies (a few meshes and materials) and also would make difficult to have separated git repositories for my game and my tilemap code. I don’t even know if it’s possible to have more than one git repository in the same folder.

So, any advise ?

You can use your plugin code directly in a C++ project by adding the plugin as a module in both the private and the public module dependencies.

If I where you I would add the code as git submodule (a complete separate repo within yours Git - Submodules) and your content as a plugin, using content dependencies can then be made using FStringAssetReferences so you do not need to hard-link them.

I normally use several different repos for my plugins and modules and add them as submodules in my game repo, it s a way to reuse them and then release your plugins in case you want to let others use them.

Hi Moss. Thanks for your help.

I know is possible to use plugin code from C++, however hot-reloading stops working for me (Unreal complains about not finding the plugin dll). Maybe I configured something wrong ?

I’m going to give the submodule approach a try anyway. Didn’t know about git submodules.

They are quite handy but also the workflow is quite unflexible, read carefully on how to commit/push changes to them :smiley:

When using them correctly (just follow the documentation) they are awesome ^^