public ClosestTrianglePoint(Vector3 position, float distance, int triangleIndex, Vector3 sphereOrigin, MeshAABBTree meshTree)
 {
     this.position      = position;
     this.distance      = distance;
     this.triangleIndex = triangleIndex;
     this.sphereOrigin  = sphereOrigin;
     this.meshTree      = meshTree;
 }
        public static List <ContactInfo> ClosestPointsOnSurface(Collider collider, Vector3 segment0, Vector3 segment1, float radius, List <ContactInfo> resultsBuffer, bool multipleContacts = true)
        {
            resultsBuffer.Clear();

            if (collider is MeshCollider)
            {
                MeshAABBTree meshTree = collider.GetComponent <MeshAABBTree>();
                if (meshTree != null)
                {
                    if (multipleContacts)
                    {
                        meshTree.ClosestPointsOnSurface(segment0, segment1, radius, resultsBuffer);
                    }
                    else
                    {
                        ContactInfo contact = meshTree.ClosestPointOnSurface(segment0, segment1, radius);
                        if (contact.point != Vector3.zero)
                        {
                            resultsBuffer.Add(contact);
                        }
                    }
                }
            }
            else if (collider is BoxCollider)
            {
                resultsBuffer.Add(ClosestPointOnSurface((BoxCollider)collider, segment0, segment1));
            }
            else if (collider is SphereCollider)
            {
                resultsBuffer.Add(ClosestPointOnSurface((SphereCollider)collider, segment0, segment1));
            }
            else if (collider is CapsuleCollider)
            {
                resultsBuffer.Add(ClosestPointOnSurface((CapsuleCollider)collider, segment0, segment1));
            }
            else if (collider is TerrainCollider) /*Not supported*/ } {