[英]Unity3d c#. onClick.AddListener() works once
脚本中有一个空白,它重新加载Canvas。 Canvas包含Button对象。 我用脚本附加了reload void。
using UnityEngine;
using UnityEngine.UI;
public class Trashscript : MonoBehaviour {
public GameObject Temp;
private GameObject Active;
int Counter;
void Start()
{
Menu();
}
void Menu()
{
Counter++;
if (Active != null) Destroy(Active);
Active = Instantiate(Temp);
GameObject.Find("Text").GetComponent<Text>().text = Counter.ToString();
GameObject.Find("Btn").GetComponent<Button>().onClick.AddListener(Menu);
}
}
第一次调用(从Start
)工作正常,“Text”元素显示“1”。 单击“Btn”Canvas重新加载后,但没有任何“文本”,“Btn”不起作用(onClick事件什么都不做)。
救命。
我无法分辨你的代码在做什么,但每次单击Button
,都会调用Menu
函数,这会导致再次GetComponent<Button>().onClick.AddListener(Menu)
。
您必须将GetComponent<Button>().onClick.AddListener(Menu)
移出Munu
函数并进入Start()
函数。 您还必须在OnDisable()
函数中取消注册Button
事件。
以下是您的代码应如下所示:
Button button;
void Start()
{
button = GameObject.Find("Btn").GetComponent<Button>();
button.onClick.AddListener(Menu);
}
void OnDisable()
{
button.onClick.RemoveListener(Menu);
}
void Menu()
{
///Put Your Button click code here
}
我解决我的问题与改变GameObject.Find("")
以Active.transform.Find("")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.