Unity C#NullReferenceException
我知道,这个问题在这里已经得到了很多回答,并且相信我,我已经尝试了很多方法来解决这个问题,但它一次又一次地发生。
所以基本上,我试图在不同的剧本中改变游戏中的钱。
但是当我单击按钮时,我收到此错误消息。 我认为我在这里做了一些根本性的错误,但它也发生在我的得分脚本中,但无论如何这仍然有效……但这里是错误:
NullReferenceException: Object reference not set to an instance of an object Score.ResetScore () (at Assets/Scripts/Score.cs:36)
以下是应该协同工作的脚本。
脚本1:
void ResetScore() { GameManager gamemanag = GetComponent(); score = 0; gamemanag.ResetQuestions(); }
脚本2:
public void ResetQuestions() { unansweredQuestions = questions.ToList(); }
这是得分脚本,因为它有点清洁。 这并不是真的有效,我也不知道为什么……
我最后在pastebin上发布了完整的代码。
如果你能帮忙的话会很棒的!
脚本1: http : //pastebin.com/raw/qvbFYd3x
脚本2: http : //pastebin.com/raw/8gMzaagq
有很多事情在发生:
-
(如果得分== 0,你为什么将得分设为0?你可以将其他人留下。)
-
在
DisplayScore
您正在访问scoreText
字段。 如果你没有在检查器中设置它,那将抛出NullReferenceException 。 -
在
ResetScore
您将获得GameManager
实例。 如果包含Score
脚本的游戏对象也不包含GameManager
脚本,则对ResetQuestions的调用将抛出NullReferenceException 。 -
如果您未在检查器中设置任何问题,则在
GameManager
Start
处可能会出现NullReferenceException 。 -
您的
SetCurrentQuestion
有一个错误。 基本上如果没有问题,你会得到一个从0到0的随机数。在这种情况下,唯一有效的结果是0。 然后您正在访问索引为0的问题。但是不会有一个问题。 (这将抛出IndexOutOfRangeException ) -
如果尚未在检查器中分配,则任何私有[SerializeField]字段都可能抛出NullReferenceException。
如您所见,您的许多语句都可能导致NullReferenceException 。 我们无法真正告诉你问题出在哪里,因为它可能在很多地方。 最好通过调试代码并检查您尝试访问的变量的位置为空。
任何对象都可以为null …
只需检查您的代码:
GetComponent();
可以给你没有GameManager,
questions.ToList();
或者您的列表未初始化。 修复它:
unansweredQuestions = new List();
您需要直接调试代码,或者只需检查!= null