void GenerateData(MeshRenderer r) { var targetMatrix = transform.worldToLocalMatrix * r.transform.localToWorldMatrix; Mesh targetMesh = r.gameObject.GetComponent <MeshFilter> ().sharedMesh; int[] triangles = targetMesh.triangles; Vector3[] vertexes = targetMesh.vertices; //拼装成三角形 for (int i = 0; i < triangles.Length; i += 3) { //使用三角形索引号取顶点坐标可以保证组成的正确的显示三角形 int index0 = triangles[i]; int index1 = triangles[i + 1]; int index2 = triangles[i + 2]; Vector3 v0 = vertexes[index0]; Vector3 v1 = vertexes[index1]; Vector3 v2 = vertexes[index2]; v0 = targetMatrix.MultiplyPoint(v0); v1 = targetMatrix.MultiplyPoint(v1); v2 = targetMatrix.MultiplyPoint(v2); var list = new List <Vector3> (); list.Add(v0); list.Add(v1); list.Add(v2); //每组三角形都进行检查 if (CollisionChecker.Checker(list)) { Vector3 first = v0 - v1; Vector3 second = v0 - v2; Vector3 normal = Vector3.Cross(first, second).normalized; AddPolygon(list.ToArray(), normal); GenerateMesh(); } } }