2016-07-17 5 views
1

스크립트에 Canvas를 다시로드하는 void가 있습니다. Canvas에는 Button 객체가 포함되어 있습니다. 스크립트로 reload void를 첨부합니다.Unity3d C#. onClick.AddListener() once once

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부터)은 "텍스트"요소가 "1"로 표시됩니다. "Btn"캔버스를 클릭 한 후 다시로드하지만 "텍스트"가없고 "Btn"이 작동하지 않습니다 (onClick 이벤트는 아무 것도하지 않습니다).

도움말.

+1

내가 단결을 모르지만 Menu()가 이벤트를 자체적으로 읽는 중일 수 있습니다. 청취자를 추가하려고 하나만 –

답변

0

내가 GameObject.Find("")Active.transform.Find("")에 변경 내 문제를 해결 : 아래

은 당신의 코드가 어떻게 보일지입니다.

1

코드가 무엇인지 알 수 없지만 Button을 클릭 할 때마다 GetComponent<Button>().onClick.AddListener(Menu)이 다시 호출되는 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