using UnityEngine; /// /// Генерирует плоский мир — слои блоков по всей сетке чанков. /// Реализует простой интерфейс, который легко заменить на terrain-генератор. /// public class FlatWorldGenerator : MonoBehaviour { [Header("World Size (in chunks)")] public int chunksX = 4; public int chunksZ = 4; [Header("Layers (bottom → top)")] public LayerDef[] layers = new[] { new LayerDef { blockId = "stone", height = 3 }, new LayerDef { blockId = "dirt", height = 3 }, new LayerDef { blockId = "grass", height = 1 }, }; void Start() { if (WorldManager.Instance == null) { Debug.LogError("[FlatWorldGenerator] WorldManager not found."); return; } Generate(); } public void Generate() { for (int cx = 0; cx < chunksX; cx++) for (int cz = 0; cz < chunksZ; cz++) { // Центрируем мир относительно нуля var chunkPos = new Vector3Int(cx - chunksX / 2, 0, cz - chunksZ / 2); var data = new ChunkData(chunkPos); int currentY = 0; foreach (var layer in layers) { for (int h = 0; h < layer.height; h++) { if (currentY >= ChunkData.HEIGHT) break; for (int x = 0; x < ChunkData.SIZE; x++) for (int z = 0; z < ChunkData.SIZE; z++) data.SetBlock(x, currentY, z, layer.blockId); currentY++; } } WorldManager.Instance.CreateChunk(chunkPos, data); } Debug.Log($"[FlatWorldGenerator] Generated {chunksX * chunksZ} chunks."); } [System.Serializable] public struct LayerDef { public string blockId; [Min(1)] public int height; } }