Метод возвращает ошибку "не все пути кода возвращают значение, пожалуйста, помогите - PullRequest
0 голосов
/ 21 октября 2019

Используя unity для создания процедурной карты, я получаю сообщение об ошибке "Cs0161: не все пути кода возвращают значение", я все еще довольно новичок в кодировании и, возможно, допустил некоторую ошибку.

Я пробовал Google, но ответы для меня пока не имеют смысла

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);
    }
}

Ошибка CS0161 'MapGenerator.GenerateMapData ()': возвращаются не все пути кодаЗначение Assembly-CSharp

Ответы [ 3 ]

1 голос
/ 21 октября 2019

После циклов 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
}

Теоретически возможно, что mapChunkSize может иметь значение 0 (ноль) и не будет вводить первое длякругом на всех. Вот почему вам также необходимо получить оператор возврата внизу.

0 голосов
/ 21 октября 2019

вы ничего не возвращаете за пределами первого цикла, попробуйте оценить значения внутри циклов и затем вернуться извне цикла.

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
0 голосов
/ 21 октября 2019

Причина, по которой вы получаете эту ошибку, заключается в том, что ваш оператор 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);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...