首页 > 解决方案 > 刚刚分配对象时的 Unity NullReferenceException

问题描述

我有一个正在实例化的 GameObject:

var face = Instantiate(waveConfigs[waveNumber].getFacePrefab(), waypoint.position, Quaternion.identity, FindObjectOfType<Canvas>().transform);

Debug.Log(face, this);
faces.Add(face);

faces上面是这样声明的:

List<GameObject> faces;

对象被实例化,DebugLog如下:

Smile(Clone) (UnityEngine.GameObject)
UnityEngine.Debug:Log(Object)
FaceSpawner:SpawnFaces(Int32) (at Assets/Scripts/FaceSpawner.cs:30)
FaceSpawner:Start() (at Assets/Scripts/FaceSpawner.cs:16)

(哪个是 Debug.Log(face, this);)

然后就在那之后,当我打电话时faces.Add()

NullReferenceException: Object reference not set to an instance of an object
FaceSpawner.SpawnFaces (System.Int32 waveNumber) (at Assets/Scripts/FaceSpawner.cs:31)
FaceSpawner.Start () (at Assets/Scripts/FaceSpawner.cs:16)

我不明白,我实际上只是分配了这个变量,它起作用了,它出现在画布上,我可以将它从调试日志中注销,然后当我尝试将它添加到列表时,我得到一个 NullReference。这里发生了什么?

标签: c#unity3dnullreferenceexception

解决方案


你的faces容器也被初始化了List<GameObject> faces = new List<GameObject>()吗?

问题是您正在尝试访问Add尚未创建的容器,即尚未为其分配内存且尚未调用其构造函数的容器。所以基本上你试图Add在不存在的对象上调用函数。


推荐阅读