在Unity中增加InputField列表

时间:2017-02-05 20:04:51

标签: c# unity3d unity5

我需要实现统一的输入字段,这些输入字段将根据列表中的元素动态添加。它应该根据地图“m_myClassMap”中存在的对象增加。

此外,是否可以获取现有输入字段的位置,布局设置(即x,y,z坐标)?我希望这些信息能够计算新输入字段的位置。Something like this just growing as per the map size on the fly

例如

 List<InputField> inputFieldList = new List<InputField>();

 foreach (MyClass myClassObj in m_myClassMap.Values)
 {
        // code below is just statement and is syntactically wrong
        InputField newInputField = new InputField();
        // Add properties like size or layout
        // set the text
        inputFieldList.Text = myClassObj.getInputBoxString();
        inputFieldList.Add(newInputField );
 }

我不确定它是否可能。欢迎任何帮助:)

谢谢!

1 个答案:

答案 0 :(得分:2)

这里最强大的功能是使用布局组。这种方法充分测试了很多功能。

首先添加一个父对象。并为其添加Vertical Layout Group组件。我通过向蓝色面板添加红色面板显示了下面的层次结构。在红色面板上是Vertical Layout Group

enter image description here

在此示例中,我使用了检查器手动添加4个输入字段。请注意,此处的布局都是自动的。我已经在下面的特定输入字段中包含了设置,您将能够在检查器中进行实验并快速查看各种选项的影响。

enter image description here

现在,对于您的特定解决方案,您希望以编程方式而不是通过检查器添加项目。为此,您将要创建一个GameObject,其中包含对包含布局组的对象的引用。

程序创作

以下代码将为类添加预制件列表。 (在这种情况下,父类应包含Vertical Layout Group组件)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; 

public class LayoutGroupExample : MonoBehaviour {

    public GameObject layoutObject; 
    public GameObject inputFieldPrefab;     

    void AddInputFields(){
        var inputFieldList = new List<string>(){"First Name", "Last Name", "Email"}; 

        foreach(var fieldName in inputFieldList){
            GameObject go = GameObject.Instantiate(inputFieldPrefab); 
            go.name = fieldName; 
            go.transform.SetParent(layoutObject.transform); 
            var inputField = go.AddComponent<InputField>(); 
        }
    }
}

在检查器中,将包含布局组的对象分配给layoutObject字段。

将预制件(应该是Input Field个对象)分配给inputFieldPrefab字段)

enter image description here