Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# 使用inspector为动态列表分配按钮ClickDevent时出错_C#_Unity3d - Fatal编程技术网

C# 使用inspector为动态列表分配按钮ClickDevent时出错

C# 使用inspector为动态列表分配按钮ClickDevent时出错,c#,unity3d,C#,Unity3d,我写了一些动态列表来填写unity inspector [Serializable] public class MenuItem { public string title = "Item"; public bool enabled = true; public Button.ButtonClickedEvent onClick = null; public MenuItem[] submenu; } public MenuItem[] menu = null;

我写了一些动态列表来填写unity inspector

[Serializable]
public class MenuItem
{
    public string title = "Item";
    public bool enabled = true;
    public Button.ButtonClickedEvent onClick = null;
    public MenuItem[] submenu;
}
public MenuItem[] menu = null;
现在,当我使用inspector为菜单赋值时,在第一级中一切都正常。但在第二级之后,我无法将ButtonClickedEvent分配给已创建的MenuItem子级。我在unity editor中遇到以下错误:

type is not a enum value
UnityEditor.SerializedProperty:set_enumValueIndex(Int32)
UnityEditorInternal.UnityEventDrawer:AddEventListener(ReorderableList) (at C:/buildslave/unity/build/Editor/Mono/Inspector/UnityEventDrawer.cs:355)
UnityEditorInternal.Defaults:DrawFooter(Rect, ReorderableList) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:115)
UnityEditorInternal.ReorderableList:DoListFooter(Rect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:641)
UnityEditorInternal.ReorderableList:DoList(Rect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:413)
UnityEditorInternal.UnityEventDrawer:OnGUI(Rect) (at C:/buildslave/unity/build/Editor/Mono/Inspector/UnityEventDrawer.cs:148)
UnityEditorInternal.UnityEventDrawer:OnGUI(Rect, SerializedProperty, GUIContent) (at C:/buildslave/unity/build/Editor/Mono/Inspector/UnityEventDrawer.cs:117)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
在检查员身上我看到一个奇怪的0。 这里 有一个答案建议使用ScriptableObject而不是递归列表。但是没有办法

但请注意答案的要点,如果我有具体的级别数,我可以使用这样的方法

[Serializable]
public class MenuItem
{
    public string title = "Item";
    public bool enabled = true;
    public int width = 100;
    public string relatedLeftDockPanel = "";
    public string relatedRightDockPanel = "";
    public Button.ButtonClickedEvent onClick = null;
    public MenuItemLevel1[] submenu;
}

[Serializable]
public class MenuItemLevel1
{
    public string title = "Item";
    public bool enabled = true;
    public int width = 100;
    public string relatedLeftDockPanel = "";
    public string relatedRightDockPanel = "";
    public Button.ButtonClickedEvent onClick = null;
    public MenuItemLevel2[] submenu;
}

[Serializable]
public class MenuItemLevel2
{
    public string title = "Item";
    public bool enabled = true;
    public int width = 100;
    public string relatedLeftDockPanel = "";
    public string relatedRightDockPanel = "";
    public Button.ButtonClickedEvent onClick = null;
}
编辑:甚至更好

public class MenuItem
{
    public string title = "Item";
    public bool enabled = true;
    public int width = 100;
    public string relatedLeftDockPanel = "";
    public string relatedRightDockPanel = "";
    public Button.ButtonClickedEvent onClick = null;
}

[Serializable]
public class MenuItemLevel0 : MenuItem
{
    public MenuItemLevel1[] submenu;
}

[Serializable]
public class MenuItemLevel1 : MenuItem
{
    public MenuItemLevel2[] submenu;
}

[Serializable]
public class MenuItemLevel2 : MenuItem
{
}
它解决了问题,但我想还有更好的解决办法