Unity 2018 - Capable of an MMOFPS 900-1200 players possible?

Good evening / morning.

The question is very simple yet BEYOND complex… Does Unity, in it’s current state, posses the capability to support an MMOFPS that ranges from 900-1200 players?

I know the Engine with proper techniques graphically can easily handle 1200 characters moving. The netcode, the options involved in optimizing said netcode; Can the engine handle it? Be as technical as possible please.

Cryengine and 40000 migraines will ensue if this engine can’t handle it.

certainly can handle lots of objects and action recently

*video of it

about networking, maybe this helps,

1 Like

Yes, but you will have to build your own networking solution or license one intended for this purpose. I believe the LLAPI is capable of handling the sort of load you’re describing here, but the HLAPI is only intended for very small populations and doesn’t scale well at all (HLAPI memory leaks like crazy beyond 4 to 8 players and is technically incomplete).

For an existing solution I don’t know. I have spent a small amount of time researching the ways to develop an MMO and the only solution I’m aware of that would be able to handle a population like you’re describing in the same vicinity would be SpatialOS by Improbable. They’ve advertised it here before and it’s being used in some existing games like Worlds Adrift.

https://improbable.io/

3 Likes

The question implies that you expect this kind of thing out of the box, which no engine will provide to you. The more appropriate question is something like “Does Unity allow me to integrate my own networking solution to build an MMO?” - and the answer is yes.

4 Likes

“Are you capable of writing that tight of net code?” is the real question.

You’ll have to ask yourself the same question for Cryengine as well, since out of the box support for 900+ connected users to a single server for a twitchy FPS style MMO isn’t part of the base Cryengine either.

Normally you’d develop a solution where you’d drop the number of connected users to a single server to a much more manageable number, but still have a large game world across a cluster of servers.

5 Likes

900-1200 players on a single map in real-time, like in Planetside 2? That would be hard in raw C++.

I’ve done a LOT of research on it and it seems Unity is the most flexible! Cryengine is a close second but doesn’t have the amount of support that Unity does. This is going to be one hella expensive undertaking :slight_smile:

Thank all of you for the feedback!!

Are you even remotely open to the idea of doing something smaller first? Because that’s what I’d suggest.

3 Likes

Depends a lot on the draw distance. 1000 players seeing eachother is hell. You’re sending 1000 * 1000 → 1M updates. If those 1000 players on average see 15 players, you’re only sending 1000 * 15 → 15K updates. If some are idle, the number lowers more. Though of course you still have the worst case scenario (everybody bunches up in a corner, rip your server).

You need a dynamic tick rate. If 200 players are in close proximity then you use a lower tick rate than for those in another place on the map thats only 15 players in close proximity. This only affects what the server sends though, the clients still need to send at maximum tick rate to the server.

Not sure how you came up with the numbers but I guess you are talking partly about peer to peer like architecture? you wouldn’t do things that way in a large scale MMO. Each player sends their info to the server and server packs it out in to a single tick update per player depending on distance, visibility, importance. Update count should not really go up with the player count but rather the size unless you need to split updates.

2 Likes

For this scale literally everything needs to be custom. You will more or less only be using unity for lighting and base rendering.

Here’s Epic talking about some of the techniques they used for 100 players in fortnite.

You’re talking about 10x larger scale. To achieve good quality in something like this, you’re going to need some extreme practices and will be using almost nothing stock from unity.

4 Likes

Yeah that’s true. I mostly meant ‘data size’ not so much ‘packet count’ though, I could’ve been clearer.

Also true, I didn’t really think about that. Though that’ll only get you so far in a FPS before it degrades the gameplay unacceptably.

So, I’ve been doing a LOT of testing. Unity still holds the best performance.

I believe we should share information, so I’ll share my techniques so far (though not quite as successful.)…

I am using ‘zoned’ information that grabs information from three main databases. First Database grabs last and first character placement for introduction back into / out of the game world. It also handles all ‘profile’ saved information such as statistics / “X Variable.” … This is a hybrid verification of MD5 and encryption to prevent manipulation.

The second database holds The REST of the players “current” position, which is being updated via proximity of the “current” player… It gets extremely complicated after this. (and please understand this is my first attempt at this)

At this point, i call it “zoned”… And it’s based through world based ‘triggers’ that send specific information. If “x” does this and = SIGNIFICANCE then it takes priority via message. (blanding it down as much as possible…) These “zoned” areas have Two main functions " What has happened " and " what is happening"…with ONLY the most pertinence data being transmitted.

The third is Player on Player Zoning. This uses P2P / MSB technologies… Again to assist against people attempting to manipulate the software. At random intervals the player with the “greatest” connection is then a conduit of a sort, that houses the game session…While still using the MSB as the primary verification server. Getting the transition between the two has been problematic but My DRUNK ass may have figured it out about three hours ago. : ) SIMULATED packets!

(I know that questions will be asked and I will be on as much as I can to answer them… I also know it sounds Far-Fetched as fuck…) It isn’t… It just has to be done right. Manipulating connections to appear as an “MMO” is FAR easier then actually trying to put 900 people in the same place. And if the illusion is seamless… ?

I plan to share all of this in great detail… I know I’m not the best at articulating (at all…) what I’m attempting to do… Please forgive me, I make money, I drink and I come up with very wild ideas… Then I do them… And knowing how I am, I even created (started writing two years ago) a contingency…

On that note… Kaibear’s systems will be free to everyone tomorrow as well if all this legal BS is handled.

Personally I would like to stop seeing the Unreal Engine as being the "go to " engine when it’s far less adaptive and freedom giving. And don’t get me wrong, I made a TON of mods with Rainbow Six Ravenshield, Unreal Tournament 2… I LOVE the engine… But it’s focused more on “Hey I’m pretty”… Not “Hey I’m Useful”… Or adaptive…

1 Like

And look, I know who’s reading this. The fact is, I’m going to do this… With or without any outside help. I would LOVE to do it with an existing technology. I HATE some of the shit in Unity and how it operates, but 99.9% of that is my own ignorance to the engine. And the other .1% is the engine making my hair go grey…

1 Like

This Needs a LOVE button, I just see read this comment.

And if MGM would ever respond back… Just saying…

Must be the first time I’ve ever heard “Cryengine” and “flexible” in the same sentence.

1 Like

If you’re going to do this, the first thing I’d do is get started on your custom networking API. This project succeeds or fails on your networking implementation, and none of the available high level networking API’s are suitable for this so you’re rolling your own. Don’t waste time on anything else until you’ve got the networking part solved.

2 Likes

I agree completely and I have actually personally began teaching myself several aspects of this. I’m about three weeks in and Oh My it can get tricky (tricking) the player into seeing what they think they’re seeing… I will obviously hire someone who is well more adept, but I need to understand the fundamentals thoroughly before I can hire anyone.

I know TCP is the method of choice because UDP basically spams the packet until it’s sent, and it’s actually a much faster protocol for other reasons… But using TCP would make anti-cheat SO much easier on a server side / hybrid. So right Now, I’m working on a ‘zoning’ feature; And it’s probably rudimentary… But I think I might have found a way to make the players themselves assist me in the dilemma and still use TCP. It’s been three weeks. Give me three more. :slight_smile:

Also, whatever I figure out will also be 120% free on the asset store. I’ve already spoken to several people who are “top” people on the asset store that’s sent me PM’s and they’re going to distribute Kaibear’s stuff out as free with me in the credits or whatever (I could honestly care less…) to everyone. I wanna see what smarter people can do with this shit!

Unity has given us a Great and at times Ripping-Hair-Out engine that really does perform better than UE4, Cryengine and even Torque 3D in terms of flexibility and the graphics are literally one step away from being Better than those other engines.

So with that said, and keep in mind, I do most of this completely fucked up… Like, High and Drunk… This is what I’ve done so far, if anyone cares.

A service based system that allows for players to pick up “zones”… But, they are not the SMB (Server Master Browser). SO … You get say, 200 people in a “zone”… You then, with real time calls (and it’s really NOT that expensive nowadays)… Tell those people to “host” the players connectively through a service. This actually pops their system with constant calls; And those players are the powerhouse PC players. Ya know, your garden variety I7/32 gigs of ram/SSD players. Using this method, you can get a ‘server farm’ from your playerbase. So far, in testing with a bs little C## program I used to emulate this, it’s fucking Superb… Then there’s the mess of figuring out the zones which I’m working on right now. It’s not complicated, but it’s tedious.

I am sharing this because I believe the knowledge should be free and I think outside the box quite a bit. But I do ask that no one uses this ‘idea’ and try to sell it…