2016-07-17 189 views
1

腳本中存在void,它將重新加載Canvas。畫布包含Button對象。我使用腳本附加了重載void。Unity3d c#。 onClick.AddListener()一次工作

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 void)工作正常,「Text」元素顯示「1」。點擊「Btn」Canvas後重新加載,但沒有任何「文本」,並且「Btn」不起作用(onClick事件什麼都不做)。

幫助。

+1

我不知道統一,但它可能是因爲你的菜單()正在讀取事件本身。嘗試添加聽衆只有一個 –

回答

0

我解決我的問題與改變GameObject.Find("")Active.transform.Find("")

1

我不能告訴你的代碼在做什麼,但每次點擊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 

} 
+0

瞭解,但我需要重新創建「菜單」對象,每按一下按鈕。 – Tomas