void MakeLists2_AroundEdge() { for (int i = 0; i < edgeList.Count; i++) { colList = Physics.OverlapSphere(edgeList[i].transform.position, searchDis_edge); // 各辺の原点位置を中心にオブジェクト探索 edge = edgeList[i].GetComponent <EdgeInformation>(); for (int j = 0; j < colList.Length; j++) { if (colList[j].gameObject.CompareTag("Face")) { //////////////////////////////// //// 辺に接する面のリスト化 //// //////////////////////////////// // EdgeInformationに、辺に接する2面のtransform情報を与える if (edge.face[0] == null) { edge.face[0] = colList[j].gameObject; } else { edge.face[1] = colList[j].gameObject; } // 辺に接する面のリスト化 faceList_FromEdge[i].Add(colList[j].gameObject); // ◆今のところデバッグ用としてのみの使用◆辺の識別番号 = i、面のgameObject = colList[j].gameObject //////////////////////////////// //// 面に接する辺のリスト化 //// //////////////////////////////// face = colList[j].gameObject.GetComponent <FaceInformation>(); // FaceInformationに、面に接する4辺のtransform情報を与える if (face.edge[0] == null) { face.edge[0] = edgeList[i]; } else if (face.edge[1] == null) { face.edge[1] = edgeList[i]; } else if (face.edge[2] == null) { face.edge[2] = edgeList[i]; } else { face.edge[3] = edgeList[i]; } // 面に接する辺のリスト化 edgeList_FromFace[face.FaceNum].Add(edgeList[i]); // ◆今のところデバッグ用としてのみの使用◆面の識別番号 = face.FaceNum、辺のgameObject = edgeList[i] } } } }
void NumberingAndMakeLists() { for (int i = 0; i < edgeList.Count; i++) { edge = edgeList[i].GetComponent <EdgeInformation>(); edge.EdgeNum = i; // 辺に識別番号を付与 vertexList_FromEdge.Add(new List <GameObject>()); // 辺の数だけ新規リストを作成 faceList_FromEdge.Add(new List <GameObject>()); // 辺の数だけ新規リストを作成 } for (int j = 0; j < faceList.Count; j++) { face = faceList[j].GetComponent <FaceInformation>(); face.FaceNum = j; // 面に識別番号を付与 edgeList_FromFace.Add(new List <GameObject>()); // 面の数だけ新規リストを作成 } }
void FindNearestFaceOrEdge() { // 直前までカメラが面していたのは面か辺か if (!vertical && !horizontal) // 面の時 { face = currentGao.GetComponent <FaceInformation>(); float?diff = null; for (int i = 0; i < 4; i++) { // robotの探索移動前後の距離を比較し、最も距離が縮まった辺(のGameObject)を割り出す // robotの探索移動前(=現在いる面)と移動先候補の辺との距離 float beforeDis = (face.edge[i].transform.position - currentGao.transform.position).magnitude; // robotの探索移動後と移動先候補の辺との距離 float afterDis = (face.edge[i].transform.position - robot.transform.position).magnitude; if (diff == null || afterDis - beforeDis < diff) { diff = afterDis - beforeDis; nextGao = face.edge[i]; } } } else // 辺の時 { edge = currentGao.GetComponent <EdgeInformation>(); float?diff = null; for (int i = 0; i < 2; i++) { // robotの探索移動前後の距離を比較し、最も距離が縮まった面(のGameObject)を割り出す // robotの探索移動前(=現在いる面)と移動先候補の辺との距離 float beforeDis = (edge.face[i].transform.position - currentGao.transform.position).magnitude; // robotの探索移動後と移動先候補の辺との距離 float afterDis = (edge.face[i].transform.position - robot.transform.position).magnitude; if (diff == null || afterDis - beforeDis < diff) { diff = afterDis - beforeDis; nextGao = edge.face[i]; } } } }