2017-06-05 81 views
0

好的问题是,无论何时我想使用UI文本,我需要将我的int值转换为字符串,所以我提出了一个方法,变量,并给它它的Int变量的值,因此它可以被UI文本对象使用。我将Unity从5.3升级到5.6,现在我得到空引用异常

它看起来像这样:

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) 

所以看起来在我创建随机值的方法产生的问题,但就像我说这个很好用上班前,这里是对统计的代码片段发生器:

//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元素,每当我编译游戏它不即使在控制台打印统计之前。

有人问我是否已经赋值给文本变量,没有我还没有,我所做的就是它们初始化如下:

public Text strengthText; 
public Text dexterityText; 

等等,做我需要让他们=要的东西避免错误?

+0

你确定你确实传入了一个'Text'类的实例,而不仅仅是null? – Serlite

+0

'textVar'被传递为null,您需要向后跟随代码并查看该值来自哪里。那就是问题所在,那就是你需要向我们展示的代码。 –

+0

是的,我进一步检查了调试窗口,似乎空值来自我生成的值生病编辑帖子! –

回答

1

有时在升级项目时,会丢失场景中的引用。在这种情况下,您看起来像丢失了与textVar变量连接的Text参考。只需从编辑器的textVar插槽中重新拖动文本组件即可。

我平时从脚本,以便更新不会造成任何的这些问题:

textVar = GameObject.Find("YourTextObject").GetComponent<Text>(); 

编辑

与您编辑的问题,它仍然是 - 同样的问题。重新分配编辑器中的所有文本变量,例如strengthText,dexterityText,intelligenceText,wisdomText ....他们在更新后失去了参考。您也可以使用上面的代码在启动功能中执行此操作。

+0

谢谢你的信息我会试试看它是否修复它! –

+0

这就是FIX非常感谢你!不知何故,像你说他们失去了他们的参考!现在我已经将他们重新分配到他们正在按预期工作的编辑中,谢谢很多人,你根本不知道我是如何在愤怒中砸我的头和键盘,并且你是一个真棒回答的上帝,上帝保佑你我的朋友。 –