繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM