public IMapView CreateMapView(GameObject mapZonePrefab, IMapModel mapModel) { var holeGameObject = new GameObject(); var zoneViews = new List <IMapZoneView>(); var mapRoot = CreateAndRotateMapRoot(mapModel.MapInfo); foreach (var zoneModel in mapModel.MapZones) { var zoneRepresentation = _monoBehaviourProvider.CreateInstance(mapZonePrefab, mapRoot); zoneRepresentation.name = zoneModel.Name; DrawZoneOutlines(zoneRepresentation, zoneModel, holeGameObject); var mesh = _meshGenerator.CreateZoneMesh(zoneModel); var meshFilter = zoneRepresentation.GetComponent <MeshFilter>(); meshFilter.mesh = mesh; var meshCollider = zoneRepresentation.GetComponent <MeshCollider>(); meshCollider.sharedMesh = mesh; zoneViews.Add(new MapZoneView(zoneModel.Id, zoneRepresentation)); } return(new MapView(zoneViews, mapRoot)); }