One of the solutions I have tried consist of this:
Here is the code provided:
function OnClimb()
local Origin, Direction = RootPart.Position, RootPart.CFrame.LookVector
local RaycastResult = workspace:Raycast(Origin, Direction)
if RaycastResult then
Climbing = true
Climbing_Animation:Play()
Climbing_Animation:AdjustSpeed(0)
BodyVelocity.Velocity = Vector3.new(RaycastResult.Position, RaycastResult.Position + RaycastResult.Normal)
BodyGyro.CFrame = CFrame.lookAt(RootPart.Position, RaycastResult.Position)
BodyVelocity.Parent = RootPart
BodyGyro.Parent = RootPart
Humanoid.PlatformStand = true
Humanoid.AutoRotate = false
repeat
RunService.RenderStepped:Wait()
if RootPart.Position.Y > RaycastResult.Instance.Size.Y + 3 then
OffClimb()
end
until (not Climbing)
end
end
this has been a problem for me too. A hacky solution I found was setting the CollisionGroup of the player (or the part) to something different than eachother.