public static Vector3 NearestPointOnMesh(Vector3 pt, Vector3[] verts, int[] tri, VertTriList vt)
    {
        int   num  = -1;
        float num2 = 1E+08f;

        for (int i = 0; i < verts.Length; i++)
        {
            float sqrMagnitude = (verts[i] - pt).sqrMagnitude;
            bool  flag         = sqrMagnitude >= num2;
            if (!flag)
            {
                num  = i;
                num2 = sqrMagnitude;
            }
        }
        bool    flag2 = num == -1;
        Vector3 result;

        if (flag2)
        {
            result = Vector3.zero;
        }
        else
        {
            int[]   array  = vt[num];
            Vector3 vector = Vector3.zero;
            num2 = 1E+08f;
            for (int j = 0; j < array.Length; j++)
            {
                int     num3          = array[j] * 3;
                Vector3 vector2       = verts[tri[num3]];
                Vector3 vector3       = verts[tri[num3 + 1]];
                Vector3 vector4       = verts[tri[num3 + 2]];
                Vector3 vector5       = NearestPointTest.NearestPointOnTri(pt, vector2, vector3, vector4);
                float   sqrMagnitude2 = (pt - vector5).sqrMagnitude;
                bool    flag3         = sqrMagnitude2 >= num2;
                if (!flag3)
                {
                    vector = vector5;
                    num2   = sqrMagnitude2;
                }
            }
            result = vector;
        }
        return(result);
    }