我需要实现统一的输入字段,这些输入字段将根据列表中的元素动态添加。它应该根据地图“m_myClassMap”中存在的对象增加。
此外,是否可以获取现有输入字段的位置,布局设置(即x,y,z坐标)?我希望这些信息能够计算新输入字段的位置。
例如
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 );
}
我不确定它是否可能。欢迎任何帮助:)
谢谢!
答案 0 :(得分:2)
这里最强大的功能是使用布局组。这种方法充分测试了很多功能。
首先添加一个父对象。并为其添加Vertical Layout Group
组件。我通过向蓝色面板添加红色面板显示了下面的层次结构。在红色面板上是Vertical Layout Group
。
在此示例中,我使用了检查器手动添加4个输入字段。请注意,此处的布局都是自动的。我已经在下面的特定输入字段中包含了设置,您将能够在检查器中进行实验并快速查看各种选项的影响。
现在,对于您的特定解决方案,您希望以编程方式而不是通过检查器添加项目。为此,您将要创建一个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
字段)