2017-03-07 11 views
0

テキストを表示することができず、メソッドが実行されるとNullReferenceExceptionが発生します。それに加えて、コードは実行しなくてもかまわない。表示するユニティ2Dのテキストを取得する方法

// Use this for initialization 
void Start() 
{ 
    // Default position not valid? Then it's game over 
    if (!isValidGridPos()) 
    { 
     Text text; 
     text = GetComponent<Text>(); 

     text.text = "Game Over"; 
     Destroy(gameObject); 
     if (Input.GetKeyDown(KeyCode.R)) 
     { 
      SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); 
     } 

    } 
} 

コードはthis tutorialです。私は再起動とゲームオーバーメッセージを追加したかっただけです。

EDIT:text = GetComponent()でテキストを表示しようとしていません。実際に機能する単一性についてのテキストを表示する別の方法は何ですか?私もGUITextを試しましたが、私はそれをディスプレイ上に見えるようにすることはできません。

+0

が正確に誤りがライン上でスローされているのと同じゲームオブジェクト上にあることを確認? 'isValidGridPos()'の中から来ていないと確信していますか? – Serlite

+0

「テキスト」にメッセージを追加するとき。 – ffuentes

+2

私はあなたがコードを編集したのを見ました。まあ、このスクリプトも添付されているオブジェクトにTextコンポーネントが添付されていますか? – Serlite

答えて

-2

実行中にエディタビューを調べましたか?
Strar()でdestroyを使用しないでください。 Destroy(gameobject、5.0f)のように遅延を設定し、他のコールバック関数(例:Action)で使用することができます。

これで、ゲームオブジェクト全体がスクリプトとコンポーネント(テキストを含む)を初期化した直後に破棄します。それが最初からシーンに入っている場合は、Playを押すとすぐに破壊されます。

Start()は1回だけ実行されるので、isValidGridPos()は何をしていますか?

0

私は、チュートリアルを見てきましたし、彼らは次のコードを持っている:それはデバッグログコンソールに出力しますので、これは動作します

if (!isValidGridPos()) { 
    Debug.Log("GAME OVER"); 
    Destroy(gameObject); 
} 

を。あなたは明らかにそれをキャプチャして画面に表示したいと思っています。これには、スクリプトが存在するゲームオブジェクトにキャンバスとテキストコンポーネントが追加されている必要があります。ここでテキスト変数を宣言すると、ゲームオブジェクトにテキスト変数が追加されることはありません。統一インスペクタで行う必要があります。

次のコード:このオブジェクトがすでにオブジェクトが作成されていることを同じフレームにキーを押していない限り、このコードは役に立たなくなります破壊されてしまうよう

if (Input.GetKeyDown(KeyCode.R)) 
    { 
     SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); 
    } 

が、ここではすべきではありません。代わりに、破壊されないゲームオブジェクト上の別のスクリプト上にあるべきであり、レベルをリロードするためにrキーを待つでしょう。

0

text = GetComponent<Text>();が動作していない場合は、テキストコンポーネントがスクリプトが接続されているゲームオブジェクトにないためです。ユニティエディタで

、テキストコンポーネントとスクリプトが

関連する問題