У меня есть CustomEditor с ReorderableList, который отображает вложенный ReorderableList для каждого элемента. Когда я перетаскиваю элементы во внешний родительский ReorderableList, чтобы изменить их порядок, внутренние списки не меняют свой порядок соответственно. Вот изображение того, что происходит:
![](https://i.stack.imgur.com/wmhrb.gif)
Как видите, первый элемент всегда имеет одну Подключенную путевую точку, а второй элемент всегда имеет две.
Это скрипт агента Pathing:
public class PathingAgent : MonoBehaviour
{
[System.Serializable]
public class ConnectedWaypointsListContainer
{
public List<WaypointObject> connections = new List<WaypointObject>();
}
public List<WaypointObject> waypoints = new List<WaypointObject>();
public List<ConnectedWaypointsListContainer> connectedWaypoints = new List<ConnectedWaypointsListContainer>();
}
Это соответствующие части CustomEditor:
waypointsList = new ReorderableList(serializedObject, serializedObject.FindProperty("waypoints");
SerializedProperty connectedWaypointsProperty = serializedObject.FindProperty("connectedWaypoints");
...
waypointsList.onReorderCallbackWithDetails = (ReorderableList list, int oldIndex, int newIndex) =>
{
connectedWaypointsProperty.arraySize++;
connectedWaypointsProperty.GetArrayElementAtIndex(connectedWaypointsProperty.arraySize - 1).objectReferenceValue = connectedWaypointsProperty.GetArrayElementAtIndex(oldIndex).objectReferenceValue;
if(newIndex < oldIndex)
{
for(int i = oldIndex; i > newIndex + 1; --i)
{
connectedWaypointsProperty.MoveArrayElement(i - 1, i);
}
connectedWaypointsProperty.MoveArrayElement(connectedWaypointsProperty.arraySize - 1, newIndex);
}
else
{
for(int i = oldIndex; i < newIndex - 1; ++i)
{
connectedWaypointsProperty.MoveArrayElement(i + 1, i);
}
connectedWaypointsProperty.MoveArrayElement(connectedWayointsProperty.arraySize - 1, newIndex);
}
if(connectedWaypointsProperty.GetArrayElementAtIndex(connectedWaypointsProperty.arraySize - 1) != null)
{
connectedWaypointsProperty.DeleteArrayElementAtIndex(connectedWaypointsProperty.arraySize - 1);
}
connectedWaypointsProperty.DeleteArrayElementAtIndex(connectedWaypointsProperty.arraySize - 1);
Моя попытка состояла в том, чтобы вручную перетасовать вдоль (и) ConnectedWaypointsListContainer (ов), что требовало перезаписи первого перезаписываемого файла и перезаписи последнего сохраненными данными. Тем не менее, я получаю сообщение об ошибке, когда пытаюсь продублировать список для кэширования в качестве последнего элемента в сериализованном массиве, присваивая objectReferenceValue: «тип не является поддерживаемым значением pptr».
Как я могу изменить порядок подключенных точек маршрута вместе с путевыми точками? Если я на правильном пути, перетасовывая массивы вручную, как правильно сделать временную копию, чтобы первый перезаписанный элемент не терялся?