在 Unity 中增加 InputField 列表
Growing InputField list in Unity
我需要统一实现输入字段,这些字段将根据列表中的元素动态添加。它应该根据地图中存在的对象增加 "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 );
}
我不确定它是否可能..欢迎任何帮助:)
谢谢!
这里最可靠的做法是使用布局组。这种方法有很多经过良好测试的功能。
首先添加一个父对象。并向其中添加一个 Vertical Layout Group
组件。我通过向蓝色面板添加红色面板来显示下面的层次结构。红色面板上是 Vertical Layout Group
。
在此示例中,我使用检查器手动添加了 4 个输入字段。注意这里的布局是自动的。我在下面包含了这个特定输入字段的设置,您将能够在检查器中进行试验,并很快看到各种选项的影响。
现在对于您的特定解决方案,您希望以编程方式而不是通过检查器添加项目。为此,您需要创建一个 GameObject 并引用包含布局组的对象。
程序化创作
下面的代码会将预制件列表添加到 class。 (在这种情况下,父 class 应该包含 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
字段)
我需要统一实现输入字段,这些字段将根据列表中的元素动态添加。它应该根据地图中存在的对象增加 "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 );
}
我不确定它是否可能..欢迎任何帮助:)
谢谢!
这里最可靠的做法是使用布局组。这种方法有很多经过良好测试的功能。
首先添加一个父对象。并向其中添加一个 Vertical Layout Group
组件。我通过向蓝色面板添加红色面板来显示下面的层次结构。红色面板上是 Vertical Layout Group
。
在此示例中,我使用检查器手动添加了 4 个输入字段。注意这里的布局是自动的。我在下面包含了这个特定输入字段的设置,您将能够在检查器中进行试验,并很快看到各种选项的影响。
现在对于您的特定解决方案,您希望以编程方式而不是通过检查器添加项目。为此,您需要创建一个 GameObject 并引用包含布局组的对象。
程序化创作
下面的代码会将预制件列表添加到 class。 (在这种情况下,父 class 应该包含 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
字段)