Unity UI 带枚举的 Onclick 检查器

Unity UI Onclick inspector with Enumeration

我有一个问题。

这是我的检查员 Window。

如果是 On Click() window,我想设置 Enum 类型的参数。 不是字符串或整数。

换句话说,我想用 void GoToNext(DATA_TYPE 类型)。 但这并没有出现。

即使我将枚举设置为 [SerializedField],也不会在此 window 中显示。

我该怎么做?

您目前无法执行此操作,Unity 不支持它。但是,由于枚举基本上是整数,也许您可​​以将函数设置为接受一个整数并以某种方式将其转换为适当的枚举?

我用枚举在一些代码中尝试了这个小实验,它似乎工作正常:

public enum unitType {orc_warrior, archer, none};

    int test2 = 0;
    unitType test;
    test = (unitType)test2;
    Debug.Log(test);
    test2 = 1;
    test = (unitType)test2;
    Debug.Log(test);

调试正确打印出来orc_warrior然后archer

我从 this Unity forum 的用户 'TobiLaForge' 那里找到了一个很好的解决方案。至少这是对我来说最好的解决方案,我只需要处理几个枚举。

1) 在您的 class 之外声明您的 enum 您在其中使用它或在 MonoBehaviour.

之外的任何其他地方创建它

2) 创建脚本,将其附加到您的按钮:

using UnityEngine;
public class GetEnum : MonoBehaviour{
    public MyEnum state;
}

3 添加这个或更改您使用枚举的原始函数

public void GetEnumState(GetEnum g)
{ if(g.state == MyEnum.something)
DoSomething();
}

4) 在 OnClick() 函数槽 select 你的函数中,将 GetEnum 脚本拖到槽中。

对于您以这种方式使用的每个 enum,这将需要一个新的 MonoBehaviour 脚本。这是我之后的检查员。

为了弄清楚 nipunasudha 所建议的它是如何工作的,这里是我如何使用它的完整代码示例。请注意“SerializeReference”而不是“SerializeField”的需要,否则你所有的按钮都会以相同的状态结束——这通常不是你想要实现的。

using UnityEngine;

public class MenuInvoker : MonoBehaviour
{
    private enum State { Main, Settings };
    [SerializeReference] private State state;
    public void InvokeMenu(MenuInvoker currState)
    { 
        switch (currState.state)
        {
            case State.Main:
                Debug.Log("Main");
            break;
            case State.Settings:
                Debug.Log("Settings");
            break;

            default:
                Debug.Log("Default Menu");
                break;
        }

    }
}