public TerrainChunk(Vector2 coord, HeightMapSettings heightMapSettings, meshSettings meshSettings, LODInfo[] detailLevels, int colliderLODIndex, Transform parent, Transform viewer, Material material) { this.coord = coord; this.detailLevels = detailLevels; this.colliderLODIndex = colliderLODIndex; this.heightMapSettings = heightMapSettings; this.meshSettings = meshSettings; this.viewer = viewer; sampleCentre = coord * meshSettings.meshWorldSize / meshSettings.meshScale; Vector2 position = coord * meshSettings.meshWorldSize; bounds = new Bounds(position, Vector2.one * meshSettings.meshWorldSize); meshObject = new GameObject("Terrain Chunk"); meshRenderer = meshObject.AddComponent <MeshRenderer>(); meshFilter = meshObject.AddComponent <MeshFilter>(); meshCollider = meshObject.AddComponent <MeshCollider>(); meshRenderer.material = material; meshObject.transform.position = new Vector3(position.x, 0, position.y); meshObject.transform.parent = parent; meshObject.gameObject.tag = "Terrain"; SetVisible(false); lodMeshes = new LODMesh[detailLevels.Length]; for (int i = 0; i < detailLevels.Length; i++) { lodMeshes[i] = new LODMesh(detailLevels[i].lod); lodMeshes[i].updateCallBack += UpdateTerrainChunk; if (i == colliderLODIndex) { lodMeshes[i].updateCallBack += UpdateCollisionMesh; } } maxViewDistance = detailLevels[detailLevels.Length - 1].visibleDistanceThreshold; }
public void RequestMesh(HeightMap heightMap, meshSettings meshSettings) { hasRequestedMesh = true; ThreadedDataRequester.RequestData(() => meshGenerator.GenerateTerrainMesh(heightMap.values, meshSettings, lod), OnMeshDataReceived); }