C# 方法返回一个错误";并非所有代码路径都返回值,请协助
使用C# 方法返回一个错误";并非所有代码路径都返回值,请协助,c#,unity3d,C#,Unity3d,使用unity创建过程映射时,我遇到了错误“Cs0161:并非所有代码路径都返回值”,我对编码还是相当陌生,可能犯了一些错误 我试过谷歌,但答案对我来说都没有意义 然而 MapData GenerateMapData() { float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量); Color[]colormap=新颜色[mapChunkSize*mapCh
unity
创建过程映射时,我遇到了错误“Cs0161:并非所有代码路径都返回值”,我对编码还是相当陌生,可能犯了一些错误
我试过谷歌,但答案对我来说都没有意义
然而
MapData GenerateMapData()
{
float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量);
Color[]colormap=新颜色[mapChunkSize*mapChunkSize];
对于(int y=0;y 如果(currentHeight您收到该错误的原因是因为您的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);
}
MapData GenerateMapData()
{
float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量);
Color[]colormap=新颜色[mapChunkSize*mapChunkSize];
对于(int y=0;y 如果(currentHeight在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);
}
// You should also return something here
}
MapData GenerateMapData()
{
float[,]noiseMap=Noise.GenerateNoiseMap(mapChunkSize,mapChunkSize,种子,noiseScale,八度音阶,空隙率,持久性,偏移量);
Color[]colormap=新颜色[mapChunkSize*mapChunkSize];
对于(int y=0;y 如果(currentHeight没有返回第一个循环之外的任何内容,请尝试评估循环内的值,然后从循环外返回
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);
}
add return statement here
for(int y=0;y 如果(currentHeight该错误实际上已经告诉您出了什么问题。请看最后一行,如果mapChunkSize
为0怎么办?在这种情况下,您不会返回任何内容。我怀疑您只是想让return
语句位于顶级循环之外。如果循环只执行一次,则会很奇怪。方法可能重复如果是void以外的类型,则必须返回一些内容,请告诉我是否有用。
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);
}
add return statement here