最近我得到了(显然是随机的)MissingReferenceExceptions和NullReferenceExceptions。我设法将其缩小为两个缺失的变量(以及对其内容的任何其他引用)。
我仔细检查了所有引用这些变量的行,没有一个行删除或为空。我还检查了值逃逸到的地方,但这并不重要,因为c#是垃圾收集的(无论如何,它们也不会删除任何东西)。顺便说一下,这些对象是通过new创建的,它们既不是GameObjects也不是MonoBehaviours(但其中之一是包含MonoBehaviours的List)。不能被销毁的MonoBehaviours的实例变量也不会引用它们。当然,它们仍然被其他实例变量引用,否则无法引发异常。
好的,我没有粘贴我的3000多行代码。而且,我不是问错误在哪里,而是在寻找它:在什么情况下团结删除对象/对它们的空引用?
NullReferenceException: Object reference not set to an instance of an object
Level.WipeMoveable (Boolean keepAvailable) (at Assets/scripts/Level.cs:220)
Level.HandleRightClick (UnityEngine.GameObject clicked) (at Assets/scripts/Level.cs:184)
Selectable.OnClick (Int32 button) (at Assets/scripts/Selectable.cs:35)
Clickable.ButtonReleased (Int32 button) (at Assets/scripts/Clickable.cs:35)
Clickable.OnMouseOver () (at Assets/scripts/Clickable.cs:56)
期望的输出是保持不变的对象和引用,实际的输出是NullReferenceExceptions和MissingReferenceExceptions(有时;大多数时候,我会得到期望的输出)