Is it possible to have an object with collisions ON but stop it from pushing other objects?

I am trying to make a grab system similar to the one in portal or half life by using an align position on an object and targeting the area in front of the camera

the carried object has its collision with the player disabled to prevent prop surfing and breaking the game. Only problem now is that its still possible to push a second object which then pushes the player. I dont want to completely disable collision for the carried object as to prevent it from being pushed into walls or into other objects which would break the game

I want it to simply follow the player and get stuck or go around obstacles rather than pushing them. I do have it automatically dropping if it gets too separated from the player which works well against anchored walls but i dont want to make it so any little bump against another prop automatically drops it. It should go around if it can

I have tried setting the carried object’s density using custom physical properties which does prevent pushing, but it also leads to really weird physics jank that sends the carried object flying randomly so id rather keep the weight normal. Density .1 seems to never get janky but it can still push plastic parts so its not ideal.
Ive tried messing with the align position’s force and speed but everything so far is still janky
ive also tried using other force objects like linear velocity but its about the same story

Anyone have any examples of this working? Im pretty sure ive seen similar systems in roblox games before and would like to know how theyre done

Other than a one way collision setting which doesnt exist (but should) I think the only solution i can think of would be to do a shapecast in the direction the carried object will move and only moving if its empty but setting force to 0 if it collides but it feels like there should be a much simpler solution im not aware of.

Ive seen a few posts with similar issues relating to one way collision but couldnt find a solution
sidenote: roblox please add one way collision to collision groups

You would have to manually code it to do so. Either by detecting parts below the player and applying a force on them or just rewriting the player movement logic.

No other way.

I’m not 100% sure I understand your exact goal, but I’m picturing an object being manipulated by a portal gun, and my first thought would be to make the AlignPosition MaxForce as small as you can get away with, so that the object can move through free space, but not exert much force on anything it touches. This may require CustomPhysicalProperties to make friction zero or super low (with high FrictionWeight) for it to be able to slide along surfaces with very little force. You probably still need to keep the density low also, so that the object has as low a momentum as possible.

Why not disable collision for a “prop” collision group? While grabbing.

Object must retain its ability to collide against other objects so as to not go into them

figured out a way
it does work by setting the density but not right away, letting the object get into motion at a low force then setting the density seems to be working
i have it set up now that the object is initially set to .1 density and a tween increases the strength of the align position object
once the tween ends the density of the object is set to .0001 and the align orientation force is set to a different value
hasnt flung out of existence on me yet

I would recommend using physics service for this type of system
For portal/half life collision you want, you will need to create collision group called “Props” for example (it can be anything you want)
This can be done with PhysicsService:RegisterCollisionGroup(“CollisionGroupName”) method or manually in collision groups editor window


Apply collision group you created to every prop part/parts in their model
Then add this line in grabbing object logic:

-- some code above that grabs the object
PhysicsService:CollisionGroupSetCollidable("Default", "Prop", false)

Note that it should send a remote event to apply it on server as that method is server side only
And when player drops object just do same thing but with true set instead

-- some code above that drops the object
PhysicsService:CollisionGroupSetCollidable("Default", "Prop", true)

This should make prop collideable only with other parts that are marked as props collision group as well resources that are related to this:

https://robloxapi.github.io/ref/class/PhysicsService.html
https://robloxapi.github.io/ref/class/PhysicsService.html#member-CollisionGroupSetCollidable
https://create.roblox.com/docs/workspace/collisions#collision-filtering