//Checks if a job is completet and applies the generated values to the Mesh and Hands them over to the SceneryPlacer void SyncTerrainData() { if (jobHandles.Count > 0 && jobHandles[jobHandles.Count - 1].IsCompleted) { jobHandles[jobHandles.Count - 1].Complete(); TerrainGenerationJob job = jobs[jobs.Count - 1]; GameObject chunk = generatedChunks[(int)(job.chunkArrayCoordinates.x), (int)(job.chunkArrayCoordinates.y)]; chunk.layer = 8; Transform chunkTransform = chunk.transform; chunkTransform.parent = worldTransform; originShift.offsetChunk(chunk, job.chunkArrayCoordinates); chunk.isStatic = true; MeshRenderer meshRenderer = chunk.AddComponent <MeshRenderer>(); meshRenderer.sharedMaterials = new Material[2] { terrainMaterial, grassMaterial }; MeshFilter meshFilter = chunk.AddComponent <MeshFilter>(); meshFilter.mesh = GeneratePlane(job.vertices.ToArray()); meshRenderer.shadowCastingMode = ShadowCastingMode.TwoSided; meshRenderer.lightProbeUsage = LightProbeUsage.Off; MeshCollider chunkCollider = chunk.AddComponent <MeshCollider>(); chunkCollider.sharedMesh = meshFilter.mesh; sceneryPlacer.PlaceScenery(chunk, job.stoneData.ToArray()); job.Dispose(); jobs.RemoveAt(jobs.Count - 1); jobHandles.RemoveAt(jobHandles.Count - 1); } }
private void RenderTerrain() { Terragen = new TerrainGenerationJob(); Terragen.Input = new TerrainGenerationJob.JobInput(); Terragen.Input.Size = 50; Terragen.Input.Threshold = 0.1f; Terragen.Input.Seed = UnityEngine.Random.Range(0, 10000); Terragen.Start(); _jobStarted = true; }