Unity | 如何在检视面板上根据主枚举选择更改枚举

4

我有一些Enums要在检查器中设置,但我希望根据所选择的主Enum来限制将显示哪个enum,以避免使用与所需不同的不同enum。

public MainSortEnum Sort;
public SecondaryTypeEnum1 Type1;
public SecondaryTypeEnum2 Type2;
public SecondaryTypeEnum3 Type3;

还有枚举类型

public enum MainSortEnum
{
    First,
    Second,
    Thirth,
}
public enum SecondaryTypeEnum1
{
    FirstType,
    SecondType,
    ThirthType,
}
public enum SecondaryTypeEnum2 
{
    FirstType,
    SecondType,
    ThirthType,
}
public enum SecondaryTypeEnum3
{
    FirstType,
    SecondType,
    ThirthType,
}

我只是想在此脚本的检查器上基于MainSortEnum选择所需的枚举,这可能吗?


SecondaryTypeEnum1是什么?你能举个例子吗? - Lincoln Cheng
抱歉,我会进行编辑。它应该是SecondaryTypeEnum1 = SecondTypes。 - Jorge Luis Lara Hernandez
如果我选择SortSecond,那么Type1Type2Type3应该是什么?我不太明白你在问什么。 - Lincoln Cheng
如果您在检查器上选择了“排序”为“第一”,那么它应该允许您设置Type1,如果您选择了“第二”,它应该隐藏其他枚举并仅显示type2等。 - Jorge Luis Lara Hernandez
2个回答

1
你需要为包含这些enums的类创建一个自定义检视器
例如,我们将称这样的类为MyClass:
... //other namespaces
using UnityEditor;

[CustomEditor(typeof(MyClass))]
public class MyClassEditor : Editor {
    MyClass myClass;

    void OnEnable() {
        myClass = (MyClass)target;
    }

    public override void OnInspectorGUI() {
        myClass.Sort = EditorGUILayout.EnumPopup("Sort", myClass.Sort);
        if (myClass.Sort == MainSortEnum.First)
            myClass.Type1 = EditorGUILayout.EnumPopup("Type 1", myClass.Type1);
        else if (myClass.Sort == MainSortEnum.Second)
            myClass.Type2 = EditorGUILayout.EnumPopup("Type 2", myClass.Type2);
        else
            myClass.Type3 = EditorGUILayout.EnumPopup("Type 3", myClass.Type3);
    }
}

哦,我想这就是我正在寻找的东西,我会测试一下,还有谢谢你提供的链接,如果有效的话,我会回来发帖并感谢的! :D - Jorge Luis Lara Hernandez
我觉得我漏掉了什么,我需要在实际使用的脚本中创建这个还是需要将所有东西从我的类传输到编辑器文件夹中? - Jorge Luis Lara Hernandez
@JorgeLuisLaraHernandez 你不需要更改你现有的脚本。创建一个名为Editor的新文件夹,创建一个新的脚本并将其粘贴到其中。参考我发送给你的链接,并真正理解自定义检查器的工作原理。 - Lincoln Cheng
我明白了,我之前误解了这个问题,现在只需要显示我想要的内容,并且发现我可以制作自定义编辑器窗口。最后一个问题,我能否在不同的编辑器窗口中显示脚本的值?顺便说一句,非常有帮助,谢谢! - Jorge Luis Lara Hernandez

0

最简单的方法是拥有多个GameObjects(在您的情况下为3个),并根据用户输入切换gameObject.SetActive(true/false)


是的,但问题是我希望能够从检视器中进行选择,如果在第一个枚举中选择了某些内容,则基于您选择的第一个枚举将使您选择另一个枚举。我的意思是,如果我从MainSortEnum中选择First,那么检视器应该让我从FirstTypes Enum中选择,但如果我在MainSortEnum上选择Fecond,则FirstTypes枚举字段应消失并出现SecondTypes。 - Jorge Luis Lara Hernandez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接