I’ve been reading about Smartfox, UnitySuite, Photon, and Of-course… the standard unity networking, however it doesn’t really explain to me which would be better for a large game.
Lets say I want to have 2048 users running around on the same scene, granted this scene is massive, what would be the best route to go? I know I can write my own back-end, but this would take forever and I’d have to learn the Networking API for C#.
So, any suggestions?
I’m well aware that hard-ware has to do with the amount of users available, as-well. That’s not of my concern either as of right now.
I use the standard Unity networking quite a bit (I believe it’s simply a wrapper around the Raknet API, could be wrong), but I have never attempted to use it for more than a dozen players.
Whenever I see the MMO word thrown around on Unity forums, many people seem to claim that the standard networking API in Unity won’t cut it. Why exactly this is, I’m not entirely sure. The other thing I hear most of the time is Smartfox vs Photon for this type of scenario.
Also, I would personally not recommend attempting to write your own back-end. There are many pitfalls such as firewalls and NAT punchthrough that can be an absolute nightmare to deal with without a professional API ( many, so many attempts… ). I know for a fact that the Unity networking will deal with this and I’m sure Smartfox and Photon do as well, although I only have limited experience with Smartfox.
I have a question for you since I rarely use Unity3D networking. What can prevent me from writing a custom client that calls Network.Instantiate arbitrarily whenever I want to spawn objects on everyone’s client?
I’ve written my own backend for applications before, I’m not really worried about that. It would just be time-consuming and there wouldn’t really be a way to have an “Authoritive” setup.
Are you talking about from a security standpoint? As in, a client using your application hacking it and injecting new messages?
This is not exactly my specialty area (what I do at work using Unity networking is always used on a custom, internal system). I have seen, however, that Unity can take security measures and encrypt your networking data. I’m guessing this would be the fix as the hacker would not be able to inject data into the encrypted connection.
Also, it’s generally standard protocol in any multiplayer video game that has the potential to be reverse engineered and hacked to make sure your variables are “server-side”. For example, in my network game I’m working on now, I don’t allow the client to spawn anything, it’s the job of the server to determine when objects should be instantiated and destroyed. Whenever the player wants anything, they must first ask the server, this is called an “authoritative server”. This rules out the client’s ability to begin spawning their own guns, etc.
I’ve written many myself as well, it never seems to be building the application that is the problem, but having to deal with the seemingly infinite number of pitfalls such as firewalls, routers, etc. in the way. I’m also curious as to what you mean when you say authoritive setup. You can always encrypt your data using a public key access schema or simple RSA setup. Although, I don’t know how serious you are about your data security.
I say this because the only thing, for example, that Unity networking does to my knowledge to secure your data is give you the ability to encrypt the information, keeping hackers at bay is the job of the programmer and making sure sensitive data is either testable (speed hack checking, etc) or server-side.
I decided to go with uLink [www.muchdifferent.com] and eventually the Unity Park Suite. I was really impressed with the design of their Unity offering. They have a tremendous amount of detailed documentation, and they have successfully tested their tech with a 999 player FPS [and also consulted with the developers of EVE Online]
I can’t recommend their offerings highly enough. My only problem is that I am new to unity, so basic Unity Networking of Mecanim characters is slightly tough for me to get a grip on [using Sample Assets (Beta) Third Person Controller as my example.
well, if one wants an authoritative approach right off the box then uLink is your best bet.
now the unity networking is just fine, but it can not be used for mmos, and there is a very strong reason for that.
a unity networking server can support as much players as a single core can handle, meaning the unity server is single threaded and that is why i can only support so much ccu’s an average may be 50 ccu’s per server, now the unity server do not escalate that is why is not recommended for mmos.
in the other hand uLink works the same way as unity networking, but they worked around the issue,
altho the uLink server instance is still single threaded due that it runs inside a unity instance, but they made possible so each unity instance with uLink could talk to other ulnk servers, so players can jump from one uLink server to another which is one way to escalate, you can have a zoned mmo where each server represents a zone and players can jump from one server to another while ingame.
you can have each zone server in a separate hardware node, even in a separate datacenter, players wont notice that, they just jump from one zone to another one, not seamlessly tho, but sort of a portal. seamless can be achived with uPikko, but that is not to the reach of indies,
that is the only thing i hate about muchdifferent, they are complete a-holes by not making uPikko available to indies.
but besides that, you can achive a large scale zoned mmo with uLink very easy.
you can also use uZone to instantiate zone server automatically when one zone is maxed up with players.
anyways, i recommend uLink for a zone mmo and an authoritative server right out of the box.
now the other techs ie: smartfox or photons etc… they still do the job, but you will need to do all the authoritative backend, dbs, zones etc…
too much work. but they can also work .