В настоящее время он не поддерживается и не так-то просто кодировать себя.Это потребовало бы некоторых глубоких взломов исходного кода UnityEventDrawer
и UnityEventBase
и вида воспроизведения всего UnityEventDrawer
( источник доступен, хотя ... )
Однако существует очень простой обходной путь (по крайней мере, если каждый Button
должен воспроизводить ровно один звук)
Имеет отдельный компонент, такой как
[RequireComponent(typeof(Button))]
public class PlayASound : MonoBehaviour
{
// reference via inspector
[SerializeField] private AudioSelector _audioSelector;
// your enum type here
public AudioMessageType MessageType;
public void Play()
{
_audioSelector.PublishAudioMesssage(MessageType);
}
private Button _button;
private void Awake()
{
_button = GetComponent<Button>();
if (!_button)
{
Debug.LogError("No Button found on this GameObject!", this);
return;
}
_button.onClick.AddListener(Play);
}
// Just to to be sure
// usually the button should be destroyed along with this component
// anyway ... but you never know ;)
private void OnDestroy()
{
_button.onClick.RemoveListener(Play);
}
}
, прикрепляет его к GameObject в качестве компонента Button
, выберите соответствующее значение перечисления, готово.Слушатель onClick
не появится в Инспекторе, но будет добавлен во время выполнения.
Если вы предпочитаете добавить его вручную (я иногда предпочитаю, чтобы он был видимым), просто удалите Awake
и OnDestroy
и, скорее, перетащите его вручную, как обычно, и выберите метод Play
.