首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一-将onclick赋值给实例化的prefab子节点,并引用克隆的prefab元素

统一-将onclick赋值给实例化的prefab子节点,并引用克隆的prefab元素
EN

Stack Overflow用户
提问于 2022-08-29 07:53:12
回答 1查看 108关注 0票数 0

我有一个预置登录面板,它用以下代码进行克隆:

代码语言:javascript
复制
public class LoginOpener : MonoBehaviour
    {
        public GameObject popupPrefab;

        protected Canvas m_canvas;
        protected GameObject m_popup;

        protected void Start()
        {
            m_canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
        }

        public virtual void OpenPopup()
        {
            m_popup = Instantiate(popupPrefab, m_canvas.transform, false);
            m_popup.SetActive(true);
            m_popup.transform.localScale = Vector3.zero;
            m_popup.GetComponent<Popup>().Open();
        }
    }

prefab登录面板具有以下结构:

Panel

  • Email
    1. Login
    2. 密码文本
    3. 登录按钮

最后,在manager脚本中,我有以下内容:

代码语言:javascript
复制
public class FirebaseManager : MonoBehaviour
{
    [Header("Login References")]
    [SerializeField]
    private TMP_InputField loginEmail;
    [SerializeField]
    private TMP_InputField loginPassword;
    [SerializeField]
    public static FirebaseManager instance;

    public void LoginButton()
    {
        StartCoroutine(LoginLogic(loginEmail.text, loginPassword.text));
    }
}

我需要将public void LoginButton()分配给克隆的预置文件的登录按钮,并将克隆的预发邮件和密码文本分配给经理的引用。

作为一个新手,经过两天的工作,我没能做到这一点。在克隆后,我尝试将onClick AddListener添加到子元素,或者通过使用FindGameObjectWithTag找到按钮,将引用脚本添加到预置文件中。

如果你能帮我做这件事我会很感激的。提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2022-08-29 15:24:35

我找到解决办法了。我相信有更有效的方法,但这解决了目前的问题。

下面的脚本将添加到预置文件的登录按钮中,并通过检查器引用该按钮。这样,对脚本的引用不会因为是预制件而中断。

代码语言:javascript
复制
public class logClick : MonoBehaviour
{
    public Button CustomButton;
    private FirebaseManager _FirebaseManager;
    
    void Awake()
    {
        CustomButton.onClick.AddListener(CustomButton_onClick);
    }

    void CustomButton_onClick()
    {
        _FirebaseManager = FindObjectOfType<FirebaseManager>();
        _FirebaseManager.LoginButton();
    }
}

以下代码被添加到预置实例器中。它在实例化后将标记添加到输入字段。

代码语言:javascript
复制
m_popup = Instantiate(popupPrefab, m_canvas.transform, false);
GameObject ChildGameObject1 = m_popup.transform.GetChild(2).GetChild(1).gameObject;
GameObject ChildGameObject2 = m_popup.transform.GetChild(2).GetChild(2).gameObject;
ChildGameObject1.tag="loginmailtag";
ChildGameObject2.tag="loginpasstag";

最后,在我们的主脚本上,当我们点击登录按钮时,我们找到了inputfield标签。然后你可以取他们的文本值等等。

代码语言:javascript
复制
public void LoginButton()
    {
TMP_InputField loginmail = GameObject.FindWithTag("loginmailtag").GetComponent<TMP_InputField>();
TMP_InputField loginpass = GameObject.FindWithTag("loginpasstag").GetComponent<TMP_InputField>();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73525665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档