public void generate3DMeshCollider() {
List<Vector2> vertices2D = new List<Vector2> ();
PolyCollider polyCollider = GetComponent<PolyCollider> ();
if (polyCollider == null)
return;
foreach (Vector2 point in polyCollider._points) {
vertices2D.Add(point);
}
// Use the triangulator to get indices for creating triangles
Triangulator tr = new Triangulator(vertices2D.ToArray());
int[] indices = tr.Triangulate();
// Create the Vector3 vertices
Vector3[] vertices = new Vector3[vertices2D.Count];
for (int i=0; i<vertices.Length; i++) {
vertices[i] = new Vector3(vertices2D[i].x, 0.0f, vertices2D[i].y);
Ray ray = new Ray(vertices[i], Vector3.up );
RaycastHit[] hit = Physics.RaycastAll(ray, 10.0f);
foreach( RaycastHit h in hit ){
if( h.transform.gameObject.tag == "RaycastTerrain" )
vertices[i].y = h.point.y + 0.1f;
}
}
// Create the mesh
Mesh msh = new Mesh();
msh.vertices = vertices;
msh.triangles = indices;
msh.RecalculateNormals();
msh.RecalculateBounds();
// Set up game object with mesh;
MeshCollider meshCollider = gameObject.AddComponent<MeshCollider> ();
meshCollider.sharedMesh = msh;
meshCollider.isTrigger = true;
// Add an outline drawer so the object is always visible in the editor
OutlineDrawer drawer = gameObject.AddComponent<OutlineDrawer> ();
drawer.m_Color = Color.green;
//Add the occluder trigger
gameObject.AddComponent<RoomOccluderTrigger> ();
//Remoce this script
DestroyImmediate (this);
}