Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity C#NullReferenceException_C#_Unity3d - Fatal编程技术网

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>();
未回答的问题=新列表();

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

有多种情况:

  • (如果分数=0,为什么要将分数设置为0?您可以直接离开 其他人都走开了。)

  • DisplayScore
    中,您正在访问
    scoreText
    领域如果没有,则会抛出一个NullReferenceException 把它放在检查器里

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

  • GameManager
    Start
    中,如果您没有在检查器中设置任何问题,您可能会得到NullReferenceException

  • 您的
    SetCurrentQuestion
    中有一个off by one错误。基本上,如果没有问题,你会得到一个从0到0的随机数。在这种情况下,唯一有效的结果是0。然后,您将访问索引为0的问题。但不会有。(这会引发一个索引自动失效异常

  • 如果未在检查器中分配NullReferenceException,则任何私有[SerializeField]字段都可能引发该异常


  • 如您所见,您的许多语句可能会导致NullReferenceException。我们无法告诉你问题在哪里,因为它可能在很多地方。最好是调试代码并检查试图访问的变量的空值

    ResetScore()
    引发
    NullReferenceException
    的唯一方法是如果
    GetComponent()
    返回
    null
    。这可能取决于配置。这让我觉得问题不在你的代码中,而在你的配置中,这不是你问题的一部分。谢谢你的回答!我在ResetScore中将其更改为if(score!=0)score=0;所以我想第一名出局了。我仍然得到错误。我在所有地方都设置了记分文本,所以我想第二名也不在了。我也设置了问题,所以第四个问题也被排除在外。第五,我已经将范围从0设置为所有未回答问题的数量,上面我已经检查了是否还有未回答的问题,如果没有,我已经刷新了列表。所以我不认为这是个问题。我没有任何未分配的字段,所以它必须是3。你的意思是,我必须将GameManager脚本添加到每个有分数脚本的游戏对象中吗?我需要填写两次问题,不是吗?GetComponent会在当前游戏对象中搜索正确的组件。如果您不知道组件在哪里,可以使用静态GameObject.GetComponent在场景中搜索。我现在无法测试它,因此方法名可能略有不同。@t方法名为:“GameObject.FindObjectOfType()”