2016-07-17 5 views
1

スクリプトにはキャンバスをリロードする空白があります。 CanvasにはButtonオブジェクトが含まれています。スクリプトでreload 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から)は、「テキスト」要素が「1」と表示されます。 "Btn"をクリックした後、Canvasはリロードされますが、 "Text"がなく、 "Btn"が機能しません(onClickイベントは何もしません)。

ヘルプ。

+1

私は単調ではありませんが、Menu()がイベントを自分自身に読み込んでいる可能性があります。リスナーだけを追加してみてください –

答えて

0

私はActive.transform.Find("")GameObject.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

関連する問題