Hi, I’m creating an open world multiplayer game in Unreal Engine 4 with a custom server written in C++ (using asio/flatbuffers libs). I have configured packet transfer between the game and the server. Chat messages and player movement are working now, but I ran into the problem of simulating player actions on the server.
My next steps (for now):
simulate player collisions with terrain and static meshes on the server
simulate projectile physics (like fireballs, bow arrows, etc)
For the first step, I need to have on the server the code for handling the collision of the player with the terrain, the data for this terrain, and the bounding box of the player. But the problem is that this code is already in the engine, and I would not like to manually transfer this code, terrain data and bounding box of player that I created in Unreal Editor. With the second step, this is the physics code and the same bounding box, but for the projectile.
My ideas for a solution: somehow take all the necessary engine code and use it on the server (I have a console application called BlankProgram that has engine libraries connected to it). But even if it works, there is still a problem with transferring the data of the actors that I create in the editor (player bounding boxes, projectile speed, direction, etc.). In this case, perhaps a self-written plugin can help me, which uploads the necessary data to the server files.
Is my approach and ideas correct or is there a better way? There is a dedicated server from the Unreal Engine, but somehow there is little information about it and people say that it is not suitable for MMORPG. I also know that some companies write their own servers (not from the Unreal) for games under the Unreal Engine. I would like advice on where I should dig to simplify the work. I want to write compatible code between the game and the server, without doing unnecessary code copying and other things.
If you want to make your life easier, you should use the same project to build the client and the server. The server build will become a headless server, meaning that it won’t render any visual elements and it will be completely independent of the players.
It’s not the most resource-efficient way of doing things; making a custom C++ server will use fewer resources on the hardware, but it’s the most time-efficient way of building a client-server game.
There are several MMOs that run on unreal using headless servers. Therefore, unless you know your game will have the same level of players WoW did during its peak, I would recommend that you make your life simpler by using a headless server directly from Unreal Engine.
Those, if I have a maximum of 100± players, then I use a dedicated server from the engine, if I want a large online of 1000 and much more, then I have to suffer and write my own server in C++ right?
Short answer: No.
Now, let me explain why.
World of Warcraft at its peak, around 2017, had about 46 million MAU. Even now, the MAU in WoW don’t go below the 500K mark, and that’s considering its popularity has been declining over the years. It’s still a very big MMO.
Another thing to put it in perspective is that it took Blizzard, a AAA studio, roughly 13 years to make WoW reach 46 million MAUs. Your game can become as successful as that, but it certainly won’t be overnight.
In terms of server capacity, there’s two ways of scaling:
- You get more powerful servers that can handle more concurrent players
- You split your userbase on different servers to spread the load across various servers. There are two ways of doing this:
- Sharding: Each server will be its own entity with its own userbase that will be always connected.
- Area-splitting: The userbase is in a single world, but you split it into different areas so every player is physically present in only one area at a time.
As you can see, there are different ways of solving this problem using an unreal server.
This is why my main point is this: The amount of time it’ll take you to develop a custom server is counterproductive to your immediate needs. It is best for both you and your players to have a functioning server now and let the game grow than to overcomplicate your development over a feature you might only start to worry about ten or eleven years down the line when your player base is in the dozens of millions.
Thanks for your help. I liked the option with the area-splitting. If I understand correctly, the logic is the same as that of World Composition in Unreal Engine, but from the server side.
I will study how to do it using an unreal server
Boost fires bitmaps and so you can move your character on the map without crossing the border of the bitmap, simulates collisions