I’m not certain this is a bug, but it seems like an issue to me.
Component transforms are automatically replicated by the engine if the component itself is replicated, so any component movements made on the server will be reflected on clients. However, on receiving the new transform, the client does not call UpdateOverlaps, which means that Begin/EndOverlap events will not be triggered client side.
This would seem to render these events useless (or anyway unreliable) on the client, since they will fall out of sync with the server, at least until the component in question subsequently gets moved client side (such as through character movement).
Of course the events could be processed server side and the desired results replicated manually to the client, but this is no good when doing prediction or anything else that needs to be low latency.
Typically, as you mentioned, this would be done on the Server. Can you give me an example with some setup details for when you’d need this to be done client-side? An example test project would be helpful, too. Thanks!
Hi Ben.
Sorry, I didn’t get chance to get back to you on this.
The specific situation I had with this was in making a basic interaction system. I wanted to use overlap events client-side to maintain a list of actors that were within interaction range of the player. This list would then be used to provide visual feedback, such as object highlighting, all of which was required client-side only and should be lag-free.
Of course, there are other ways to do this, however it just seemed to me like a legitimate use case for client-side overlap events, and I would imagine there might be plenty more. If however it is the express intention that these events should not be used on the client, I would think that could be made more clear, at least in the documentation, if not enforced somehow, or reported as runtime warnings.
Okay, I misunderstood you. I can see a use for that, and it seems like it ought to work. I did a quick test and it seemed like the Client was detecting an overlap at both the old location and the new location of the component that was moved (using SetWorldTransform). I’m going to do another few tests and probably enter a bug report, if I don’t see that I’m doing something wrong, and get back to you. Thanks for your patience.
If you can show me your setup or show me a test project, that may prove useful as well. Thanks!
I’ve entered a bug report for this issue (UE-24334), as I was able to reproduce the problem when using SetWorldTransform on the component directly. This does not seem to occur when the Actor itself is translated, and in fact this updates the overlaps on the components with it. The only workaround I can think of for the moment is to Set Transform on the Actor itself after setting the Transform on the component, even if only slightly, to update the component’s collision on the Client. I will let you know if I see any update on the bug. Thanks for the report!
Yep, I was also directly setting component transforms on the server in my case. That’s interesting that it works fine on the actor level, and does suggest that it is in fact a bug.