У меня есть массив из 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
, и она будет передана методу при вызове. Перетащите компонент в обведенную зону: