Prevent player from pushing moving part

I want to prevent a player from pushing a moving part, but the part cannot be cancollide false.

I’m using BodyPosition and BodyAngularVelocity. I can’t use tweenservice, as I need them to move the player if they stand on them

The green and red ones should have the exact same movement, but as you can see, my character affects the parts movement
ezgif.com-gif-maker (13)

image
image

Please read the first sentence again.

This player needs to be able to collide with it, as they NEED to be able to stand and move across with the part.

One really jank way of doing it would be to put a part above the moving object so they can stand ontop of it but cannot push it? Just will have to get a way of tracking the moving object with the part.

What about casting a ray from the HumanoidRootPart to the floor? This method is precise enough for what you’re looking.

local function CollisionDetect()
    local Result = workspace:Raycast(HumanoidRootPart.Position, Vector3.new(0, -1, 0) * 3, Params)
    
    if Result then
        Result.Instance.CanCollide = true
    end
end

Am I supposed to be checking that every render or what?

Set the Body Movers MaxForce and MaxTorque to math.huge.

Thet should work. If not increase P and increase D.

Actually, in your case I would use the AlignPosition and Angular velocity constraint instead. If you select Rigidity enabled the Parts will not move from their target.

(It will end up moving the player)

Also, I think there is a way to have a touched event fired with no collide parts.

I think you can use Collision Groups(Collision Filtering | Roblox Creator Documentation) and some think to detect when the player is standing like raycast or Floor Material.