0

我正在尝试创建一个注册场景。当用户输入无效的姓名、电子邮件和/或密码时,我想显示三个面板。我在开始时隐藏了面板。这样可行。但是,当我输入无效信息并单击按钮时,面板不会显示。当validNamevalidEmailvalidPassword为假时,它会进入 ShowNamePanel() 并卡住。

我的代码有什么问题?

public GameObject namePanel;
public GameObject emailPanel;
public GameObject passwordPanel;

public void Start ()
{
    HideNamePanel ();
    HideEmailPanel ();
    HidePasswordPanel ();
}

public void ButtonClick ()
{
    Debug.Log ("1. Button clicked.");

    CreateUser ();
}

/*
 * Sends post request to create new user if name, email, and 
 * password are valid.
 */

public void CreateUser ()
{

    validName = IsValidName (username);
    validEmail = IsValidEmailAddress (email);
    validPW = IsValidPassword (password);
    //validNewUserCombo = IsValidNewUserCombo (email, password);

    if (validName && validEmail && validPW) {
        Debug.Log ("6. VALID INPUTS");
        CallAPI ();
    } else {
        Debug.Log ("8. INVALID INPUTS");
        if (validName == false) {
            ShowNamePanel ();
        }
        if (validEmail == false) {
            ShowEmailPanel ();
        }
        if (validPW == false) {
            ShowPasswordPanel ();
        }
    }
}

public void ShowNamePanel() {
    Debug.Log ("shownamepanel");
    namePanel.SetActive (true);
}

public void HideNamePanel() {
    namePanel.SetActive (false);
}

public void ShowEmailPanel() {
    Debug.Log ("showemailpanel");
    emailPanel.SetActive (true);
}

public void HideEmailPanel() {
    emailPanel.SetActive (false);
}

public void ShowPasswordPanel() {
    Debug.Log ("showpasswordpanel");
    passwordPanel.SetActive (true);
}

public void HidePasswordPanel() {
    passwordPanel.SetActive (false);
}

在检查器中连接变量

面板雇佣制

4

2 回答 2

1

好的,所以您的问题是,当游戏对象处于非活动状态时,该游戏对象的所有脚本也停止工作。因此,如果您希望它起作用,最好将脚本放在其他将在此过程中保持活动状态的东西上。

在您的情况下,当您 setActive(false) 面板时,它们上的脚本也处于非活动状态,因此它们将不再运行。

这来自Unity 文档

使游戏对象处于非活动状态将禁用所有组件,关闭任何附加的渲染器、碰撞器、刚体、脚本等......

于 2017-03-14T19:45:50.547 回答
0

您需要告诉 Unity 您要禁用/启用哪些面板,如下所示:

public Panel panelToToggle;
private void Awake()
{
     // Gets the Panel component if there's one on the GameObject this
     // script is attached to
     panelToToggle = GetComponent<Panel>();
}
private void Start()
{
     // Sets the parent gameObject of the Panel component to inactive
     panelToToggle.gameObject.SetActive(false)
}
private void EnablePanel()
{
     // Sets the parent gameObject of the Panel component to active
     panelToToggle.gameObject.SetActive(true)
}
于 2017-03-14T19:05:20.983 回答