Unity C#NullReferenceException
我知道,这个问题在这里已经得到了很多回答,相信我,我已经尝试了很多方法来解决这个问题,但是它一次又一次地出现 所以,基本上,我正在尝试改变,例如,我的游戏中的钱,从一个不同的脚本 但我一点击按钮,就会收到这个错误消息。我认为我在这里做了一些根本错误的事情,但这也发生在我的记分脚本中,但无论如何这仍然有效。。。但这里有一个错误:Unity C#NullReferenceException,c#,unity3d,C#,Unity3d,我知道,这个问题在这里已经得到了很多回答,相信我,我已经尝试了很多方法来解决这个问题,但是它一次又一次地出现 所以,基本上,我正在尝试改变,例如,我的游戏中的钱,从一个不同的脚本 但我一点击按钮,就会收到这个错误消息。我认为我在这里做了一些根本错误的事情,但这也发生在我的记分脚本中,但无论如何这仍然有效。。。但这里有一个错误: NullReferenceException: Object reference not set to an instance of an object Score.Re
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<GameManager>();
score = 0;
gamemanag.ResetQuestions();
}
void ResetScore()
{
GameManager gamemanag=GetComponent();
得分=0;
gamemanag.ResetQuestions();
}
脚本2:
public void ResetQuestions()
{
unansweredQuestions = questions.ToList<Question>();
}
public void ResetQuestions()
{
未回答的问题=问题。ToList();
}
这就是记分脚本,因为它有点干净。这并没有真正的工作,因为它应该以及我不知道为什么
最后,我将完整的代码发布在pastebin上
如果你能帮忙,那就太好了
脚本1:
void ResetScore()
{
GameManager gamemanag = GetComponent<GameManager>();
score = 0;
gamemanag.ResetQuestions();
}
脚本2:任何对象都可以为空 只需检查您的代码:
GetComponent<GameManager>();
GetComponent();
不能给你任何游戏经理
questions.ToList<Question>();
questions.ToList();
或者您的列表未初始化。用以下方法修复它:
unansweredQuestions = new List<Question>();
未回答的问题=新列表();
您需要直接调试代码,或者只需检查!=空有多种情况:
DisplayScore
中,您正在访问scoreText
领域如果没有,则会抛出一个NullReferenceException
把它放在检查器里ResetScore
中,您将获得
GameManager
实例。调用ResetQuestions
将抛出
NullReferenceException如果包含Score
脚本的游戏对象也不包含GameManager
脚本GameManager
的Start
中,如果您没有在检查器中设置任何问题,您可能会得到NullReferenceExceptionSetCurrentQuestion
中有一个off by one错误。基本上,如果没有问题,你会得到一个从0到0的随机数。在这种情况下,唯一有效的结果是0。然后,您将访问索引为0的问题。但不会有。(这会引发一个索引自动失效异常)如您所见,您的许多语句可能会导致NullReferenceException。我们无法告诉你问题在哪里,因为它可能在很多地方。最好是调试代码并检查试图访问的变量的空值
ResetScore()
引发NullReferenceException
的唯一方法是如果GetComponent()
返回null
。这可能取决于配置。这让我觉得问题不在你的代码中,而在你的配置中,这不是你问题的一部分。谢谢你的回答!我在ResetScore中将其更改为if(score!=0)score=0;所以我想第一名出局了。我仍然得到错误。我在所有地方都设置了记分文本,所以我想第二名也不在了。我也设置了问题,所以第四个问题也被排除在外。第五,我已经将范围从0设置为所有未回答问题的数量,上面我已经检查了是否还有未回答的问题,如果没有,我已经刷新了列表。所以我不认为这是个问题。我没有任何未分配的字段,所以它必须是3。你的意思是,我必须将GameManager脚本添加到每个有分数脚本的游戏对象中吗?我需要填写两次问题,不是吗?GetComponent会在当前游戏对象中搜索正确的组件。如果您不知道组件在哪里,可以使用静态GameObject.GetComponent在场景中搜索。我现在无法测试它,因此方法名可能略有不同。@t方法名为:“GameObject.FindObjectOfType()”