Обращение к кастомному свойству в Unity Editor

Есть класс "ResourceCapacity" в котором явно указан индексатор

public int this[int index]
{
    get => resourceCosts[index].Value;
    set => resourceCosts[index].Value = value;
}

И есть скрипт Unity в котором прописан функционал для работы с кастомным классом

public class ResourcesCost : MonoBehaviour
{
    [SerializeField]
    public ResourceCapacity Obj = new ResourceCapacity();

    private void Start()
    {
        Debug.Log(Obj[ResourceType.Crystal]);
        Debug.Log(Obj[0]);
    }
}
#if UNITY_EDITOR
    [CustomEditor(typeof(ResourcesCost))]
public class ResourcesCostEditor : Editor
{
    SerializedProperty ResourceList;

    private void OnEnable()
    {
        ResourceList = serializedObject.FindProperty("Obj");
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        Debug.Log(ResourceList.GetArrayElementAtIndex(0).FindPropertyRelative("Type"));
    }
}
#endif

Но при попытке получить элемент массива класса появляется ошибка что обьект не является массивом. ResourceList.GetArrayElementAtIndex(0) Хотя реализация обращения через индекс есть. Какие есть варианты для обращения к кастомному классу через индексатор в Unity Editor?


Ответы (1 шт):

Автор решения: Yaroslav

Массив это массив, а ваш класс это ваш класс и индексатор не сделает его ни массивом, ни даже коллекцией.

GetArrayElementAtIndex обращается к коллекции не через индексатор, абстракций работающих с индексатором вообще нет, IEnumerable её не предполагает. Более того Editor обращается вовсе не к классу, а работает с сериализированным представлением объекта, то есть с json.

Найди property resourceCosts и работать с ним.

→ Ссылка