Exemplo n.º 1
0
 //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);
     }
 }
Exemplo n.º 2
0
 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;
 }