- public class BuildingGen : MonoBehaviour
- {
- public int[] Building;//存储要生成的地块代码
- public int[] Probability;//存储概率
- public double seed;
-
- public int width = 100;
- public int height = 100;
- public float noiseScale = 0.1f; //噪声缩放倍数
-
- private int[,] frequencyMap;//存储柏林噪声生成的二维数组
-
- void Start()
- {
- frequencyMap = new int[width, height];
-
- GeneratePerlinNoise();
- //在这里根据需要补一个根据frequencyMap生成地块的代码
- }
-
- private void GeneratePerlinNoise()
- {
- for (int x = 0; x < width; x++)
- {
- for (int y = 0; y < height; y++)
- {
- float xCoord = (float)x / width * noiseScale;
- float yCoord = (float)y / height * noiseScale;
-
- float perlinValue = Mathf.PerlinNoise((float)xCoord + (float)seed, (float)yCoord + (float)seed);
-
- int buildingType = MapPerlinValueToBuildingType(perlinValue);
-
- frequencyMap[x, y] = buildingType;
- }
- }
- }
-
- private int MapPerlinValueToBuildingType(float perlinValue)
- {
- float cumulativeProbability = 0;
-
- for (int i = 0; i < Probability.Length; i++)
- {
- cumulativeProbability += (float)Probability[i] / 100.0f;
-
- if (perlinValue <= cumulativeProbability)
- {
- return Building[i];
- }
- }
-
- return Building[Building.Length - 1];
- }
- }
实机效果:通过修改seed以生成不同的地形


修改地块权重让绿色地块更多:
