首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unity 2018使用检查器为动态列表分配ButtonClickedEvent时出错

Unity 2018使用检查器为动态列表分配ButtonClickedEvent时出错
EN

Stack Overflow用户
提问于 2019-07-05 05:27:08
回答 1查看 62关注 0票数 0

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

代码语言:javascript
运行
复制
[Serializable]
public class MenuItem
{
    public string title = "Item";
    public bool enabled = true;
    public Button.ButtonClickedEvent onClick = null;
    public MenuItem[] submenu;
}
public MenuItem[] menu = null;

现在,当我使用检查器为菜单赋值时,在第一级中一切正常。但在第二级之后,我不能将ButtonClickedEvent分配给创建的MenuItem子级。我在unity编辑器中看到这个错误:

代码语言:javascript
运行
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2019-07-05 05:49:30

这里UnityEvent Editor breaking in nested struct有一个建议使用ScriptableObject而不是递归列表的答案。但并不是怎么做到的!

但请注意答案的要点,如果我有特定的级别数,我可以使用下面的内容

代码语言:javascript
运行
复制
[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;
}

编辑:或者更好

代码语言:javascript
运行
复制
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
{
}

它解决了问题,但我想还有一些更好的解决方案。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56894364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档