Unity C# 颜色分配显示错误。说它是一个空
Unity C# color assigning showing error . Saying it is a null
private Material NewMat;
private Color[] oldColor;
private Color[] newColor;
for(int i=0; i<6; i++)
{
NewMat = dropObj.transform.GetChild(0).gameObject.transform.GetChild(i).GetComponent<MeshRenderer>().material;
var tempcolor = NewMat.color;
print(tempcolor);
oldColor[i] = new Color(tempcolor.r,tempcolor.g,tempcolor.b,tempcolor.a); //the problem is here
print ("Position="+i);
newColor[i] = oldColor[i];
dropObj.transform.GetChild(0).gameObject.transform.GetChild(i).GetComponent<MeshRenderer>().material.SetColor("_Color", newColor[i]);
}
这行代码显示错误(空):- oldColor[i] = new Color(tempcolor.r,tempcolor.g,tempcolor.b,tempcolor.a);
如何解决这个问题
我怀疑问题是 oldColor
和 newColor
数组没有初始化。该错误指出一个空值。 Color
是结构体,是值类型,不能指向null。但是Color
类型的数组可以指向null,因为它是引用类型。
解决方案是在使用之前初始化所述数组:
oldColor = new Color[size]; //6?
newColor = new Color[size]; //6?
for(int i = 0; i < 6; i++)
{...}
size
当然需要在使用前声明和初始化。
一些与问题没有直接关系的注释:
如果您不知道数组应该有多大,请考虑使用通用的 List<Color>
。您可以使用 Add
方法向其中添加元素:
oldColor = new List<Color>();
newColor = new List<Color>();
for(int i = 0; i < 6; i++)
{
..
..
oldColor.Add(new Color(..));
..
..
}
for 循环中的第一行可能会出错很多。我建议把它分成多行,这样调试起来会更容易。直接引用有问题的游戏对象可能会有所帮助,如果它总是相同的游戏对象。
将值硬编码到 for 循环减速的条件部分是一种不好的做法。如果 for 循环应该遍历整个旧颜色数组,请像这样声明循环:
for(int i = 0; i < oldColor.Length; i++)
这将确保对于任何给定大小的 oldColor
,for 循环仍将迭代整个数组。
private Material NewMat;
private Color[] oldColor;
private Color[] newColor;
for(int i=0; i<6; i++)
{
NewMat = dropObj.transform.GetChild(0).gameObject.transform.GetChild(i).GetComponent<MeshRenderer>().material;
var tempcolor = NewMat.color;
print(tempcolor);
oldColor[i] = new Color(tempcolor.r,tempcolor.g,tempcolor.b,tempcolor.a); //the problem is here
print ("Position="+i);
newColor[i] = oldColor[i];
dropObj.transform.GetChild(0).gameObject.transform.GetChild(i).GetComponent<MeshRenderer>().material.SetColor("_Color", newColor[i]);
}
这行代码显示错误(空):- oldColor[i] = new Color(tempcolor.r,tempcolor.g,tempcolor.b,tempcolor.a); 如何解决这个问题
我怀疑问题是 oldColor
和 newColor
数组没有初始化。该错误指出一个空值。 Color
是结构体,是值类型,不能指向null。但是Color
类型的数组可以指向null,因为它是引用类型。
解决方案是在使用之前初始化所述数组:
oldColor = new Color[size]; //6?
newColor = new Color[size]; //6?
for(int i = 0; i < 6; i++)
{...}
size
当然需要在使用前声明和初始化。
一些与问题没有直接关系的注释:
如果您不知道数组应该有多大,请考虑使用通用的
List<Color>
。您可以使用Add
方法向其中添加元素:oldColor = new List<Color>(); newColor = new List<Color>(); for(int i = 0; i < 6; i++) { .. .. oldColor.Add(new Color(..)); .. .. }
for 循环中的第一行可能会出错很多。我建议把它分成多行,这样调试起来会更容易。直接引用有问题的游戏对象可能会有所帮助,如果它总是相同的游戏对象。
将值硬编码到 for 循环减速的条件部分是一种不好的做法。如果 for 循环应该遍历整个旧颜色数组,请像这样声明循环:
for(int i = 0; i < oldColor.Length; i++)
这将确保对于任何给定大小的 oldColor
,for 循环仍将迭代整个数组。