最近在做一个unity实验项目,写了以下脚本代码:
private MeshRenderer[] ledList ;
private void Awake()
{
if (ledList != null) return;
ledList = GetComponentsInChildren<MeshRenderer>();
}
这个脚本代码用于获取子物体所有MeshRenderer组件,在后面方面统一进行修改。
这时候我想将ledList在Unity中可视化,于是加了个声明如下:
[SerializeField]private MeshRenderer[] ledList ;
private void Awake()
{
if (ledList != null) return;
ledList = GetComponentsInChildren<MeshRenderer>();
}
这时候在运行中,发现ledList是空?这是为啥?
后来测试后发现,这是unity自己的问题。
无论是[SerializeField]private还是public,为了能正常显示,在运行之初,都会为显式变量赋予一个非空初值,而private则不会。
所以在后面的代码里使用null作为条件判断就出问题了,ledList被unity自动初始化为一个非空值了,所以无法运行后面代码。