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 事件不执行任何操作)。

帮助。

Unity3d c#.onClick.AddListener() 工作一次

我无法判断您的代码在做什么,但是每次单击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("")的问题。