2017-03-07 33 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。我只是想添加一個重新啓動和一個遊戲結束消息。

編輯:試圖顯示文本與文本= GetComponent()不工作。什麼是另一種顯示實際工作的統一文本的方式?我也嘗試過GUIText,但是我無法在顯示屏上看到它。

+0

哪條線正好被扔在了錯誤?你確定它不是來自'isValidGridPos()'內嗎? – Serlite

+0

當我向「文本」添加消息時。 – ffuentes

+2

我明白了,你已經編輯了代碼。好吧,你確定你有一個Text組件附加到這個腳本也附加到的對象上嗎? – Serlite

回答

-2

您是否在運行時檢查編輯器視圖?
不要在Strar()中使用destroy。 您可以設置像Destroy(gameobject,5.0f)這樣的延遲,並在其他一些回調函數(例如Action)中使用它。

現在你只需在初始化之後摧毀整個gameobject的所有腳本和組件(包括文本)。如果它從一開始就在場景中,那麼只要按下Play,它就會被銷燬。

Start()只運行一次所以isValidGridPos()在做什麼?

0

我已經看了看教程,他們有以下代碼:

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

這工作,因爲它打印的調試日誌控制檯。您顯然想要捕獲並將其打印在屏幕上。這需要將畫布和文本組件添加到腳本所在的gameobject中。在這裏聲明一個文本變量不會在遊戲對象中添加一個,它必須在統一檢查器中完成。

下面的代碼:

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

不應該在這裏,因爲這個對象已經被銷燬該代碼將除非你按住按鍵後,該對象被創建在同一幀形同虛設。它應該在另一個不會被銷燬的遊戲對象的腳本上,它將等待一個r鍵來重新加載關卡。

0

如果text = GetComponent<Text>();不起作用,這可能是因爲您的文本組件不在您的腳本所附帶的同一個gameobject上。

在Unity編輯器,檢查文​​本組件和腳本在同一個遊戲對象