2016-11-14 6 views
0

Ich versuche, ein SongManager-Objekt zu erstellen, das für das Ändern von Songs verantwortlich ist. Ich habe einen SongManager und ein Song-Skript erstellt. Zur Laufzeit erzeugt SongManager so viele Song-Buttons, wie ich möchte, jeweils mit verschiedenen Variablen. Alles scheint gut zu funktionieren, außer dass ich nicht zum OnClick-Event komme, um die Songs zu ändern. Ich habe viele Dinge ausprobiert, aber ich denke, es ist alles veraltet. Sachen wie:Zugriff auf das OnClick-Ereignis über Skript

public Button.ButtonClickedEvent OnClickEvent; 

oder

go.GetComponent<Button>().onClick.AddListener(); 

jede Hilfe dankbar, danken u guys.

enter image description here

enter image description here

enter image description here

enter image description here

Antwort

1

Sie können Events für die Zerlegung mit Ihren anderen Klassen verwenden. Hier ist der Code:

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class SongButton : MonoBehaviour { 

    public delegate void SongButtonEvent(int index); 
    public static event SongButtonEvent OnSongButtonClick; 
    void ClickSongButton(){ 
     if (OnSongButtonClick != null) 
      OnSongButtonClick (index); 
    } 

    public Button button; 
    public Text songName; 
    public int unlocked; 
    public AudioClip clip; 
    public int index; 

    void Start() { 
     button.onClick.AddListener (ClickSongButton); 
    } 

    public void Initialize(int index,Song song){ 
     this.index = index; 
     songName.text = song.songName; 
     unlocked = song.unlocked; 
     clip = song.clip; 
     button.interactable = song.isInteractable; 
    } 
} 

Zunächst einmal, ich erstelle eine Initialize-Methode. Es verwendet Song-Objektvariablen für die Initialisierung und verwendet einen Index als Schaltflächen-ID. Nachdem ich ein Ereignis für Benachrichtigungshörer mit Index erstellt habe.

Wenn SongManager aktiviert wurde, beginnt es auf OnSongButtonClick-Ereignisse zu hören. Auf diese Weise können Sie wissen, auf welche Schaltfläche geklickt wurde.

Ich hoffe es hilft.

0

Sie passieren in den Funktionsnamen an den AddListener Parameter.

public GameObject go; 
Button myButton = null; 

void Start() 
{ 
    myButton = go.GetComponent<Button>(); 
    myButton.onClick.AddListener(() => myCallBackFunction()); 
} 

void myCallBackFunction() 
{ 
    Debug.Log("Button Clicked!"); 
} 

können Sie auch tun: myButton.onClick.AddListener(delegate { myCallBackFunction(); });

Hinweis:

Bitte senden Sie Ihren Code beim nächsten Mal statt einen Screenshot davon der Entsendung.

+0

oder nur myButton.onClick.AddListener (myCallBackFunction); es ist einfacher. – luizcarlosfx

+0

@luizcarlosfx Ja, es ist einfacher. Ich gehe normalerweise mit diesen beiden, weil sie Ihnen erlauben, benutzerdefinierte Funktion mit einem ** Parameter ** übergeben. Angenommen, eine Schaltfläche wird in einer for-Schleife für eine dynamische Benutzeroberfläche generiert. Das in deinem Kommentar kann das nicht tun. – Programmer

+0

Ja, aber in den meisten Fällen mache ich es lieber so. Sie können auch eine Funktion ohne Parameter erstellen und sie einfach verwenden, um zu tun, was Sie wollen. Ich bin lesbarer. – luizcarlosfx

Verwandte Themen