public bool CheckValidity(int axes = 7) { var results = new List <ObjTransform>(); var objects = new List <ObjTransform>(); var resCenter = new Vector3(0, 0, 0); var objCenter = new Vector3(0, 0, 0); var objCount = Result.transform.childCount; for (var i = 0; i < objCount; i++) { var res = Result.transform.GetChild(i); var obj = GameObjects.transform.GetChild(i); results.Add(new ObjTransform(res.name, new Vector3( (axes & XAXIS) > 0 ? res.position.x : 0, (axes & YAXIS) > 0 ? res.position.y : 0, (axes & ZAXIS) > 0 ? res.position.z : 0), res.rotation.ToEulerAngles())); objects.Add(new ObjTransform(obj.name, new Vector3( (axes & XAXIS) > 0 ? obj.position.x : 0, (axes & YAXIS) > 0 ? obj.position.y : 0, (axes & ZAXIS) > 0 ? obj.position.z : 0), obj.rotation.ToEulerAngles())); resCenter += results[i].Pos; objCenter += objects[i].Pos; } resCenter *= 1f / objCount; objCenter *= 1f / objCount; // Normalize for (var i = 0; i < objCount; i++) { results[i] = new ObjTransform(results[i].Name, results[i].Pos - resCenter, results[i].Rot); objects[i] = new ObjTransform(objects[i].Name, objects[i].Pos - objCenter, objects[i].Rot); } var distance = 0f; for (var i = 0; i < objCount; i++) { var res = results[i]; ObjTransform closest = objects[0]; var closestDist = float.PositiveInfinity; foreach (var obj in objects) { if ((obj.Pos - res.Pos).magnitude > closestDist || !obj.Name.Equals(res.Name) || !obj.Rot.Equals(res.Rot)) { continue; } closest = obj; closestDist = (obj.Pos - res.Pos).magnitude; } distance += closestDist; objects.Remove(closest); } return(distance < objCount * 0.05); }
public void InitMeshData() { m_meshRenderer = ObjTransform.GetComponent <MeshRenderer>(); m_meshCollider = ObjTransform.GetComponent <MeshCollider>(); m_meshFilter = ObjTransform.GetComponent <MeshFilter>(); ObjTransform.localScale = InitScale(); ObjTransform.position += new Vector3(0, OffY(), 0); //CalculateMapFromScratch(); CreateVisualMesh(); }