Ошибка Unity 2018 в использовании инспектора для назначения ButtonClickedEvent для динамического списка - PullRequest
0 голосов
/ 05 июля 2019

Я написал некоторый динамический список для заполнения инспектора единства,

[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. Я получаю эту ошибку в редакторе единиц:

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. unity inspector error for dynamic list with ButtonClickedEvent in childs

1 Ответ

0 голосов
/ 05 июля 2019

Здесь Редактор UnityEvent разрывает вложенную структуру есть ответ, который рекомендует использовать 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
{
}

Это решает проблему, но, думаю, есть и лучшие решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...