I guess the best option to be able to port your game to be multiplayer ready is to use the GameState
for game related data which will be replicated to all connections while using the PlayerState
for the player related data (health, appearance, etc).
The GameState
instance is persistent while you do not change the GameMode
, this means when traveling the data will be there. The PlayerState
is a different beast. What the engine does is to build a new PlayerState
and let you persist values when it needs to. For example if a player disconnects it will save the PlayerState
into an inactive array so you can recover the persistent data if the same player connects again. To persist the PlayerState
data you should override the following methods: OverrideWith
, SeamlessTravelTo
and CopyProperties
. This is also supported in BP from version 4.13.
I would really not base all your networking on subobjects, the more objects you have that need replication the slower all network tasks will be. GameState
and PlayerState
are generally enough to handle the main load of state interaction.