List <int> getAllNeighborTriangelIndex(ref Vector3 movablePos, int overlapCount, out Collider nearestC) { // 只有1個的話 if (overlapCount == 1) { var c = colliderList[0]; nearestC = c; return(c.GetComponent <GravitySensor>().neighborTriangleIndex); } // 找出最近的GS(1個以上) // 有甜甜圈的交界處的GravitySensor,會漏掉一些相鄰資訊 var vertexInfoList = new List <VertexInfo>(); for (int i = 0; i < overlapCount; i++) { Collider c = colliderList[i]; var vPos = c.transform.position; var vNormal = c.transform.forward; vertexInfoList.Add(new VertexInfo() { position = vPos, normal = vNormal, distance = (vPos - movablePos).sqrMagnitude, collider = c }); } vertexInfoList.Sort( (VertexInfo a, VertexInfo b) => { if (a.distance < b.distance) { return(-1); } else { return(1); } } ); nearestC = vertexInfoList[0].collider; // 最近的2個 var gs0 = vertexInfoList[0].collider.GetComponent <GravitySensor>(); var gs1 = vertexInfoList[1].collider.GetComponent <GravitySensor>(); var distance_0_1 = (gs0.transform.position - gs1.transform.position).magnitude; if (GeometryTool.floatEqual(distance_0_1, 0)) { // Debug.Log("GravitySensor合體"); List <int> list = new List <int>(); list.AddRange(gs0.neighborTriangleIndex); list.AddRange(gs1.neighborTriangleIndex); return(list); } else { return(gs0.neighborTriangleIndex); } }