Ok, say I have an online multi player game where players can download/purchase content (textures, clothing, hair etc) for their characters from a web store. The web store allows any registered user to upload content they have created to this website so that other users can download/purchase and use it to customize their players ingame.
I’m trying to understand exactly how a setup like this would work in Unity for a multi player environment. For example, if the game were single player, a player could easily download content from the web store, save it to their local computer and then access it via the Unity standalone game build. They could then easily save and load this content. But, in a multi player environment how would this work? Since other users can not access content that is saved in another user’s local computer (as far as I understand), how would other users be able to load/view this user’s custom downloaded textures, models etc? I recently created my first IMVU and Second Life account in order to try to understand the approach they are using for this, I’m still having trouble working it out though. Any suggestions?
This is a massive, massive question, and you are unlikely to get much response directly here. The question of handling DLC is one that generally involves large numbers of experienced developers and designers. When you add user-created content to the mix it becomes truly gargantuan.
However, for an overview…
There will be multiple distinct areas of development involved.
- Displaying/combining visual additions
- Determining the need for specific
add-ons and downloading them
- Versioning of content
- Tools for creation of content by
- Security and censorship of
user-created content (Unless you
actually WANT every second player
to have a penis for a sword).
- Storage and deployment of
While working with a previous employer (Mechanist Games) the requirements for the game included what you describe. After months of effort we had most elements functioning, but in the end abandoned user created content as it was impossible to ensure reasonable optimisation. And that was with months of effort for half a dozen experienced c# coders.
The storage and deployment solution we used was using assetbundles downloaded as needed by standard WWW class means if they were not found in the locally stored libraries (on standalone builds) or in memory (on webplayer builds). Assets which were found to be in heaviest demand during testing were moved into the main app deployment (in both standalone and web). Versionning involved adding public attributes to scripts attached to the Prefabs, being an integer derived from creation date, which could be used as a check against updated versions on the server. Where an updated version is found the standalone overwrites it’s locally stored version, while the webplayer simply replaces the assets stored in memory.
(In general, where I have used the term asset you can consider it to be a prefab)
I know this is far from a full answer, but the full answer would be writing your system for you and depend significantly on what exactly you want it to be able to do.