Нет, Unity не поддерживает полиморфную сериализацию напрямую.
Вам нужно будет найти альтернативный дизайн, который не требует этой функции. Сохраняя отдельный список для каждого типа один вариант:
class MyStuff
{
public List<Class1> Class1List;
public List<Class2> Class2List;
}
Вы можете сделать метод обертки более легко выбрать список для типа:
List<Type> GetList<Type>()
{
var type = typeof(Type);
if (type == typeof(Class1))
return Class1List;
else if (type == typeof(Class2))
return Class2List;
else
return null;
}
Вы могли написать итерацию, что бы итерации по каждому элементу поочередно. Это плохая идея, так как построение итератора создаст мусор, который вы должны стараться избегать в играх с GCes (Unity, HTML5 и т. Д.) Из опыта создания игр на этих платформах.
Я не помню, если версия Unity о Mono имеет генераторы, но если это произойдет, вы можете сделать:
IEnumerable<Object> All()
{
foreach (var i : Class1List)
yield return i;
foreach (var i : Class2List)
yield return i;
}
Без генераторов, код немного уродливее (вам нужно будет поддерживать свой собственный состояние), но выполнимо. Вы должны сами придумать этот код. Я бы рекомендовал против таких подходов в игре, если это должно быть сделано во время игры из-за очень реальных проблем, которые могут возникнуть у шипов сборщика мусора в мягких приложениях реального времени, таких как игры.