Пользовательский редактор сбрасывает список каждого кадра
Я пытаюсь создать переупорядочиваемый список в единстве, который хранит список пользовательских классов:
using System;
using UnityEngine;
[Serializable]
public struct OnboardingItemData
{
[Tooltip("The hint gameobject")]
public GameObject prefab;
[Tooltip("The object this hint is highlighting")]
public GameObject target;
}
Этот класс находится в списке:
using System;
using System.Collections.Generic;
using UnityEngine;
public class OnboardingItemList : MonoBehaviour
{
public List<OnboardingItemData> list = new List<OnboardingItemData>();
private void Update()
{
Debug.Log("List count: " + list.Count);
}
public void Refresh()
{
for (int i=0; i < list.Count; i++)
{
if (list[i].prefab != null)
{
list[i].prefab.GetComponent<OnboardingItemClickHandler>().id =
i;
}
}
}
public virtual void Show(int id)
{
Debug.Log(list.Count);
list[id].prefab.SetActive(true);
}
public virtual void Hide(int id)
{
list[id].prefab.SetActive(false);
}
}
И этот список показан так:
using UnityEngine;
using UnityEditor;
using UnityEditorInternal;
[CustomEditor(typeof(OnboardingItemList))]
public class OnboardingEditor : Editor
{
private ReorderableList list;
private void OnEnable()
{
list = new ReorderableList(serializedObject,
serializedObject.FindProperty("list"),
true, true, true, true);
list.drawElementCallback =
(Rect rect, int index, bool isActive, bool isFocused) => {
var element =
list.serializedProperty.GetArrayElementAtIndex(index);
rect.y += 2;
EditorGUI.PropertyField(
new Rect(rect.x, rect.y, 200,
EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("prefab"), GUIContent.none);
EditorGUI.PropertyField(
new Rect(rect.x + 250, rect.y, 200,
EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("target"), GUIContent.none);
};
}
public override void OnInspectorGUI()
{
list.DoLayoutList();
serializedObject.ApplyModifiedProperties();
OnboardingItemList myScript = (OnboardingItemList)target;
if (GUILayout.Button("Apply"))
{
myScript.Refresh();
}
}
}
Теперь в моей сцене есть некоторые элементы пользовательского интерфейса, которые вызывают функции Show() и Hide() в OnboardingItemList. Проблема в том, что я получаю исключение вне диапазона, поэтому я помещаю Debug.Log в Update() и вижу, что число в списке постоянно меняется. В одном кадре написано 2, в следующем - 0, и он постоянно меняется назад и вперед. Я предполагаю, что что-то продолжает сбрасывать список на новый, и редактор продолжает присваивать ему значения моего собственного редактора. Как это можно исправить?