Как получить выпадающий список, который называется мой обработчик OnListener?

У меня есть массив из 13 выпадающих списков, каждый из которых привязан к событию в моей игре. У меня есть события AddListener, прикрепленные к каждому, но все они вызывают одну и ту же процедуру. Как в процедуре определить, из какого выпадающего объекта он был вызван?

Благодарю.

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

public class SelectSounds : MonoBehaviour
{
    public TMPro.TMP_Dropdown[] dropdownSFX = new TMPro.TMP_Dropdown[13];
    public Toggle[] soundToggles = new Toggle[13];

    void Awake()
    {
    for (int i = 0; i < 13; i++)
    {
        var temp = i;

        dropdownSFX[i].onValueChanged.AddListener(delegate { DropdownValueChanged(temp); }); // This works fine on value change

        dropdownSFX[i].OnPointerClick.AddListener(delegate { DropdownValueChanged(temp); });
 // Gets error: TMP_Dropdown.OnPointerClick(PointerEventData)' is a method, which is not valid in the given context
    }

    private void DropdownValueChanged(int newPosition)
    {

    // Get the value of the dropdown, and from which dropdown it came?
        Debug.Log("In DropdownVC: " + newPosition);
        lastSelected = newPosition;
    }

}

Всего 1 ответ


Вы можете иметь метод, который принимает параметр DropDown .

public void DropdownValueChanged(Dropdown dropDown)
{
   Debug.Log(dropDown.value);                          // Gives the index of the selected item
   Debug.Log(dropDown.options[dropDown.value].text);   // Gives the text of the selected item
}

Этот метод даст вам ссылку на DropDown . И вы можете получить доступ к его значению, как я покажу в методе.

Теперь подпишитесь на OnValueChanged следующим образом

введите описание изображения здесь

В самом конце картинки вы можете добавить ссылку на DropDown , и она будет передана методу при вызове. Перетащите компонент в обведенную зону:

введите описание изображения здесь


Есть идеи?

10000