How do 3d-Widgets (Widget-Components) work on clients in multiplayer?

Reproduce-steps:
Make a simple Custom Widget which is a Button.
Assign the Widget to the Widget Class of a Widget Component in an Actor, so that the button is in 3d-space.

Why does it not work?
It only works on the server, but not on the client. The button accepts neither hover nor click- or press-events. 2d-widgets on screen work normally on server and client.

What I tried:
-I checked ‘replicates’ for the controller, the actor and all components, but it didn’t change anything, it works the same without that option.

-Instead of ‘beginplay’ I fired a custom event, with the ‘multicast’ or ‘Run on Owning Client’-option, but in this case it also does not change anything.

-I used a widget interaction component. It works on both server and client,
and it triggers the ‘On begin hover event’ in the widget. But instead of triggering it once, it triggers endlessly with the speed of the event tick. This happens on server and client.
When I delete the hover-event, then it accepts the click on the server but not on client again.

-I used the events of the widget component in the actor, instead of the widget-events (On clicked, On begin cursor over). It triggers both the hover and click events correctly, and I could use it, but I will maybe need 20-100 buttons and I can not make a single event then for every single button, it would’nt be ideal.




Have you gotten any headway on this? I’m running into the same issue. The server can see the on hover but the network client cannot.

No, I didn’t find a new solution, I used the widget-component-workaround I listed. It’s unnecessarily complicated, you need a lot of code only for one button, but I needed it to work, to test other functions then with it. Maybe I will replace it again, if there is a fix in the future.

I made a widget component in the actor, and made an “on hovered widget changed” event from the widget-component-options. Then I added alot of branches, to find out which 3d-Widget got Hovered, you can use tags for this. I test in the start if the cursor hovered the same widget or another widget or nothing to find out if the cursor begins, or leaves the ‘hover’. Leaving the widget, gives you a ‘nothing’-output, so you can start the unhover-event from there. You must cast then to the widget, and start the ‘custom hover’-event there, I saved all widgets as references when I created them.

The custom-event in the widget, that starts from the actor with the widget-component.

This is a different widget with 5 buttons in it. The onhovered-events trigger in the Event-tick-speed. I used this bug here. The custom on-hover events open and close the gate. And the gate sets the index to the hovered Button. So it sets in the event-tick-speed the index to the currently hovered Button-index. This way I have the hovered index of the buttons, because they are all in the same widget.