Very thin unanchored parts often clip through the floor

Hi, I’m making an RPG game, and I’ve just finished making new Items and a drop/pick-up mechanic.

For context, the way the drop mechanic works is, it forms a new model of the item the player was holding, and it’s placed right in the same spot the item was held. It’s then parented to Workspace, after which it begins falling down to the floor.

The first of these items I made are keycards, they consist of a single MeshPart (CollisionFidelity is set to Box) and they are very thin (0.001 Studs). However, I’ve noticed that the models of the keycards fall through the floor, most commonly through carpets, desks, drawers and other thin surfaces, but even thick surfaces like a concrete floor sometimes causes the thin parts to phase through it.

Initially I tried to make the MeshPart thicker. I tried 0.01 studs thickness, and went all the way up to 0.1, but the only problem that solved was that the MeshPart no longer phased through very thick floors. Even at 0.1 Stud thickness, the MeshPart would still (occasionally) phase through thinner surfaces.

Next thing I tired was to make the thinner surfaces thicker, and after making the carpet 1 stud thicker, the problem was eliminated, however I couldn’t make the drawers and desks thicker as that would ruin their appearance, and I don’t think BaseParts are intended to phase through any CanCollide true objects, no matter how thin they are.

Last thing I tried to do was use a normal Part, thinking something was wrong with my Mesh, but it still had the same exact behavior as the MeshPart did.

All the surfaces the MeshParts fell through were either Parts or MeshParts with the highest CollisionFidelity, and obviously with CanCollide set to true.

I would like to mark this post as an Engine Bug, but it is inaccessible to me, so I chose the next closest thing.

Is there any way to fix this? If it is indeed an engine bug, is there any way I can contact Roblox about it?

Here’s an unlisted YouTube link of the weird physics behavior in action:
https://youtu.be/C9FiJ1JnChs?si=h8vzzpBAYfhXhDh7

2 Likes

Yes small parts do end up falling through floors, I’ve only noticed it on Smooth Terrain though but to fix this is really simple just

  • make invisible part for the collisions
  • weld the entire model to the invisible part
  • turn off collisions for everything except the collision part

For things like keycards, they may float a little but at least its not voiding itself

1 Like

Given some games: why drop cards? Granted if you drop cards a player can simply pick it up and have stolen credentials now.

However: it would appear that your Handle is likely the issue with collision. Not sure what your goal is for the behaviour of the cards when dropped.

If a person dies he should also drop items.

The keycards are just the first of the items the game will have, and there will be many other thin items I imagine.

My goal is for it to fall down to the floor without clipping through it, I don’t think the engine is meant to have thin objects pass through other objects in the first place.

Also I wrote that it isn’t my MeshPart alone, I tried using a normal Part with the same thinness and it still has the same behavior.

Thanks for suggesting that, I tried it, using a 0.1 stud thick invisible part that would behave like a hitbox, but unfortunately not only does the keycard float a lot now, but even with a 0.1 stud thickness the model, though less common, still phases through walls.

I’m going to attach a rbxl file of a Baseplate, with a thin platform (0.25 Studs) and above it thin parts keep spawning indefinitely (0.1 Studs), some stay on the platform, others pass through it.

PhysicsBug.rbxl (53.2 KB)

Edit: Changed the clone script to randomize the position of newly cloned parts.

Another edit: It seems that, after several minutes of the parts spawning and phasing though the floor, they start phasing through the floor less and less often, at one point a solid minute passed without a single part phasing through.

To anyone who has the same issue:

I did a lot of experimenting, and I found out that the cause of the parts clipping is their speed. Reducing the gravity value showed that parts clip less and less often, and at 25 (or lover) gravity, they stop phasing all together.

I really hope a Roblox staff member will eventually find this post and fix this physics bug, but in the meantime here’s a makeshift solution I came up with:

You can reduce the Workspace gravity to 25 or lower, however I doubt anyone would want to use this method as it affects the rest of the game.

Alternatively (what I went with), you can put a BodyForce or VectorForce Instance inside the part, and have it push the object up, with the force set high enough to slow down the fall, but weak enough so that it doesn’t make the object float up.

Although this prevents almost all phasing, sometimes the thin parts slightly sink into the floor. To fix this, just track the object’s movement by calculating the magnitude between the object’s current and last position. When you detect that it is no longer moving, raise it up by half of it’s thickness.

I’ve had the (relatively) same issue with my basketball game(s). The basketball travels so fast, that around 30-40% of the time it just clips through the floor. Just simply changing the gravity for me, or changing the ball’s speed with force objects would not work due to how competitive and important accurate shooting is. Very frustrating for me.

1 Like

Oof, yeah I can imagine how annoying that must be. Sorry to hear that my methods aren’t of much use for your game.

Really hope Roblox notices this physics bug and fixes it soon.

1 Like

It might be overkill, but you can make a simple script, so when the keycard hits the floor, the script anchors the keycard.

The problem is that the part hits the floor beneath the one it should’ve landed on, because it clips right through it.

Maybe make the floor thicker? I tried it in studio and its working Edit : sorry I didnt saw you already tried this

You could use raycasting, and launch a ray down, and when it hits something, anchor the part there, and use collision groups to ignore the parts of the characters

I’ve already come up with a makeshift solution for this physics bug, as I’ve written before. My main point is that this bug should be fixed by Roblox.