首页 > 解决方案 > 似乎确实存在的对象的 NullReferenceException

问题描述

我正在开发一个地图生成器(在 Unity 上),它目前正在绘制高度图。我尝试为温度和湿度添加另外两个高度图:两者的工作方式完全相同,但是当我尝试绘制湿度图时,我得到了 NullReferenceException。

我的代码如何工作:

我有一个 HeightMap 类,我在其中存储 var 以生成一个 NoiseMap,我从中构建了三个其他类(TerrainMap、TemperatureMap 和 HumidityMap),其中包含特定变量,但最后两个是相似的,除了它们是从相同的 HeightType 类。TerrainType 也是一样的。不确定我需要在这里发布。

然后我有一个具有三个高度和三种类型的 TileData 类。在我使用相同的函数但它们自己的变量生成我的三个高度图之后,我用这些构建了一个 tileDataMap:

tileDataMap[x, y] = new TileData(x, y, terrainMap.heightMap[x, y], temperatureMap.heightMap[x, y], humidityMap.heightMap[x, y]);

然后根据高度我给瓷砖它的类型:

            // setting humidity by type
            for (int i = 0; i < humidityMap.humidityTypes.Length; i++)
            {
                if (tileDataMap[x, y].humidityHeight <= humidityMap.humidityTypes[i].height)
                {
                    tileDataMap[x, y].humidityType = humidityMap.humidityTypes[i];
                    break;
                }
            }

            // setting temperature by type
            for (int i = 0; i < temperatureMap.temperatureTypes.Length; i++)
            {
                if (tileDataMap[x, y].temperatureHeight <= temperatureMap.temperatureTypes[i].height)
                {
                    tileDataMap[x, y].temperatureType = temperatureMap.temperatureTypes[i];
                    break;
                }
            }

然后我将我的 tileDataMap 发送到我的 DrawingTexture 函数

                    case DrawMap.Humidity:
                    if (tileDataMap[x, y].temperatureType.color == null)
                    {
                        pixels[x + y * width] = Color.magenta;
                    }
                    else
                    {
                        pixels[x + y * width] = tileDataMap[x, y].humidityType.color;
                    }
                    break;
                case DrawMap.Temperature:
                    pixels[x + y * width] = tileDataMap[x, y].temperatureType.color;
                    break;

第二个正常工作(对于地形也是如此),但不是第一个。您在这里看到我尝试处理空异常(不确定是否应该这样做),但这并没有改变任何东西。在绘制我的地图之前,我尝试检查我想为两张地图绘制的值,并且在这两种情况下我都得到了一个颜色值......

    Debug.Log(tileDataMap[0, 0].humidityType.color); // Print : RGBA(0.333, 1.000, 1.000, 0.000)
    Debug.Log(tileDataMap[0, 0].temperatureType.color); // Print : RGBA(1.000, 0.047, 0.000, 0.000)
    Debug.Log(tileDataMap[130, 130].humidityType.color); // etc.
    Debug.Log(tileDataMap[130, 130].temperatureType.color);
    Debug.Log(tileDataMap[width - 1, height - 1].humidityType.color);
    Debug.Log(tileDataMap[width - 1, height - 1].temperatureType.color);

编辑:我忘了说错误指向这一行:

pixels[x + y * width] = tileDataMap[x, y].humidityType.color;

NullReferenceException: Object reference not set to an instance of an object TextureGenerator.GetTexture (TileData[,] tileDataMap, DrawMap drawMap, System.Boolean drawUnderwaterSteps) (at Assets/Scripts/World Generator v1/TextureGenerator.cs:71)

所以是的,这对我来说没有任何意义。我不明白问题可能来自哪里,所以我什至不知道我应该分享我的代码的哪一部分来提供帮助。我的意思是我以相同的方式同时构建这两张地图,如果两者都工作或不工作会更好,而不仅仅是其中一个......也许这是某种错误?我不明白。我会很感激任何帮助。

标签: c#unity3d

解决方案


推荐阅读