Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在OnClick编辑器中添加下拉列表?_C#_Unity3d - Fatal编程技术网

C# 如何在OnClick编辑器中添加下拉列表?

C# 如何在OnClick编辑器中添加下拉列表?,c#,unity3d,C#,Unity3d,我正在寻找一种在inspector中向OnClick编辑器添加下拉框的方法(下图中圈出) 我希望下拉列表由自定义枚举填充 这到底是可能的还是我需要找到另一种方法来做到这一点 目标: 拥有音频剪辑的枚举,并且能够从inspector中将剪辑分配给按钮,而无需进入代码。假设您知道编辑器和C#脚本如何相互交互,我只需使用: public static bool DropdownButton(GUIContent content, FocusType focusType, params GUILayo

我正在寻找一种在inspector中向OnClick编辑器添加下拉框的方法(下图中圈出)

我希望下拉列表由自定义枚举填充

这到底是可能的还是我需要找到另一种方法来做到这一点

目标:

拥有音频剪辑的枚举,并且能够从inspector中将剪辑分配给按钮,而无需进入代码。

假设您知道编辑器和C#脚本如何相互交互,我只需使用:

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

更多信息可以在这里找到:

假设您知道编辑器和C#script如何交互,我只需使用:

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

更多信息可以在这里找到:

它目前不受支持,自己编写代码也不是那么容易。它需要对
UnityEventDrawer
unityeventdbase
的源代码进行一些深入的破解,并复制整个
UnityEventDrawer
()


但是,有一个非常简单的解决方法(至少如果每个
按钮
只播放一个声音)

有一个单独的组件,如

[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);
    }
}
[RequireComponent(按钮类型))]
公共类游戏基金:单一行为
{
//检查员参考
[SerializeField]专用音频选择器_AudioSelector;
//这里是您的枚举类型
公共音频消息类型消息类型;
公共游戏
{
_audioSelector.PublishAudioMessage(消息类型);
}
私人按钮(u)按钮;;
私人空间
{
_button=GetComponent();
如果(!\u按钮)
{
LogError(“在这个游戏对象上找不到按钮!”,这个);
返回;
}
_button.onClick.AddListener(播放);
}
//只是想确定一下
//通常,按钮应与此组件一起销毁
//无论如何……但你永远不知道;)
私有void OnDestroy()
{
_按钮.onClick.RemoveListener(播放);
}
}
将其附加到与
按钮相同的游戏对象上,在那里选择相应的枚举值,完成。
onClick
的侦听器不会出现在检查器中,但会在运行时添加


如果您喜欢手动添加它(我有时更喜欢让它可见),那么只需删除
Awake
OnDestroy
,而是像往常一样手动拖动它并选择
Play
方法。

它目前不受支持,自己编写代码也不那么容易。它需要对
UnityEventDrawer
unityeventdbase
的源代码进行一些深入的破解,并复制整个
UnityEventDrawer
()


但是,有一个非常简单的解决方法(至少如果每个
按钮
只播放一个声音)

有一个单独的组件,如

[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);
    }
}
[RequireComponent(按钮类型))]
公共类游戏基金:单一行为
{
//检查员参考
[SerializeField]专用音频选择器_AudioSelector;
//这里是您的枚举类型
公共音频消息类型消息类型;
公共游戏
{
_audioSelector.PublishAudioMessage(消息类型);
}
私人按钮(u)按钮;;
私人空间
{
_button=GetComponent();
如果(!\u按钮)
{
LogError(“在这个游戏对象上找不到按钮!”,这个);
返回;
}
_button.onClick.AddListener(播放);
}
//只是想确定一下
//通常,按钮应与此组件一起销毁
//无论如何……但你永远不知道;)
私有void OnDestroy()
{
_按钮.onClick.RemoveListener(播放);
}
}
将其附加到与
按钮相同的游戏对象上,在那里选择相应的枚举值,完成。
onClick
的侦听器不会出现在检查器中,但会在运行时添加

如果您喜欢手动添加它(我有时更喜欢让它可见),那么只需删除
Awake
ondestory
并像往常一样手动拖动它,然后选择
Play
方法。

可能重复的