2017-04-16 41 views
0

我正在用Unity創建一個應用程序,每次我嘗試谷歌問題時,我都會得到舊的答案或答案,這些問題無效。如何訪問Unity(5.6.0)中文本字段的值?

我在我的單位層次得到了什麼是

Canvas > 
    Panel > 
    Text 
    SubPanela > 
     Button1 
     Button2 
     Text1 
    SubPanelb > 
     Button1 
     Button2 
     Text2 

我需要訪問和更改/用一個按鈕的點擊替換字符串中包括文本1和文本2板。我從搜索結果中嘗試的每種方法都失敗了。

我想要做的是這樣的:如果您在SubPanela中按Button1它應該採取Text1中的字符串,解析它爲int,並增加它。同時,它應該將Text中的字符串解析爲一個int並將其遞減。

我的問題是:我如何訪問文本和Text1中的字符串?

回答

1

你應該做的是從你想要改變文本的位置(或者在點擊按鈕時調用的函數所在的位置)對類中的Text元素進行公共引用。例如:

using UnityEngine.UI; 

public class MyClass : MonoBehavior { 
    public Text MyTextField; 

    public void ButtonClicked() { 
     MyTextField.text = "random new text"; 
    } 
} 
+0

有沒有辦法讓它引用一個特定的文本,還是隻引用腳本所粘貼的那個?我寧願有一個函數可以鏈接到與按下按鈕相關的文本(所有的子面板都具有相同的功能),使用面板中相同的常見文本,子面板都在裏面。 – WMS

+0

您可以爲每個文本創建一個屬性,並在各自的功能中引用它們。 – mcjcloud

0

不是存儲到每個文本字段的引用,因爲mcjcloud的回答說,你也可以瀏覽場景層次。

假設這個腳本連接到Canvas對象...

using UnityEngine; 
using UnityEngine.UI; 

public class MyClass : MonoBehavior { 
    public void ButtonClicked() { 
     Transform t = transform.GetChild(0); //Panel 
     Transform ta = t.FindChild("SubPanela"); 
     Text txt1 = ta.FindChild("Text1").GetComponent<Text>(); 
     Transform tb = t.FindChild("SubPanelb"); 
     Text txt1 = ta.FindChild("Text2").GetComponent<Text>(); 
    } 
} 

如果腳本連接到一個按鈕,你可以使用transform.parent向上導航。

如果您認爲合適,您可以使用FindChild(...)GetChild(...)。後者速度更快,但如果您的層次結構可變,則FindChild將更加健壯。