Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity 5中,如何从场景中的所有输入字段获取文本?_C#_User Interface_Unity3d_Input Field - Fatal编程技术网

C# 在Unity 5中,如何从场景中的所有输入字段获取文本?

C# 在Unity 5中,如何从场景中的所有输入字段获取文本?,c#,user-interface,unity3d,input-field,C#,User Interface,Unity3d,Input Field,现在,我的场景中有两个输入字段和一个按钮。单击按钮时,我希望检索两个输入字段的内容。我可以通过在按钮的点击功能上添加两次相同的脚本来分别获得每个脚本的内容。但是,我希望在只使用一个脚本的情况下获取两个输入字段 我试过使用GetComponents,但我想我不了解它是如何工作的。我假设GetComponents将获取场景中的所有输入字段并将它们保存到数组中。然后我可以循环遍历每个索引,并获得每个输入的文本属性。这是不对的吗 谢谢 您可以使用GetComponentsInChildren。。。将所有

现在,我的场景中有两个输入字段和一个按钮。单击按钮时,我希望检索两个输入字段的内容。我可以通过在按钮的点击功能上添加两次相同的脚本来分别获得每个脚本的内容。但是,我希望在只使用一个脚本的情况下获取两个输入字段

我试过使用GetComponents,但我想我不了解它是如何工作的。我假设GetComponents将获取场景中的所有输入字段并将它们保存到数组中。然后我可以循环遍历每个索引,并获得每个输入的文本属性。这是不对的吗


谢谢

您可以使用GetComponentsInChildren。。。将所有带有组件输入字段的游戏对象放入父游戏对象中,然后将脚本添加到父游戏对象中

然后做一些类似的事情:

List<string> textFromMyInputs = new List<string>();
 void GetAllTextFromInputFields()
    {

    foreach(InputField inputField in gameObject.GetComponentsInChildren<InputField>())
    {
        foreach (Text text in inputField.GetComponentsInChildren<Text>())
        {
            if (text.gameObject.name != "Placeholder")
                textFromMyInputs.Add(text.text);
        }
    }

    foreach (string s in textFromMyInputs)
    {
        Debug.Log(s);
    }
}
---编辑: 好的,我对输入字段做了一些调整。。。因此,如果您注意,您的inputfield有两个子对象,一个称为“占位符”,另一个称为“文本”,它们都有一个文本组件,因此您必须执行以下操作:

List<string> textFromMyInputs = new List<string>();
 void GetAllTextFromInputFields()
    {

    foreach(InputField inputField in gameObject.GetComponentsInChildren<InputField>())
    {
        foreach (Text text in inputField.GetComponentsInChildren<Text>())
        {
            if (text.gameObject.name != "Placeholder")
                textFromMyInputs.Add(text.text);
        }
    }

    foreach (string s in textFromMyInputs)
    {
        Debug.Log(s);
    }
}
List textFromMyInputs=new List();
void GetAllTextFromInputFields()
{
foreach(gameObject.GetComponentsInChildren()中的InputField InputField)
{
foreach(inputField.GetComponentsInChildren()中的文本)
{
如果(text.gameObject.name!=“占位符”)
textFromMyInputs.Add(text.text);
}
}
foreach(textFromMyInputs中的字符串s)
{
调试日志;
}
}

已经测试过并且对我有效……

画布不是已经是InputFields的父级了吗?我能把剧本放到画布上吗?另外,我得到一个错误,它是
Assets/Scripts/getContents.cs(11,85):错误CS0119:表达式表示“类型”,其中需要“变量”、“值”或“方法组”
是的,您可以将脚本放在画布中,并查看我在答案中编辑的新代码,它对我有效。