【发布时间】:2016-02-21 22:02:23
【问题描述】:
我的游戏有多个用户同时登录。出现一个初始输入字段,其中的数量 输入用户,例如,数字“3”表示三个用户要登录。
为了响应输入的数字,我希望 C# 脚本创建输入字段,每个用户登录一个。
以下代码在运行时接受一个数字,然后尝试创建输入字段对象。 名为“nameInputField”的初始输入字段(接受数字)是使用统一编辑器手动添加的;它是画布的孩子。
using System;
using UnityEngine ;
using UnityEngine.UI ;
using UnityEngine.EventSystems ;
public class LoginWindow : MonoBehaviour
{
private InputField nameInputField = null; // Assign in editor
string placeHolderText ;
int NUsers ;
InputField[] IDField;
private void Start()
{
placeHolderText = nameInputField.placeholder.GetComponent<Text> ().text = "Number of users ...";
InputField.SubmitEvent submitEvent = new InputField.SubmitEvent();
submitEvent.AddListener(SubmitName); // Add listener to catch the submit
nameInputField.onEndEdit = submitEvent;
}
private void SubmitName(string number)
{
Int32.TryParse(number, out NUsers) ; // convert string to number
IDField = new InputField[NUsers] ;
Debug.Log ("IDField.Length = " + IDField.Length );
for (int i = 0 ; i < NUsers ; i++ ){
// problems here ! reference to IDField[i] generates an error !
} // end 'for'
} // end SubmitName
} // end LoginWindow
代码似乎创建了一个 InputField 数组; 在运行时,如果我输入“3”,我会收到消息“IDField.Length = 3”。 但是在任何地方都没有这些输入字段的迹象:无论是在层次结构、场景还是游戏中。 此外,我放在“if”块中的任何代码,引用“IDField”的元素, 生成错误消息:“对象引用未设置为对象的实例”。 例如,“Debug.Log (IDField[i].name);”将产生该错误。
如何在运行时在画布上创建和放置这些输入字段?
【问题讨论】:
-
一个好主意,从一个“模型”开始,然后是
Instantiate它 -
谢谢。您能否告诉我在我发布的代码中如何以及在何处执行此操作?我曾想过“IDField = new InputField[NUsers] ;”这一行够了。
-
嗨,Pat,你完全忽略了关于 Unity 的基本知识。 Unity 使用实例化的
GameObject。与“普通”OO 工程完全没有联系,您只能创建一个新类。您将不得不退后一步,通过 GameObjects 了解Instantiate(包括但不限于UI元素,例如Button)。您必须了解预制件。一旦您可以Instantiate与其中最好的一起使用,您就可以继续使用 UI 元素了解有关Instantiate的详细信息
标签: c# unity3d user-input