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);
        }