2017-06-05 83 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非常感謝你!不知何故,像你說他們失去了他們的參考!現在我已經將他們重新分配到他們正在按預期工作的編輯中,謝謝很多人,你根本不知道我是如何在憤怒中砸我的頭和鍵盤,並且你是一個真棒回答的上帝,上帝保佑你我的朋友。 –