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
C# 我将Unity从5.3升级到5.6,现在我得到了空引用异常_C#_Unity3d_Nullreferenceexception - Fatal编程技术网

C# 我将Unity从5.3升级到5.6,现在我得到了空引用异常

C# 我将Unity从5.3升级到5.6,现在我得到了空引用异常,c#,unity3d,nullreferenceexception,C#,Unity3d,Nullreferenceexception,好的,问题是每当我想使用UI文本时,我都需要将我的int值转换为string,所以我制作了一个方法,简单地获取文本变量,并将我得到的int变量的值赋予它,以便UI文本对象可以使用它 看起来是这样的: void setText(Text textVar, int valueVar) { textVar.text = valueVar.ToString(); } 很简单吧?好。。我得到了一个错误: NullReferenceException: Object reference not

好的,问题是每当我想使用UI文本时,我都需要将我的int值转换为string,所以我制作了一个方法,简单地获取文本变量,并将我得到的int变量的值赋予它,以便UI文本对象可以使用它

看起来是这样的:

void setText(Text textVar, int valueVar)
{

    textVar.text = valueVar.ToString();

}
很简单吧?好。。我得到了一个错误:

NullReferenceException: Object reference not set to an instance of an object
UnityStandardAssets.Characters.FirstPerson.FirstPersonController.setText (UnityEngine.UI.Text textVar, Int32 valueVar) (at Assets/Standard Assets/Characters/FirstPersonCharacter/Scripts/FirstPersonController.cs:1617)
UnityStandardAssets.Characters.FirstPerson.FirstPersonController.generateRandomStat (Int32 stat) (at Assets/Standard Assets/Characters/FirstPersonCharacter/Scripts/FirstPersonController.cs:318)
UnityStandardAssets.Characters.FirstPerson.FirstPersonController.charCram () (at Assets/Standard Assets/Characters/FirstPersonCharacter/Scripts/FirstPersonController.cs:221)
UnityStandardAssets.Characters.FirstPerson.FirstPersonController.Start () (at Assets/Standard Assets/Characters/FirstPersonCharacter/Scripts/FirstPersonController.cs:1715)
因此,问题似乎是在我创建随机值的方法中产生的,尽管就像我之前说过的那样,这是stat生成器的代码片段:

    //method to generate a random stat from 3 to 18
    public void generateRandomStat(int stat)
    {
        int rng = Random.Range(3, 18);
        switch (stat)
        {
            case 0:
                strength = rng;
                setText(strengthText, strength);
                print(strength);
                break;
            case 1:
                dexterity = rng;
                setText(dexterityText, dexterity);
                print(dexterity);
                break;
            case 2:
                intelligence = rng;
                setText(intelligenceText, intelligence);
                print(intelligence);
                break;
            case 3:
                wisdom = rng;
                setText(wisdomText, wisdom);
                print(wisdom);
                break;
            case 4:
                constitution = rng;
                setText(constitutionText, constitution);
                print(constitution);
                break;
            case 5:
                charisma = rng;
                setText(charismaText, charisma);
                print(charisma);
                break;
            case 6:
                luck = rng;
                setText(luckText, luck);
                print(luck);
                break;
            case 7:
                willpower = rng;
                setText(willpowerText, willpower);
                print(willpower);
                break;

        }
    }
在使用UI元素之前,每个案例结尾处的print()用于在控制台中进行第一次测试,每当我编译游戏时,它甚至不会在控制台中打印统计数据

有人问我是否为文本变量赋值,没有,我所做的只是如下初始化它们:

public Text strengthText;
public Text dexterityText;

依此类推,我是否需要将它们设置为避免错误的内容?

有时升级项目时,会丢失场景中的引用。在本例中,您似乎丢失了连接到
textVar
变量的
Text
引用。只需从编辑器的
textVar
槽中重新拖动文本组件即可

我通常从脚本执行此操作,以便更新不会导致以下任何问题:

textVar = GameObject.Find("YourTextObject").GetComponent<Text>();
textVar=GameObject.Find(“YourTextObject”).GetComponent();
编辑


经过编辑的问题仍然是同一个问题。从编辑器中重新分配所有文本变量,例如
strenghtext
dexterityText
intelligenceText
wisdomText
。。。。他们在更新后丢失了参考资料。您也可以使用上面的代码在Start函数中执行此操作。

您确定您实际上是在传递
Text
类的实例,而不仅仅是null吗?传递
textVar
的是null,您需要反向跟踪代码,查看该值从何处提交。这就是问题所在,这就是你需要向我们展示的代码。是的,我进一步检查了调试窗口,似乎空值来自我生成值的地方。我将编辑帖子!编辑后,现在您可以查看生成值的方法,但它以前是有效的!我不知道更新后发生了什么。现在指出哪一行是第318行(从错误消息
UnityStandardAssets.Characters.FirstPerson.FirstPersonController.GeneraterDomainStat(Int32 stat)(在Assets/Standard Assets/Characters/FirstPersonCharacter/Scripts/FirstPersonController.cs:318)
)并查看哪个文本为空,继续向后追踪,直到你看到变量被分配到哪里。谢谢你提供的信息,我会试试看它是否能修复它!这就是修复方法,非常感谢!就像你说的,他们失去了参考资料!现在我在编辑中重新分配了他们,他们正在按计划工作,非常感谢,你不知道我是如何在愤怒中把头撞在键盘上的,你是上帝派来的,回答得很好,上帝保佑你,我的朋友。