2015-07-04 31 views
0

在我的2D項目中,我在代碼中創建了一個畫布和一個按鈕。我想在代碼中設置按鈕的文本,但經過無數次嘗試後,我似乎無法做到這一點。使用UnityScript創建的Unity 5更改按鈕文本

我UnityScript代碼:

#pragma strict 

var loginButton : UnityEngine.UI.Button; 

function Start() { 
    var canvas = new GameObject ("canvas", Canvas); 

    var instance : UnityEngine.UI.Button = Instantiate(loginButton); 


    instance.GetComponent(UnityEngine.UI.Text).text = "login"; //Error below 


    instance.transform.position = Vector2(0,0); 
    instance.transform.SetParent(canvas.transform); 

} 

這提供了一個錯誤

「的NullReferenceException:對象沒有設置爲一個對象 GameLogicLogin.Start(的實例)(在資產/ GameLogicLogin.js: 11)「

--------------------------------編輯---------- -----------------------------

g頂層結構看起來像這樣:http://puu.sh/iMYe6/4f4a8f545c.png 底部左側是預製腳本I鏈接。

以下行不會導致錯誤,並且似乎會更改文本,但更改不會顯示在遊戲中,原始文本也不會分配給預製中的「文本」。

instance.GetComponentInChildren(UnityEngine.UI.Text).text = "login"; 

回答

1

您實例化一個UnityEngine.UI.Button,不具有的成分爲UnityEngine.UI.Text因此錯誤。

你有什麼理由爲什麼你要實例化那個對象?

如果您在編輯器中一個遊戲對象loginButton鏈接,我想你是,你應該做這樣的事情:

var comps = loginButton.gameObject.GetComponentsInChildren(UnityEngine.UI.Text); 
comps[0].text = "login"; 
+0

在編輯器中,我連接了一個按鈕預製件,該按鈕有一個文本元素作爲孩子。不應該在這種情況下的按鈕有一個UnityEngine.UI文本?我將該行更改爲「instance.GetComponentInChildren(UnityEngine.UI.Text).text =」login「;」它不會給出錯誤並記錄它說文本被改變了。儘管如此,它在遊戲中並沒有改變。 – Waltari

+0

當您使用實例化時,您創建一個新的對象。這與您在預製中鏈接的不同。你應該沒有必要實例化。閱讀完您的層次結構後,我更新了答案。 –

2

如果你想建在統一的編輯器,你可以在你的按鈕輕易改變其文本在這樣的腳本:

var button = GameObject.Find("buttonObjectName").GetComponent<Button>(); 
button.GetComponentInChildren<Text>().text = "What ever you like"; 

我想你可以很容易地調整這個適合你的需要沒有被勺子餵養。