示例#1
0
    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);
    }
示例#2
0
 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();
 }