簡體   English   中英

如何通過腳本訪問OnClick事件

[英]How to access the OnClick event via Script

我試圖做一個SongManager對象,它將負責更改歌曲。 我創建了一個SongManager和一個Song腳本。 在運行時,SongManager會根據需要創建盡可能多的歌曲按鈕,每個按鈕都具有不同的變量。 除了無法通過OnClick事件更改歌曲以外,其他所有內容似乎都正常運行。我嘗試了很多嘗試,但我想一切都已經過時了。 像這樣的東西:

public Button.ButtonClickedEvent OnClickEvent;

要么

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

感謝您的幫助,謝謝大家。

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

您可以將事件與其他類一起使用。 這是代碼:

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;
    }
}

首先,我創建一個Initialize方法。 它使用Song對象變量進行初始化,並使用索引作為按鈕ID。 在我創建一個事件以通知索引的偵聽器之后。

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

[System.Serializable]
public class Song
{
    public string songName;
    public int unlocked;
    public bool isInteractable;
    public AudioClip clip;
}

public class SongManager : MonoBehaviour
{

    public SongButton button;
    public Transform panel;
    public List<Song> songList;

    void OnEnable(){
        SongButton.OnSongButtonClick += SongButton_OnSongButtonClick;
    }

    void OnDisable(){
        SongButton.OnSongButtonClick -= SongButton_OnSongButtonClick;
    }

    void SongButton_OnSongButtonClick (int index)
    {
         Debug.Log ("index : " + index + " - song name : " + songList [index].songName);
    }

    void Start ()
    {  
       FillList ();    
    }

    void FillList ()
    {  
        for (int i = 0; i < songList.Count; i++) {
            SongButton songButton = Instantiate (button) as SongButton;  
            songButton.Initialize (i, songList [i]);
            songButton.transform.SetParent (panel, false);
        } 
    }
}

SongManager啟用后,它將開始偵聽OnSongButtonClick事件。 這樣,您可以知道單擊了哪個按鈕。

希望對您有所幫助。

您將函數名稱傳遞給AddListener參數。

public GameObject go;
Button myButton = null;

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

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

您還可以執行以下操作: myButton.onClick.AddListener(delegate { myCallBackFunction(); });

注意:

請下次發布您的代碼,而不是發布其屏幕截圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM