我有一个预置登录面板,它用以下代码进行克隆:
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
最后,在manager脚本中,我有以下内容:
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找到按钮,将引用脚本添加到预置文件中。
如果你能帮我做这件事我会很感激的。提前谢谢你。
发布于 2022-08-29 15:24:35
我找到解决办法了。我相信有更有效的方法,但这解决了目前的问题。
下面的脚本将添加到预置文件的登录按钮中,并通过检查器引用该按钮。这样,对脚本的引用不会因为是预制件而中断。
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();
}
}以下代码被添加到预置实例器中。它在实例化后将标记添加到输入字段。
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标签。然后你可以取他们的文本值等等。
public void LoginButton()
{
TMP_InputField loginmail = GameObject.FindWithTag("loginmailtag").GetComponent<TMP_InputField>();
TMP_InputField loginpass = GameObject.FindWithTag("loginpasstag").GetComponent<TMP_InputField>();
}https://stackoverflow.com/questions/73525665
复制相似问题