Как добавить выпадающий список в редакторе OnClick? - PullRequest
1 голос
/ 29 мая 2019

Я ищу способ добавить раскрывающийся список в редактор OnClick в инспекторе (обведено на рисунке ниже)

Dropdown here

Я бы хотел, чтобы раскрывающийся список заполнялся пользовательским перечислением.

Возможно ли это вообще или мне нужно найти другой способ сделать это?

Цель:
Иметь набор аудиоклипов и иметь возможность назначить клип кнопке из инспектора, не заходя в код.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

В настоящее время он не поддерживается и не так-то просто кодировать себя.Это потребовало бы некоторых глубоких взломов исходного кода 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.

0 голосов
/ 29 мая 2019

Если вы знаете, как редактор и скрипт C # взаимодействуют друг с другом, я бы просто использовал:

public static bool DropdownButton(GUIContent content, FocusType focusType, params GUILayoutOption[] options);

Более подробную информацию можно найти здесь: https://docs.unity3d.com/ScriptReference/EditorGUILayout.DropdownButton.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...