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

有很多事情在发生:

  1. (如果得分== 0,你为什么将得分设为0?你可以将其他人留下。)

  2. DisplayScore您正在访问scoreText字段。 如果你没有在检查器中设置它,那将抛出NullReferenceException

  3. ResetScore您将获得GameManager实例。 如果包含Score脚本的游戏对象也不包含GameManager脚本,则对ResetQuestions的调用将抛出NullReferenceException

  4. 如果您未在检查器中设置任何问题,则在GameManager Start处可能会出现NullReferenceException

  5. 您的SetCurrentQuestion一个错误。 基本上如果没有问题,你会得到一个从0到0的随机数。在这种情况下,唯一有效的结果是0。 然后您正在访问索引为0的问题。但是不会有一个问题。 (这将抛出IndexOutOfRangeException

  6. 如果尚未在检查器中分配,则任何私有[SerializeField]字段都可能抛出NullReferenceException。

如您所见,您的许多语句都可能导致NullReferenceException 。 我们无法真正告诉你问题出在哪里,因为它可能在很多地方。 最好通过调试代码并检查您尝试访问的变量的位置为空。

任何对象都可以为null …

只需检查您的代码:

 GetComponent(); 

可以给你没有GameManager,

 questions.ToList(); 

或者您的列表未初始化。 修复它:

  unansweredQuestions = new List(); 

您需要直接调试代码,或者只需检查!= null