One of the simplest ways to set up a player attractor like a grappled–object is to just lerp
the player's Vector3 translation to that of the object. So you might set a Raycast when the player clicks/grapples and if the ray hits a PhysicsBody, then:
player.translation = lerp(player.translation, raycast.get_collision_point(), lerp_speed)