如何在Unity(5.6.0)中访问文本字段的值?

时间:2017-04-16 20:03:12

标签: javascript c# unity5 unity3d-2dtools

我正在努力创建一个使用Unity的应用,每次我尝试谷歌一个问题时,我会得到旧的答案或答案,这些答案或答案都不起作用。

我在团结等级中得到的是

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

我需要通过单击其中一个按钮来访问和更改/替换Text 1和Text 2面板中的字符串。我从搜索结果中尝试的每种方法都失败了。

我想要做的是:如果你在SubPanela中按下Button1,它应该取Text1中的字符串,将其解析为int,然后递增它。同时,它应该将Text中的字符串解析为int并递减它。

我的问题是:如何访问文本中的字符串和Text1?

2 个答案:

答案 0 :(得分:1)

您应该做的是在要更改文本的类中(或者单击按钮上调用的函数所在的位置)对Text元素进行公共引用。例如:

using UnityEngine.UI;

public class MyClass : MonoBehavior {
    public Text MyTextField;

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

答案 1 :(得分: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将更加健壮。