Hello,
I want to share some Unreal Engine 4 game modules that I am currently working on, these modules are meant to extend existing UE Game Framework modules to help its users create non-unreal-ish kind of games. The modules are currently geared towards single player games, but my goal is to make them able to be used for making multiplayer game. This is not a plugin although it can be easily made into one but I do not want to worry about that just now because this is still early in development and there are still a lot of things needs to be implemented before packaging these modules as a plugin (some of the features that I have planned might not be appropriate to be made into a plugin so if I were to make a plugin out of these modules, only a subset of them can be included)
This is git repository for these modules:
It is licensed under MIT license, so feel free to use them ( or some part of them ) in your own project.
Once again, these modules are still in progress, they may not work properly, there may be bug, and a high chance for significant changes in the future. With that said, my purpose in sharing this module is in the hope that some people would use them (or some of them) and then detect some bugs or even improve them in a way that I have not think of before which in return helped us (me and everybody who are using it) in making their game.
Thanks,
I haven’t created a proper documentation on how to use these modules, but there are a lot of comments in the code that may help you understand what I have implemented so far and for now I am just going to list a brief list of features in them.
Brief Overview of the Features
Game Object Tree
A tree of unreal objects that can be used for objects that should persist through several different maps and game modes. There can only be one tree in the game that is indirectly attached to GameInstance and this tree can be serialized to a recprd that can easily be added to save game object. An example usage would be to build an inventory system in the object tree, the inventory should persist even when the character moves to another level or if the inventory of a certain NPC is not in the world where the player is currently at.
Game Data
This is for data that can never change but they can also have an instance that contains runtime data that will be automatically saved and loaded from/to save game, the mechanic is a little bit similar to UMaterialParameterCollection where at runtime a UMaterialParameterCollectionInstance is created in the world where the data is used. An example usage would be to create RaceData, ItemData, CharacterJobData, WeatherData, etc. An example of a data that can have an instance would be FactionData, where most of the data are static except for its faction relationship table, this table can be stored in the GameData instance that will in turn make it saveable.
Currently each data is created as an asset (just like UDataAsset), but my final goal is to make a UGameDataBase object that stores all of this data and it has a special editor that will be more or less similar to Object Editor in Skyrim’s creation kit.
Game Manager and ‘Game’
This is the framework classes, GameManager is a UGameInstance that should be set as the GameInstance of the game project (or an inherited class of it). It basically manages a ‘Game’, the game can be started, stopped, saved, loaded, etc. from the GameManager, it will also stores miscellaneous local player data that persist through different games such as game difficulty settings, profile name, tutorial flags, etc.
A ‘Game’, is, well, a Game Session ( But i can not use that name because it has already taken ), it’s a persistent data in a single game session, this is where the root of the object tree is stored. Saving the game means saving the object tree.
Game User Interface
This is an extension of UMG, where some of the more common features (or missing features) from UMG are implemented. It manages mouse cursor, gamepad, and keyboard input related stuff, it manages screens and pop ups, it adds some easy to use tweening function that can be tweaked later into CurveFloat if necessary. And many other UI related stuff.
Various Game Utilities
- Several logging function (wraps UE_LOG), inspired from Rama’s victory plugin logging code.
- Assets related functions
- Blueprint general class auto pooling.
- A simple state machine, and a tweening state machine for animating UI.
- etc.