In my game, I have a mesh component inside an actor blueprint that gets scaled over time by a Timeline and a Set Relative Scale 3D action (I also tried a Set World Scale 3D action and had the same issue, and it doesn’t seem to matter if a Timeline is used or not), and if the player character overlaps the blueprint actor, it triggers an overlap event.
Normally, this works fine, and the overlap event triggers no matter how the mesh component is scaled.
However, if I scale the mesh component down too far (anything smaller than a value of 0.1 or so seems to break it) then scale it back up again, the mesh itself scales back up correctly, but the overlap event stops working unless the player character touches the very center of the mesh. If the player character does not overlap the center point of the mesh, it passes right through without triggering an overlap event.
Create a new project using the Blueprint Top Down template.
Create an actor blueprint.
Add a static mesh component (Shape_Cube) to the blueprint, and set its collision preset to OverlapAll.
Set up the blueprint’s event graph like in the following screenshot.
Play the game, and the overlap text only appears when the character touches the very center of the cube.
Go back to the blueprint event graph, change the scale values in the first Scale 3D action to 0.1 or larger.
Play the game again, and now the overlap event works correctly and fires when the player overlaps the cube.
Making my game the way I want to is going to be tricky if this doesn’t get fixed and I can’t find a workaround. Ideally I’d like to be able to scale all the way down to 0 and back up and still have collision work.
Issue is probably in FBodyInstance::UpdateBodyScale, in here you’ll see scale is clamped to a minimum of 0.1 to avoid NaN issues in Physx. I know for a fact under 0.1 the physics body stops downscaling and stay a constant size, while the visual continues downscaling normally.
It’d be great to be able to configure this threshold, as it seems arbitrary and might not apply in most cases.
I had this problem and my solution was to prescale-down the affected StaticMesh in the import options, then apply an inverse up-scale in the blueprint, so I can achieve smaller objects before hitting this. But it’s a pretty frustrating fix.
This issue has not been fixed yet. I have updated the community interest for the bug (UE-3113) to give it better visibility however I can’t say when the fix will be included in the engine. Instead you may want to simply limit the amount that the mesh is scaled or try to reset the static mesh when it is scaled back up to reset its collision.
Same problem here in 4.8.3. Sphere mesh collision gets broken if mesh is scaled down (way bigger than the scaled mesh).
I even tried to create a super-tiny collision mesh to compensate that, but even than the collision volume is way bigger than the mesh (after scaling down the mesh). Setting the collision to ‘use complex collision as simple’ made also no effect.