I am working on a top-down ARPG using UNET. Here's an example of the inventory. Your hero character's data is saved locally on your hardDrive. When you connect to a host it passes the host your heroData and which spawns your hero on the server. Then the information is sent back to the original client via UNET NetworkBehaviour scripts. Doing this seems to work OK, but it got pretty complicated and I'm checking here to see if there's a cleaner way. Here's the method I'm using. Client Menu: Selecting/Creating Hero 1: Skim all files on hardDrive in "HeroData" folder. 2: Deserialize each file and extract string heroName from the file 3: Populate GUI list of heroNames 4: Select a hero from the GUI list Client Connect to Server & Spawn Player 1: CLIENT: MessageHeroData is created which contains byte byteArray of all heroData 2: CLIENT: During NetworkManager.OnClientConnect the client calls ClientScene.AddPlayer(conn, 0, messageHeroData) 3: SERVER: NetworkManager.OnServerAddPlayer with additional networkMessage is received 4: SERVER: messageHeroData with byte byteArray is read 5: SERVER: Hero gameObject is instantiated locally 6: SERVER: byteArray from messageHeroData is deserialized and applied to hero scripts. 7: SERVER: Hero gameObject is spawned to clients using NetworkServer.AddPlayerForConnection(...) 8: SERVER: The heroObject is completely serialized using OnSerialize(initialState == true) 9: CLIENT: HeroObject is spawned and OnDeserialize(initialState == true) is called for each script Runtime Incremental Updates 1: All incremental changes are sent using NetworkMessages (In the future I may be able to use OnSerialize/Deserialize but cant at the moment due to various UNET bugs) Saving Data 1: SERVER: Call Save(). This completely serializes the heroGameObject into a byte byteArray 2: SERVER: Create a networkMessage messageHeroData containing byte byteArray. Send to client owner. 3: CLIENT: Receive and read messageHeroData. Write byte byteArray to hardDrive. Does this seem like the proper way to do things? It seems to work, but seems really complicated. One Issue I have is a chicken & egg scenario. How to create a new hero data file? I need the heroData file to initialize a hero gameObject... but I need a hero gameObject to generate the data file! Which one do I make first?! Not sure the best way to handle this. What I've done is created a limited data file when making a new hero. Then during gameObject initialization I let scripts know they do not have any data and then the script can initialize itself w/o data (i.e. inventory adds starting equipment). Thanks in advance.