2017-05-14 18 views
1

次のコードがあります。エディタのテキストコンポーネントをno_livesに参照しました。 gamemanager(シングルトン)は以前にシーンをインスタンス化しています。 debug.log()はコンソールに5を表示します。しかし、テキストを設定しようとすると、参照はオブジェクトのインスタンスに設定されません。何故ですか?Unity3D C# - テキストUI

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 

public class level1_script : MonoBehaviour { 

    public Text no_lives; 

    // Use this for initialization 
    void Start() { 
     no_lives = GetComponent<Text>(); 
    } 

    // Update is called once per frame 
    void Update() { 
     int lives_n = gamemanager.lives_f(); 
     Debug.Log (lives_n); 
     no_lives.text = lives_n + " x"; 
    } 
} 
+0

'no_lives = GetComponent work – Dawnkeeper

+0

'Start()'が 'Update'の前に呼び出され、GetComponentが実際に値を' no_lives'に設定していることは確かですか?また、 'lives_n'を' lives_n.ToString()+ "x" ' – Nkosi

答えて

3

あなたはStart()Update前に呼び出されたことを特定され、GetComponentが実際にno_livesに値を設定していますか?

もしそうでなければ、防御的にコードしてください。またlives_nを文字列lives_n.ToString() + " x"に変換するか、フォーマットを使用する必要があります。

void Update() { 
    int lives_n = gamemanager.lives_f(); 
    Debug.Log (lives_n); 
    if(no_lives != null) { 
     no_lives.text = string.Format("{0} x", lives_n); 
    } 
} 

EDIT:

しかし、私は参照が にオブジェクトのインスタンスを設定されていないことを取得テキストを設定してみてください。あなたがGetComponent<Text>‌​()を行うとき、それはあなたのlevel1_scriptスクリプトが接続されている、同じゲームオブジェクトにTextコンポーネントのインスタンスを探しますのでです

。あなたのlevel1_scriptスクリプトは、あなたの現在のコードは動作するはずにatachedされるゲームオブジェクト

.Attach Textコンポーネント:

は、次の2つの選択肢があります。

すでに別のゲームオブジェクトに添付Textコンポーネントを持っている.IF、のオブジェクトは、その後にそれにGetComponentを実行「のMyText」を見つけるためにGameObject.Findを使用し、「のMyText」と呼ばれるとしましょうTextコンポーネントを入手してください。

no_lives = GameObject.Find("MyText").GetComponent<Text>‌​() 

は編集:

まあ、テキストとスクリプトの両方が同じオブジェクトに添付されている prntscr.com/f7p7vx

それはおそらく、複数のゲームオブジェクトに取り付けられ、他のゲームオブジェクトがないですそれに添付されたTextスクリプトがありません。

資産に行き、level1_scriptスクリプトを選択 - その後、他のオブジェクトから複製スクリプトを削除>シーンでの参照の検索。

+0

という文字列に変換する必要があります。テキストとスクリプトの両方が同じオブジェクトに添付されています。http://prntscr.com/f7p7vx – Stefan

+0

@Stefanそうだと答えたら – Programmer

1

デバッグログにスクリプトログ '5'が記録されているので、変数lives_nが正しく使用されているようです。 私の推測では、コンポーネント「no_lives」が満たされていないことが原因です(「参照はオブジェクトのインスタンスに設定されていません」というエラーが発生します) UI Textオブジェクトにスクリプトを追加することをお勧めしますあなたのシーンでは、この方法でスクリプトはそのオブジェクトの "Text"コンポーネントを見つけます。

オブジェクトとコンポーネントの違いを知ることは重要です。なぜなら、オブジェクトとコンポーネントの両方が単一性の重要な部分であるからです。オブジェクトは、キューブ、カメラ、そのようなもののような、あなたのシーンの「もの」です。一方、コンポーネントはオブジェクトの一部であり、そのオブジェクトのプロパティを定義します。たとえば、カメラオブジェクトにはカメラコンポーネントがあり、カメラコンポーネントはカメラコンポーネントを使用して実際にユーザーが見ることができます。 GetComponent <()メソッドは、スクリプトがアタッチされているオブジェクトのテキストコンポーネントを検索します。

希望すると便利です。 (これを置いた他のオブジェクトからスクリプトを削除することを忘れないでください。そうでなければエラーが発生します)

関連する問題