c# - 似乎确实存在的对象的 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)
所以是的,这对我来说没有任何意义。我不明白问题可能来自哪里,所以我什至不知道我应该分享我的代码的哪一部分来提供帮助。我的意思是我以相同的方式同时构建这两张地图,如果两者都工作或不工作会更好,而不仅仅是其中一个......也许这是某种错误?我不明白。我会很感激任何帮助。
解决方案
推荐阅读
- php - Laravel 5.2 PaymayaSDK 集成
- python - 停止 Python smtpd DebuggingServer
- python - 如何根据某些条件将熊猫数据框列拆分为不同的行?
- firebase - Firebase Spark 中的 Cloud Functions 计划是否与 Blaze 计划在同一基础架构上?
- javascript - 导入的变量未翻译
- react-native - 无法将没有 YogaNode 的子节点添加到没有度量函数的父节点
- algorithm - 不确定如何分解此分配任务
- ruby - return 语句中的空值表达式错误
- classification - Weka:不兼容的训练和测试集
- javascript - 在 javascript 横幅中使用 css 模糊图像