Unity3d c#.onClick.AddListener() 工作一次
本文关键字:一次 工作 AddListener Unity3d onClick | 更新日期: 2023-09-27 17:57:12
脚本中有一个空白,它会重新加载 Canvas。画布包含按钮对象。我用脚本附加了重新加载的空隙。
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
开始)工作正常,"文本"元素显示"1"。单击"Btn"后,画布将重新加载,但没有任何"文本",并且"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("")
的问题。