bool UpdateSlidingPlanes(CollisionInfo collisionInfo, ref Vector3 slidingPlaneNormal, ref Vector3 groundPlaneNormal, ref Vector3 displacement) { Vector3 normal = collisionInfo.hitInfo.normal; if (collisionInfo.contactSlopeAngle > slopeLimit) { if (slidingPlaneNormal != Vector3.zero) { float correlation = Vector3.Dot(normal, slidingPlaneNormal); if (correlation > 0) { displacement = CustomUtilities.DeflectVector(displacement, groundPlaneNormal, normal); } else { displacement = Vector3.zero; } } else { displacement = CustomUtilities.DeflectVector(displacement, groundPlaneNormal, normal); } slidingPlaneNormal = normal; } else { displacement = CustomUtilities.ProjectVectorOnPlane( displacement, normal, Up ); groundPlaneNormal = normal; slidingPlaneNormal = Vector3.zero; } return(displacement == Vector3.zero); }