2016-10-31 117 views
0

我在unity3d中遇到了一個問題,那裏有一個gameobject,它是一個簡單的多維數據集,它附有一個名爲Material的組件,它是紅色的。此外還有一個腳本附加到這個正在執行左鍵點擊事件的立方體上,即它將材料的顏色改變爲綠色。腳本 工作正常,但我想在場景中有canvasgameobject這是默認無效。 Picture我想要 當材質顏色爲綠色時激活此gameobject,或當顏色爲紅色時停用。我正在使用 函數GameObject.Find("Canvas"),但錯誤即將到來。此外,我嘗試通過調用此功能GameObject.FindWithTag("Canvas")使用此畫布上的標籤來解決此問題,但沒有任何效果。同樣的錯誤即將到來。Gameobject在鼠標點擊時不活躍

NullReferenceException: Object reference not set to an instance of an object

代碼:

public class Cube : MonoBehaviour { 

    [SerializeField] private bool check; 


    void OnMouseDown() { 


     if (!check) { 

      gameObject.GetComponent<Renderer>().material.color = Color.green; 


      GameObject.Find("Canvas").SetActive(true); 

      check = true; 

     } else if (check) { 

      gameObject.GetComponent<Renderer>().material.color = Color.red; 

      check = false; 

     } 

    } 


} 

回答

0

GameObject.Find當遊戲對象被禁止是行不通的。從你問題的截圖中,Canvas GameObject被禁用。

這就是爲什麼你越來越:NullReferenceException: Object reference not set to an instance of an object

爲它創建一個公共變量並拖動畫布存在。

[SerializeField] 
private bool check; 

public GameObject myCanvas; 

void OnMouseDown() 
{ 
    if (!check) 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.green; 
     myCanvas.SetActive(true); 
     check = true; 
    } 
    else if (check) 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.red; 
     check = false; 
    } 
} 
+0

好吧,我明白了!我可以只激活gameobject的孩子嗎? – hamel123

+0

您可以不活動任何遊戲對象,但GameObject.FindWithTag不適用於隱藏的對象或隱藏父對象的對象。當它處於活動狀態時,您需要獲取對象的引用,或者像我在回答中那樣通過將引用拖動到對象中來執行它。 – Programmer