Ejemplo n.º 1
0
        /// <summary></summary>
        public static bool Collide(MeshCollider m1, MeshCollider m2)
        {
            Sphere s1 = new Sphere(m1.transform.position, 0);
            Sphere s2 = new Sphere(m2.transform.position, 0);

            foreach (Point pt in m1.GetVertices())
            {
                float d = DistanceUtil.Dist(pt, s1.position);
                if (d > s1.radius)
                {
                    s1.radius = d;
                }
            }
            foreach (Point pt in m2.GetVertices())
            {
                float d = DistanceUtil.Dist(pt, s2.position);
                if (d > s2.radius)
                {
                    s2.radius = d;
                }
            }
            if (!Collide(s1, s2))
            {
                return(false);
            }
            return(DistanceUtil.Dist(m1, m2) <= 0);
        }
        public static Plane[] GetPlanes(this MeshCollider m)
        {
            Point[]      vertices = m.GetVertices();
            List <Plane> planes   = new List <Plane>();

            for (int i = 0; i < m.sharedMesh.triangles.Length; i += 3)
            {
                int   i0 = m.sharedMesh.triangles[i], i1 = m.sharedMesh.triangles[i + 1], i2 = m.sharedMesh.triangles[i + 2];
                Point v0 = vertices[i0], v1 = vertices[i1], v2 = vertices[i2];
                planes.Add(new Plane(v0, v1, v2));
            }
            return(planes.ToArray());
        }
        /// <summary>Calcule approximativement la distance minimum entre les deux meshes. <b>Elle est basée sur la distance de chaque point par rapport à l'autre mesh.</b></summary>
        public static float Dist(MeshCollider m1, MeshCollider m2)
        {
            Point[] pts         = m1.GetVertices();
            float   closestDist = Dist(m2, pts[0]);

            for (int i = 1; i < pts.Length; i++)
            {
                float d = Dist(m2, pts[i]);
                if (d < closestDist)
                {
                    closestDist = d;
                }
            }
            foreach (Point pt in m2.GetVertices())
            {
                float d = Dist(m1, pt);
                if (d < closestDist)
                {
                    closestDist = d;
                }
            }
            return(closestDist);
        }
Ejemplo n.º 4
0
 /// <summary></summary>
 public static bool Collide(MeshCollider m, Plane p)
 {
     return(Collide(m.GetVertices(), p));
 }
 /// <summary>Calcule la distance minimum entre un plan et un mesh. Si c'est nagatif, indique la hauteur du plus petit morceaux du mesh coupé par le plan.</summary>
 public static float Dist(MeshCollider m, Plane p)
 {
     return(Dist(m.GetVertices(), p));
 }