If folks have questions or comments, can they please put them in thread and not PM them to me! Thanks
Although for most people moving to 4.10 was relatively simple in comparison to other releases, for me personally itās been a bit of a nightmare. Iām currently working on two Multiplayer titles that although ambitious arenāt doing anything outside realms of a normal competitive multiplayer game. However, a lot of time I find myself fighting issues purely because engine code hasnāt been fully tested in a Multiplayer environment, and having to come up with some pretty significant workarounds. One such example that has since been fixed was that you couldnāt change pawn you possessed in Multiplayer - something that is pretty commonplace in a lot of MP games.
So really Iām just creating this thread to try and draw attention to some of biggest issues Iāve been experiencing with Netcode both in 4.10 and below, in hope that Multiplayers getās attention it deserves. Iāve linked a couple of most major ones below but rather than just repeat myself, I really want to raise issue for need for a netcode hardening pass of some kind. As an example, hereās a couple of issues Iām hitting since 4.10:
Widgets Disappearing For Clients in Multiplayer
This is probably most frustrating of bunch and definitely surfaced in 4.10. Whenever a client changes Pawn they possess in a Multiplayer game, any sort of persistent User Widget stops ticking and therefore drawing too. I am yet to figure out why this is, but brought it to Nicks attention on Slack who indicated it may be related to Widgets being ātorn down and rebuiltā when a player changes a pawn. I imagine thereās a reason for this, but whatever it is, it doesnāt work at all in Multiplayer. My game has vehicles (pawns) that players can hop in and out of (via possession). All you need to do is add a widget to screen via a HUD class and test it in MP, and theyāll stop working minute I try to posses another object.
workaround for this is god-awful. You have to force-tick widget by calling itās Tick function from another class, which completely voids point of widgets not ticking when theyāre not supposed to be rendered. Once widget starts drawing again, itās also ticking itself natively - so most of time itās double-ticking. Needless to say, this is less than desirable.
Iām trying to build a repro project for it, but itās going to take a bit of setup because itās Multiplayer. Nevertheless, answerhub post here: UMG Widgets stop ticking and/or drawing for Clients in Multiplayer - UI - Epic Developer Community Forums
Uint8 doesnāt trigger OnRep_ functions if value is Zero
This possibly occurs to multiple engine types and maybe even pre 4.10 - but Iāve been using uint8ās for serialization / quantization of values for replication but found that if value is zero, they wonāt trigger Replicated Functions for clients. This doesnāt just affect me though, since a lot of engine types do this natively (such as FRotators for example in FRepMovement) and therefore there will be some bugs in engine code. Again, to most people they wonāt be noticeable and there are workarounds, but this had me stumped literally for days and I feel like itās an oversight in Engine netcode.
Answerhub Post here: Uint8 Doesn't Replicate / Trigger OnRep function if Zero - Multiplayer & Networking - Epic Developer Community Forums
ā
Itās also worth mentioning this; There were a fair few changes to Replication in 4.10 and yet not a single one of them was documented. For someone working on two multiplayer-focused titles this has proven to been an absolute nightmare. New options for FRepMovement for example werenāt documented in release notes despite being a pretty significant (and useful!) change. only way to get around this was to compare relevant files on GitHub from version to version, which isnāt foolproof - or hope you run into them at some point anyway.
I realize most people arenāt doing Multiplayer and for majority of projects these kinds of bugs wonāt surface because I canāt imagine most people donāt have to be so conscious of bandwidth as I do - but itās already taken a significant number of releases to fix some age-old netcode bugs (such as pawn possession for example), and it would be a shame if netcode didnāt receive same treatment as other areas of engine. I personally would like to see some updates that really focuses on Multiplayer in upcoming months. AFAIK, thereās nothing planned on trello. Most importantly - Iād appreciate it if changes that may affect multiplayer are tested in that environment as well as non-multiplayer ones. MP is after all a first-class feature of engine.
Many improvements to engine could be made, a huge stack of changes and optimizations that Pete has made for Unreal Tournament being brought into engine would be fantastic for example. ShooterGame and VehicleGame are fantastic resources that I can imagine took a lot of time and effort to put together. However, both are VERY old now (must be 2-3 years or more?) and neither scales very well past more than a handful of players. So on top of engine improvements, a newer up-to-date MP example would also be a welcome gesture
@Community - feel free to post any weirdness you are experiencing in MP, and of course share thoughts on a MP hardening pass on engine.
List of Features / Fixes / Improvements requested thus far.
- Fixes for above issues.
- Ability to Override replication of Private Properties in AActor (E.g., 'Owner, AttachmentReplication, RemoteRole etc.)
- Fix client disconnection/validation failure when strings are > 1024 chars.
- āGet Pingā in BP always returns 9999](Multiplayer bugs becoming more prevalent - Harden & Improve Network / Multiplayer Support! - Feedback & Requests - Epic Developer Community Forums)
- Debug/Breakpoint for specific instances in PIE (Server, Client 1, Client 2 etc) in Visual Studio
- Support for Origin Rebasing in MP
- Documentation for Order-Of-Operations in Multiplayer