2017-06-05 9 views
0

問題は、UIテキストを使用するときはいつでもint値を文字列に変換する必要があるため、単にText私が持っていたInt変数の値をUIテキストオブジェクトで使用できるようにしました。Unityを5.3から5.6にアップグレードしました。現在、null参照例外が発生します。

それは次のようになります。

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; 

     } 
    } 

プリント()各ケースの端部には、私はそれもdoesntのコンソールで統計情報を印刷するゲームをコンパイルするたびにUI要素を、使用する前にコンソールで最初の試験に使用しました。 、

public Text strengthText; 
public Text dexterityText; 

というように、私は彼らがに何かに=にする必要があります:私はテキスト変数に値を割り当てられていた場合

誰かが私がしたすべては、次のようにそれらを初期化した、いや、私はhaventは、尋ねましたエラーを避ける?

+0

実際に 'Text'クラスのインスタンスを渡していて、nullだけではないのですか? – Serlite

+0

'textVar'がnullで渡されているときは、コードを後にして、その値がどこから来ているのかを確認する必要があります。それは問題がどこにあり、それが私たちに示す必要があるコードです。 –

+0

ええ、デバッグウィンドウをさらにチェックしたところ、null値はどこから値が生成されているのでしょうか投稿を編集してください! –

答えて

1

プロジェクトをアップグレードするときに、シーン内の参照が失われることがあります。この場合、textVar変数に接続されているTextの参照が失われたようです。エディターのtextVarスロットからテキストコンポーネントを単にドラッグし直してください。

は、私は通常、スクリプトからその更新は、これらの問題のいずれかが発生することはありませんんので、こと:

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

EDIT

編集した質問では、それはまだ、同じ問題です。 strengthTextdexterityTextintelligenceTextwisdomTextなど、エディタからすべてのテキスト変数を再割り当てします....更新後に参照が失われました。また、上記のコードを使用してStart関数で実行することもできます。

+0

情報ありがとうございます。 ! –

+0

これは本当にありがとうございました!どういうわけか彼らは彼らが参照を失ったと言うように!私は彼らが意図したとおりに働いているエディタにそれらを割り当て直したので、怒ってキーボードに頭をぶつけていて、あなたはすばらしい答えで神様です。 –

関連する問題