public void Update() { var sqrDistanceToViewer = bounds.SqrDistance(viewer.position); var sqrMaxViewDist = lodSettings[lodSettings.Length - 1].maxViewDist * lodSettings[lodSettings.Length - 1].maxViewDist; bool isVisible = sqrDistanceToViewer <= sqrMaxViewDist; if (isVisible && hasRequestedNoiseMap) { lodMeshIndex = 0; for (int i = 0; i < lodSettings.Length - 1; i++) { var sqrLODMaxViewDist = lodSettings[i].maxViewDist * lodSettings[i].maxViewDist; if (sqrDistanceToViewer <= sqrLODMaxViewDist) { break; } else { lodMeshIndex++; } } var lodMesh = lodMeshes[lodMeshIndex]; if (lodMesh.hasMesh) { meshFilter.sharedMesh = lodMesh.mesh; } else if (!lodMesh.hasRequestedMesh && hasNoiseMap) { //lodMesh.RequestMesh(noiseMapData);// to remove RequestMesh(lodMesh); } } else if (!hasRequestedNoiseMap) { hasRequestedNoiseMap = true; UnityTaskManager.ScheduleTask(RequestNoiseMap, OnNoiseMapReceived); } SetActive(isVisible); }
public TerrainChunk(Vector3 offset, Transform parent, NoiseSettings noiseSettings, SphereMeshSettings meshSettings, Material material, Transform viewer) { Vector3 size = Vector3.one * meshSettings.chunkSize; bounds = new Bounds(offset + size / 2, size); gameObject = new GameObject("Chunk: " + bounds.min); gameObject.transform.SetParent(parent); this.viewer = viewer; this.noiseSettings = noiseSettings; this.meshSettings = meshSettings; this.lodSettings = meshSettings.lodSettings; gameObject.AddComponent <MeshRenderer>().sharedMaterial = material; meshFilter = gameObject.AddComponent <MeshFilter>(); meshCollider = gameObject.AddComponent <MeshCollider>(); InitializeLOD(); hasRequestedNoiseMap = true; UnityTaskManager.ScheduleTask(RequestNoiseMap, OnNoiseMapReceived); }
public void RequestMesh(LODMesh lodMesh) { lodMesh.hasRequestedMesh = true; UnityTaskManager.ScheduleTask(RequestMeshData, OnMeshDataReceived); }
void Awake() { instance = FindObjectOfType <UnityTaskManager>(); Debug.Log("UnityTaskManager Initialized"); }