/** * void OnMeshDataReceived(MeshData meshData) * { * meshFilter.mesh = meshData.CreateMesh(); * } **/ public void UpdateTerrainChunk() { if (mapDataReceived) { float viewerDistFromNearestEdge = Mathf.Sqrt(bounds.SqrDistance(viewerPosition)); bool visible = viewerDistFromNearestEdge <= maxViewDist; if (visible) { int lodIndex = 0; for (int i = 0; i < detailLevels.Length - 1; i++) { if (viewerDistFromNearestEdge > detailLevels[i].visibleDistThreshold) { lodIndex = i + 1; } else { break; } } if (lodIndex != previousLODIndex) { LODMesh lodMesh = lodMeshes[lodIndex]; if (lodMesh.hasMesh) { previousLODIndex = lodIndex; meshFilter.mesh = lodMesh.mesh; } else if (!lodMesh.hasRequestedMesh) { lodMesh.ReqestMesh(mapData); } } terrainChunksVisibleLastUpdate.Add(this); } SetVisible(visible); } }