protected override void OnUpdate() { Polygon poly = null; var holes = new List <Polygon>(); Entities.ForEach((ref PolygonOrientationComponent polygonOrientation, DynamicBuffer <PointSampleGlobal> points) => { PolygonPoint[] pointArray = new PolygonPoint[points.Length]; for (var i = 0; i < points.Length; i++) { pointArray[i] = new PolygonPoint(points[i].pose.pos.x, points[i].pose.pos.z); } var polygon = new Polygon(pointArray); if (polygonOrientation.Orientation == PolygonOrientation.Outside) { if (poly != null) { Debug.LogError("Multiple outside polygons detected. " + "Multiple outside polygons indicate a disconnected road network."); } poly = polygon; } else { holes.Add(polygon); } }); if (poly == null) { throw new NullReferenceException($"Polygon is null - will be unable to create mesh for " + $"{Parameters.Parent.name}."); } foreach (var hole in holes) { poly.AddHole(hole); } var mesh = RoadNetworkMesher.PolygonToMesh(poly, Parameters.UVMultiplier); GameObject go = new GameObject("Road mesh"); go.transform.parent = Parameters.Parent; go.transform.localPosition = new Vector3(0, .1f, 0); var meshRenderer = go.AddComponent <MeshRenderer>(); meshRenderer.material = Parameters.Material; var meshFilter = go.AddComponent <MeshFilter>(); meshFilter.mesh = mesh; go.AddComponent <MeshCollider>(); }