Причина, по которой вы получаете эту ошибку, заключается в том, что ваш оператор return находится внутри циклов for. Более конкретно, может случиться так, что ни один из циклов не будет выполнен (например, mapChunkSize == 0. Тогда 0 не меньше 0 и программа не введет циклы for), и, таким образом, ничего не будет возвращено. Поэтому либо переместите возврат за пределы циклов, либо добавьте еще один возврат за пределы циклов.
MapData GenerateMapData()
{
float[,] noiseMap = Noise.GenerateNoiseMap(mapChunkSize, mapChunkSize, seed, noiseScale, octaves, lacunarity, persistance, offset);
Color[] colourMap = new Color[mapChunkSize * mapChunkSize];
for (int y = 0; y < mapChunkSize; y++)
{
for (int x = 0; x < mapChunkSize; x++)
{
float currentHeight = noiseMap[x, y];
for (int i = 0; i < regions.Length; i++)
{
if (currentHeight <= regions[i].height)
{
colourMap[y * mapChunkSize + x] = regions[i].colour;
break;
}
}
}
/*return new MapData(noiseMap, colourMap); //uncommenting this might still leave you with the functionality you want */
}
return new MapData(noiseMap, colourMap);
}