using System; using System.Collections; using System.Collections.Generic; using Unity.Collections; using Unity.Jobs; using Unity.Mathematics; using UnityEngine; public struct TerrainGenerationJob : IJobParallelFor { [ReadOnly] public int ChunkStartX; [ReadOnly] public int ChunkStartY; [ReadOnly] public int ChunkSize; [ReadOnly] public float Scale; [ReadOnly] public float OffsetX; [ReadOnly] public float OffsetY; [ReadOnly] public int MaxWidth; [ReadOnly] public int MaxDepth; [WriteOnly] public NativeArray TerrainMap; [WriteOnly] public NativeArray NoiseMap; public void Execute(int index) { int x = ChunkStartX + (index % ChunkSize); int y = ChunkStartY - (index / ChunkSize); if (x < 1 || x >= MaxWidth || y < -MaxDepth || y >= 0) { TerrainMap[index] = false; NoiseMap[index] = 0f; return; } float xPerlin = ((float)x / MaxWidth) * Scale + OffsetX; float yPerlin = ((float)Mathf.Abs(y) / MaxDepth) * Scale + OffsetY; float perlinNoise = noise.snoise(new float2(xPerlin, yPerlin)); // Using Unity.Mathematics noise NoiseMap[index] = perlinNoise; TerrainMap[index] = perlinNoise <= 0.7f; } }