Обращение к кастомному свойству в 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 шт):
Массив это массив, а ваш класс это ваш класс и индексатор не сделает его ни массивом, ни даже коллекцией.
GetArrayElementAtIndex
обращается к коллекции не через индексатор, абстракций работающих с индексатором вообще нет, IEnumerable
её не предполагает. Более того Editor
обращается вовсе не к классу, а работает с сериализированным представлением объекта, то есть с json
.
Найди property resourceCosts
и работать с ним.