需要帮助创建输入字段和滚动视图 [Unity3d-C#]



我一直在尝试创建一个输入字段,在编辑时激活下面的滚动视图并显示主题的相关信息(例如:用户名,地址…),但在调用输入字段事件来激活滚动视图时,它不会接受我创建的函数。谢谢你读我糟糕的英语,不管你是谁,帮助我。

public InputField username;
    public InputField password;
    public List<string> usernamelist;
    public Button enter;
    public ScrollRect usernamedataload;
    // Use this for initialization
    void Start () {
        string temp = "";
        if (PlayerPrefs.GetString ("username") == null) {
            username.text = temp;
        } else if (PlayerPrefs.GetString ("password") == null) {
            password.text = temp;
        } else {
            username.text = PlayerPrefs.GetString ("username");
            password.text = PlayerPrefs.GetString ("password");
        }
        usernamedataload.gameObject.SetActive (false);
    }   
    // Update is called once per frame
    void Update () {
        enter.onClick.AddListener (enterKeyDown);
        username.onValueChanged.AddListener(selectUsernameInput);
        username.onEndEdit.AddListener (endEditingUsernameInput);
    }
    void selectUsernameInput(){
        usernamedataload.gameObject.SetActive (true);
        usernamedataload.content.GetChild (usernamelist);
    }
    void endEditingUsernameInput(){
        usernamedataload.gameObject.SetActive (false);
    }

这个问题很难理解,但我已经发现了一些大问题。你应该注册到一个UI事件一次。现在,你在Update()函数中每一帧注册三个事件。将这些代码移动到Start()函数。

调用输入字段事件来激活滚动视图它不会接受我创建的函数

将委托包裹在传递给它的函数周围。例如:username.onValueChanged.AddListener(delegate { selectUsernameInput(); });

Transform.GetChildint作为参数,但您将Listusernamedataload.content.GetChild(usernamelist);一起传递给它。我不知道你为什么要这样做,但你应该传递一个int到它像(1,2,3,4)。

可以从下面的代码开始。它修复了上面提到的所有问题,并且可以编译。

public InputField username;
public InputField password;
public List<string> usernamelist;
public Button enter;
public ScrollRect usernamedataload;
// Use this for initialization
void Start()
{
    string temp = "";
    if (PlayerPrefs.GetString("username") == null)
    {
        username.text = temp;
    }
    else if (PlayerPrefs.GetString("password") == null)
    {
        password.text = temp;
    }
    else
    {
        username.text = PlayerPrefs.GetString("username");
        password.text = PlayerPrefs.GetString("password");
    }
    usernamedataload.gameObject.SetActive(false);
    enter.onClick.AddListener(enterKeyDown);
    username.onValueChanged.AddListener(delegate { selectUsernameInput(); });
    username.onEndEdit.AddListener(delegate { endEditingUsernameInput(); });
}
// Update is called once per frame
void Update()
{
}
void selectUsernameInput()
{
    usernamedataload.gameObject.SetActive(true);
    usernamedataload.content.GetChild(0);
}
void endEditingUsernameInput()
{
    usernamedataload.gameObject.SetActive(false);
}
void enterKeyDown()
{
}

最新更新