UMG Widgets stop ticking and/or drawing for Clients in Multiplayer
I have been having issues with my UMG Widgets since moving to 4.10 which only seems to occur in Multiplayer.
If there is the slightest hiccup, packet loss or break in communication between server and client or if the client stalls for too long - all user widgets for the client stop ticking. For me, this has also caused them to stop displaying (which I don't understand, since I've never told them to do that). The widgets are still around, and are not GC'd, but they don't draw or tick. There have been no mentions in the 4.10 release notes of stricter ticking, but I have so far found several changes to networking code that aren't documented in those notes, and am worried that this is one of them.
It's relatively easy to trigger this, I have a widget the the HUD adds to the Clients window on BeginPlay(). That widget is always in play for the entire game and is never removed. Doing network heavy tasks like taking possession of a different pawn (in my case, hoping in or out of a vehicle), or even when the client first joins the match causes this behavior. The only common thing I can see here is that the Pawn changes when this happens, but why would that be an issue?
Child widgets still remain in the viewport, but unless the parent tells them too then they also aren't ticked.
The only way to get around this right now, is to Force-Tick the widgets by calling an Update function on them in DrawHUD. This is not ideal since it completely overrides the point of the slate optimizations that have been put in recently, and means that all widgets tick regardless of whether they're on screen or not or even visible or not. What's worse is that widgets that ARE on-screen are then ticked twice, both by NativeTick() and the call from the HUD.
My game isn't doing anything special nor at any point does it tell that widget to hide itself, so I can only guess this is due to an engine change, but it seems like quite a breaking change. I don't have a project to hand that can easily demonstrate this without giving all my source code away, but I'm sure it's easy to create one that will do the same thing.
asked Nov 16 '15 at 02:09 PM in Bug Reports
I understand that you are working on a reproducible test case, however we have not heard back from you in a few days, so we are marking this post as Resolved for tracking purposes. If you are still experiencing the issue you reported, please respond to this message with the additional information when you are finished and we will offer further assistance.
answered Nov 23 '15 at 04:24 PM
Rudy Q ♦♦ STAFF
Follow this question
Once you sign in you will be able to subscribe for any updates here