好的问题是,每当我想使用UI文本时,我需要将我的int值转换为字符串,所以我创建了一个方法,只需要使用Text变量并赋予它我所拥有的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()用于首先在控制台中进行测试,每当我编译游戏时,它甚至不会在控制台中打印统计数据。
有人问我是否已经为Text变量赋值,不是我没有,我所做的就是将它们初始化为:
public Text strengthText;
public Text dexterityText;
依此类推,我是否需要将它们变成某种东西以避免错误?
答案 0 :(得分:1)
有时,在升级项目时,会丢失场景中的引用。在这种情况下,您似乎丢失了与Text
变量相关联的textVar
引用。只需从编辑器中重新拖动文本组件textVar
插槽即可。
我通常从脚本执行此操作,以便更新不会导致任何这些问题:
textVar = GameObject.Find("YourTextObject").GetComponent<Text>();
修改强>:
根据您编辑的问题,它仍然是同样的问题。从编辑器重新分配所有文本变量,例如strengthText
,dexterityText
,intelligenceText
,wisdomText
....他们在更新后丢失了参考。您也可以使用上面的代码在Start函数中执行此操作。