2013-02-07 127 views
6

我是NGUIunity 3d的新手。 我在ui根中有兩個面板。其名稱爲firstPanelsecondPanel。在場景中禁用secondPanel。在firstPanel我有這麼多的按鈕,其中一個是play按鈕,即圖像按鈕。雖然點擊play按鈕,firstPanel應該得到隱藏secondPanel應該顯示。我ADDE一個新的腳本play按鈕和編寫的代碼在它面板隱藏並顯示在NGUI中

void OnClick(){ 
    GameObject panel2 = GameObject.Find("secondPanel"); 
    NGUITools.SetActive(panel2,true);  
    GameObject panel1 = GameObject.Find("firstPanel");   
    NGUITools.SetActive(panel1,false); 

} 

但我得到這個錯誤"NullReferenceException"ngui哪個腳本我必須編輯,我該怎麼做?請幫我解決這個問題 在此先感謝。

+1

在哪一行你會得到異常? – Kay

+0

GameObject panel2 = GameObject.Find(「secondPanel」);在這裏,我收到錯誤 – Sona

回答

8

如果您的面板命名爲Panel1和Panel2,則不會通過使用GameObject.Find(「secondPanel」)和GameObject.Find(「firstPanel」)找到它們。如果「Panel1的」和「是Panel2」是在遊戲場景中唯一的名字(沒有其他Panel1的或者是Panel2),那麼你可以嘗試使用

void OnClick(){ 
    GameObject panel2 = GameObject.Find("Panel2"); 
    NGUITools.SetActive(panel2,true);  
    GameObject panel1 = GameObject.Find("Panel1");   
    NGUITools.SetActive(panel1,false); 

} 
+0

對不起。它工作不正常。第二面板在場景中不活動。所以我無法展示它。 – Sona

+3

所以我認爲讓他們作爲參考將工作。試試這個: 添加「public GameObject panel2;」在腳本中(在類體中,例如在OnClick上方)。然後選擇您的播放按鈕,您將在Inspector的腳本中看到名爲「Panel2」的字段。將secondPanel從遊戲場景拖到該字段。然後你可以刪除GameObject行並直接使用panel2。 – onevcat

+0

爲什麼使用GameObject.Find和NGUITools。SETACTIVE?這是如此之慢...... 沒有辦法只是不渲染? – GeekPeek

3

GameObject.Find(「東西」)無法找到任何禁用的遊戲對象,所以你不能這樣使用。您可以嘗試添加反射到您的按鈕代碼:

public GameObject pannel1 = null; 
public GameObject pannel2 = null; 

並將它們設置到場景編輯器窗口中的右側面板。

另一種方式,首先你需要保持你的兩個積極的面板在您的場景,然後將代碼添加到您的按鈕這樣的腳本:

private GameObject panel1 = null; 
private GameObject panel2 = null; 
void Start() 
{ 
    panel1 = GameObject.Find("Panel1"); 
    panel2 = GameObject.Find("Panel2"); 
} 

void OnClick() 
{ 
    panel2.SetActiveRecursively(true); 
    panel1.SetActiveRecursively(false); 
} 

GameObject.Find(字符串名稱)的功能是不是很有效在Unity3D中,所以不要嘗試在Update()或每次單擊按鈕時使用它。

0

您不能使用GameObject.Find()查找禁用的遊戲對象,它返回null;

1

我知道這個線程是舊的,但如果其他人有一個問題,當它們處於非活動狀態時調用面板,您可以預製面板並使用NGUITools.AddChild來調用面板。它看起來像這樣。

public GameObject parent; 
public GameObject child; 

void Spawn() { 

NGUITools.AddChild (parent, child); 

} 

將您的UIRoot父(或任何你想添加的面板),和您的面板在編輯器中分配給孩子,就這麼簡單!我希望這可以幫助別人,這是第一次使用NGUI時的常見問題。

快樂編碼:)