Using a custom Trace Channel with default response set to Overlap. So why is LineTraceBySingleChannel() hitting a cube's with response set to Block, but not a cube with response set to Overlap?

I’m using LineTraceBySingleChannel() with a custom channel.

FHitResult shellHit;
bool didHit = GetWorld()->LineTraceSingleByChannel(shellHit, start, end, ECC_GameTraceChannel1, TraceParams);

The custom channel is set up to have the ECR_Overlap response.

+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Overlap,bTraceType=True,bStaticObject=False,Name="Shell")

If I make a default cube and set its collision response to this channel to Block, it works and the line trace gets a hit with all the info as expected. But if I channel the cube’s collision response to Overlap, it doesn’t get a hit. Ie., this fails to hit:

Why does LineTraceBySingleChannel() not get a hit if the cube’s response is set to ECR_Overlap?

I believe the answer is simply that line traces care about blocking hits only.

… return the first blocking hit

So if an object is set to overlap on the line trace’s channel, the line trace won’t hit that object. That’s all it is.

I was mistaken in thinking that the line trace function had one type of collision response (whichever its channel had been defined with), and then that the objects in the world had their own responses to that same channel, and that you’d get a hit depending on how the 2 compared… …Which is just confused nonsense.

All I was really doing was setting a new channel’s default response, and then changing a cube to not use that default. It just so happened that the thing I was changing it to – Block – is what LineTraceSingleByChannel() needed.

Line traces return the first blocking response, they ignore overlaps.