The collision overlap system is really weird

In my opinion the way the overlap events work is not logical and is poorly implemented.

[Current implementation]
The way it’s works now is as follows, for an overlap to occur between the components:
both components have to have their collision response to Overlap or Block each other’s Object Type respectively,
both components have to have Generate Overlap Events enabled.
Also just querying all the overlapping objects of a given component also counts as an overlap event for some reason.

[The issue]
The thing that bugs me in the implementation is that the collision response ‘Overlap’ and Generate Overlap Events are essentially the same thing but for some reason both have to be used to get the overlapping working. Like there is no reason to set any of your component’s collision responses to ‘Overlap’ if you are not going to enable Generate Overlap Events, and vice versa. For me it feels the same as if to be able to move an actor at runtime, you first would need to set the mobility to ‘Movable’ (as you need to do now), but on top of that you would also need to tick a checkbox that says something like “Allow moving at runtime”.

[Justifying the matter]
Like isn’t it self-evident that if two objects are set by their collision responses to Overlap each other, you really want to receive the overlap info? Couldn’t Unreal just deduce, based of the collision responses, when to generate the overlap events? The description of the Generate Overlap Events flag says that it exists so that an object can opt out of all overlap events by disabling it. Well guess what, an object can do exactly that just by changing the collision responses to Ignore instead of Overlap.

[The issue in practice]
The reason I’m ranting about this thing is not only the fact that it doesn’t make sense at all, but also that this complicates stuff in practice as well. For example when making a trigger box that executes some code when anything overlaps with it, you have to go enable that fricking checkbox for every single possible thing that could in any circumstance overlap with the trigger box.

[The solution]
So finally, my solution for this inconvenience is just to get rid of the Generate Overlap Events flag all together or at least to change its functionality. I think it could work same way as the Simulation Generates Hit Events flag which only has to be enabled for the object receiving the events and not for both of the objects in the hit. I think the SGHE exists for optimization reasons for which the GOE flag could still be used for.

Ah yes I actually thought of this and wanted to see if anyone else thinks this is a issue too. By some chance you have just recently posted about it, fun coincidence.

But I think there is a logical reason of why it is done the way it is. Would of course be nice if this would get changed but I don’t think it will.

The team at Unreal have clearly spent more time thinking about this than you have. The Generate Overlap flag is used for any collision profile, for example, your player character is set to block all, but you want him to generate collision events so you flip the flag on. The crate is also block all, but you don’t want it to generate collision response, so you turn it off.

Reason why its off by default is for performance. And you’re example is very extreme, I don’t think I’ve ever needed one trigger to detect literally every game object, which would mean having every object generating overlap events. To me, that sounds more of a design issue at that point.

Keep in mind, your solution doesn’t actually change the reality of the performance issues that would come with everything being generate overlap events, you would just remove the ability for a designer to create a static mesh that won’t trigger triggers.

TLDR Unreal doesn’t make the assumption because it can’t make the assumption. There are many profiles, plus custom profiles where you can overlap and block at random, so there’s no way for it to know you want it to generate overlap events. So it makes a lot of sense, I don’t understand why you thought this warranted a very long and formal post…