Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.

Huge Streaming Game World

Discussion in 'Multiplayer' started by BurningHorror, Aug 14, 2008.

  1. BurningHorror

    BurningHorror

    Joined:
    Aug 14, 2008
    Posts:
    11
    Hi there
    I have a question to ask all you clever people
    I know it will be a HUGE project, and I am well aware of the time, effort and people that it will involve, but I am trying to create a huge 3d map, consisting of three whole planets which contain mainly user-created content ie. architecture, vehicles and other objects (there will hopefuly be some sort of API developed for users) I also would like users to be able to fly between planets in spacecraft.

    Although it does seem unfeasable, and just like a little kids dream, I need to know if it CAN be done using unity. Is it possible for users to edit/add content to maps? Is it possible to have a huge amount of users playing simultaniously? Will middleware need to be involved?

    Oh and it will be played through the browser plugin :D
    Super streamlined streaming will obviously be needed, and also what level of graphical detail can you go to with web streaming without excessively compromising playability?

    Player data stored in MySQL database???

    If anyone could answer some of my questions I would be extremely grateful and you would surely bring things together in all of the team's minds. Thank you :wink:
     
  2. Brian-Kehrer

    Brian-Kehrer

    Joined:
    Nov 7, 2006
    Posts:
    411
    This is all possible.

    You'll either need a lot of engineers, or a lot of time, or both.

    Which == a lot of money.

    If you have those things, you can do it, and in the webplayer, I might add.
     
  3. TJB

    TJB

    Joined:
    Mar 20, 2007
    Posts:
    146
    It is definitely possible. Many of the new features in Unity 2.1 are for allowing exactly this to be done.


    This might help you get an idea, it was announced that this game is doing just that with unity, take a look at the video and gallery:
    www.fusionfall.com


    You'll probably want to write your client in Unity and your server in something else, like C++;

    MySQL is definitely one choice to save some of your data.

    You could design your games so players could add building/whatever to maps, yes.


    If you would like some more specific info on how to, or some more general info feel free to post back and let us know.
     
  4. BurningHorror

    BurningHorror

    Joined:
    Aug 14, 2008
    Posts:
    11
    Thanks for your replies! I was worried no one would answer me as ive seen a lot of un-answered posts so thank you both again :D

    @Brian - That is just what I wanted to hear!
    Now i know it is possible I can worry about how to do it lol

    @Thanks for the fusionfall link, I saw the pic on the unity homepage but I didnt think much of it. It seems like they have a similarly huge game map at their disposal and a ton of potential players, Im starting to wonder how they do it.

    Do you have any basic ideas on how I would create a framework that allowed users to add content to the maps? I dont know if users would submit models that would be saved as external files on the server, and loaded into the game world at runtime, or if they would directly add modify the maps created by the game dev team. I want to impliment a similar system to Second Life, where users can own their own land and build upon it.

    Also I have read elsewhere in the forum that creating a multiplayer game with more than 200 users will require middleware such as SmartFoxServer? Is this so, or is it just for ease of use on the development side? If we are unable to create this kind of multiplayer interactivity within the time scale we do have another option we can fall back to, but creating smooth MMO style playability is really what we would like to do.

    Also, has anyone had good or bad experiences playing Second Life? I myself stopped playing a few days after I signed up purely because of the amount of lag I was suffering from. This was probably down to my broadband connection (just below 2mbps is the maximum that can be sustained in my area as i live more towards the countryside) but it was so bad in places it wasn't playable at all. I think it's this that has made me so determined to create a smooth experience for users.

    I hope im not boring you all with my rambling. Although I have created a few games in the past im more of a web designer so I tend to think of these things from a different point of view, so your input is very much appreciated :wink:
     
  5. zumwalt

    zumwalt

    Joined:
    Apr 18, 2007
    Posts:
    2,279
    There are a few scenarios you can take this, as everyone has stated it is possible, I would share code on doing this but unfortunately I am not allowed to. A few hints though, it is easiest to have static models. Unlike second life where people can make there own models and import them into the game system, although it is cool, research has proven to me that only about 1/100'th of the game population will have the desire to do this and maybe 1/1000'th of the game population will have the skill, then you have to code for those bizzar things like model size, etc.

    As has been stated on other threads all through the forums, start SMALL. First make your engine show a building someone else on the network has placed. Make sure that when they disconnect from your game and load back in, that the building is still there and objects are usable.

    Also, HIGHLY important IMO, the more visible resources the more memory the game will take up and use along with CPU and GPU power. I can't stress this enough, you need to use the tools that Unity has built in to keep track of poly count available in any given environment and scale your LOS based on that.

    Adding content dynamically, well, you will need to build your own little tool that sits 'outside' your game, that they can 'preview' the model in the game before they import it.

    For instance, you have a Unity player setup that does compression amongst other tid bits to the model, shows how it looks in different environments that exist in the game, etc. Then have that tool PREP the model for game insertion. Have a user folder for custom objects and use your tool to move the final prepared model into the custom objects folder.

    Now, when they load the game, go into the game, they can use the live game tools to use the model however you let them.

    This same tool can be used by your game masters to build entire levels, or entire scenarios for the players, it works rather well. Total hands off once the core engine is in place.

    Now, as far as database is concerned, I am using SQL and Oracle both for very different purposes for my games but they are all running on stand alone windows servers, the content itself is stored on a massive file server.

    One more thing, back to the streaming content, you want to avoid using bandwidth as much as possible. So have the game check for custom content, then trickle it up to the server, let the server do all the push out to the other players. The server will need a seperate Unity object to double check the model for any 'errors' per say that will bomb the model in the scene or hault the game. This is all back end business logic really, but trust me, without this final check before a push, if something is messed up, oui..
     
  6. TJB

    TJB

    Joined:
    Mar 20, 2007
    Posts:
    146
    To store the info you could have an array that has an entry for each map. And that entry is an array that contains an entry for each object in the scene. That entry is a class with all the required info, such as position and object "name".

    To place the content the player would select it from a list. And move it to the proper position and lock it in. At this point the player would send an rpc to the server with all the info about the objects placement and the server would add it's to its in game array, as well as write it out to an external file, MySQL Database or otherwise.

    To allow people to add there own meshes you'll have to get a little more creative, see this link:
    http://www.unifycommunity.com/wiki/index.php?title=MeshSerializer


    The server end of the game should be written outside of Unity if you want a lot of players. You could write it directly in C++.


    I'd suggest getting Unity and making a small game to get aquatinted with it before you jump into a bigger project.