- Home /
How to approach DLC for standalone and web build games?
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?
Answer by MarkFinn · Sep 28, 2012 at 07:21 AM
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 to characters
Determining the need for specific add-ons and downloading them
Versioning of content
Tools for creation of content by users
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 downloadable content
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.
The tools to do the vetting/approval would be simple enough, a week or two's work to get them up to initial usable spec, but we did some estimates on the man-hours involved in actually doing the checking and it turned out that if the feature was even slightly successful on a popular game it would (optimistically and assu$$anonymous$$g the really bad submissions could be rejected automatically or based on "crowd-sourced" opinions) be full time work for at least half a dozen people per thousand players, and potentially a lot more.
These numbers are based on what we were considering for City of S$$anonymous$$m (New Epoch) at the time, and obviously would vary significantly from game to game. We just ditched the whole idea of user-created wearables, and opted to focus more on user-created quests and maps.
Thanks a lot for your responses, I wasn't actually asking for someone to tell me how to reproduce I$$anonymous$$VU, Second Life etc in Unity :) I was simply asking how can multiple players access/load DLC that any other online player may be 'wearing' at any point in time ingame. I tried to illustrate this with my example above, but never the less from $$anonymous$$arkFinn's response I believe the answer is something along the lines of "store all DLC on a server (not locally) so any player from anywhere can access the content at any time ingame".
In fact I was actually thinking of starting with something a lot more simpler: initially using only textures as the DLC. These would be used to customize the clothing, skin, hair etc. The reason is because of the potential optimization problems already mentioned above. For textures, both the texture size(dimensions/resolution) and the file size can be limited on upload with any good C$$anonymous$$S, which makes it a lot easier to control user uploads. Censorship is another issue, but not one I am concerned with at the moment.
I think it's always a trade off here between asking a general question and getting less specific answers back, to asking a question so specific that no one has ever done it before :D I'm glad you guys took the time to attempt an answer even if it wasn't obvious exactly what I was asking, since it ended up answering my question anyway. Thanks heaps
Sure, thanks a lot for contributing, every opinion adds value imo. This question is probably better suited for the forum, but I have never had any replies on the Unity forum yet.
Co$$anonymous$$g from a web design background I have to say that these days it is quite straight forward to create the website side of this. For example there are many open source C$$anonymous$$S solutions that enable you to create clones of user contribution sites like Flicker, Youtube and with a little more effort even Facebook. And you do not have to be a php guru to do this. Of course adding communication with a game engine (such as Unity) on top of this does still add some complexity.
In relation to your comment, yes storing these assets on a server seems to be the way to go, however the other side of the coin (and what I see as the real challenge) is how players will be accessing/loading this data. If every player is accessing the server at the same time I think this would be either very slow or potentially crash the server. I am having a more open discussion about using caching to tackle this problem here: http://forum.unity3d.com/threads/141101-Amazingly-Easy-Free-Save-Game-$$anonymous$$anager-Unity-Serializer-now-on-Version-0.7?p=1047410&viewfull=1#post1047410
Feel free to add to the discussion there as well :)
Your answer
Follow this Question
Related Questions
multi game network 0 Answers
Network view not attached 0 Answers
Make priority for players 1 Answer
Mix unity Network Manager with own network script 1 Answer
Multiplayer| Attaching camera to player (if i am the owner 1 Answer