I am quite new to Unity and I am trying to figure out all the steps needed to build MMO games with Unity. I have not yet fully grasped all concepts of Unity as a game server, but reading the forum I can see there is a lot to do (which I am willing to, anyway ).
So I’de like to write a step-by-step FAQ to explain how to integrate Unity with custom-made servers (for example to manage buddy systems, games instanciation, etc). Pointers to existing forum messages or documents would be highly appreciated.
I guess the first step is choosing the technology for your network - I’ve seen RakNET, SmartFoxServer, NetDog are available options. :
you have more than 3 options to get your game multiplayer ready.
You can use Lidgren Network (c# udp network dll) and the Java server from Projekt Darkstar too.
Lidgren
With this dll you can write your own dedicated network server or a peer-to-peer solution. But if you would write a large scale multiplayer game with 2000+ users and different server nodes, you must put lot of work in it.
Projekt Darkstar
Currently only tcp (like SmartFox), it’s a open source project from Sun Micro Systems. They are planning the largest multiplayer server architecture with thousends of server nodes.
For SmartFoxServer I am currently working on writing+porting some of the Flash tutorials on the SFS documentation page to Unity.
Also keep an eye on the Unity Developer Magazine that will feature 3 articles yet (not counting the one in the last issue) including a complete game with lobby - source code included.
That will save you the work for SFS at least. Cannot comment on the other options, as I havent used those. So dont know how much Unity documentation exists there.
The question to which I find no answer at present is: 1. how do I make a game server with Unit, and 2. how do I interface with Unity servers (what API do I have to implement) ?
To the first question, my understanding so far is that game servers are deployed as game clients, running all the RPC scripts. But where do I write all the initialization code, communication establishing, etc. ? How do I build deploy my server ?
To the second question, I have no answer at present. Do I have to support .NET remoting protocol ? Do I need to re-implement all Unity events, but then how do I map them ?
LDiederich I have seen you post on the SFS port. Could you write down some basic tips on what is needed to make such a port ? The Darkstart option seems appealing to me, so I will perhaps study the option of writing a port.
I am the author of Darkstar Sharp, and my primary reason for developing the C# client SDK for ProjectDarkstar was for use with Unity3d. Please let me know if you have any questions about the library.
You can make the server in Unity if you want to too. I am making my MMORPG server in Unity. I plan to make a nice guide explaining how to do this. It seems all of the other options don’t utilize Unity’s networking support, and use plugins, or cost money. I’m on a tight budget, as most people here, so it seems that a Unity MMO/networking tutorial would do some good.
nice to see you here at the unity forum
A guide or code example, how to integrate the library into unity and set up a client/server connection would be nice.
So you are suffering the very same problem: the visual end is burning through 20-50% of a good P4 3.2ghz even with disabled cam and disabled static objects.
if Unity just would give any documentation on their own network packet ids and the protocol of RPC and Network Syncronization, then it would be easy to write a C++ server or alike …
or is there documentation on that which I missed?
Well, I know Unity is written in Rak Net, which seems to do alot of the hard stuff, might be good to check that out. Other than that, all I am concerned with the networking is the high level stuff. I am too poor to buy something else or learn something that low level and write it myself. Unity Networking has been going fine for me so far. Although, I’d probably check out RakNet if you are really concerned about processing speed. In my opinion, just do all the powerful stuff client-side.
There was a CapFPS script somewhere here on the forums or in the Wiki. It simply uses Thread.Sleep(time) to throttle FPS. For a server, this is a very wise thing to use
On the Wiki … let me see … nope, at least not by this name.
In my game server, I’m having two states: When no users are logged in, I’m going down to 10 FPS (no need to waste CPU cycles in idle-mode), with users logged in, I have a value that I can change remote from my Masterclient. Usually, I’m going around 200, but I guess 50 should be fully sufficient (still playing around with this to find the sweet spot).