Если вы хотите переименовать сериализованное поле, но сохранить данные, Unity имеет атрибут FormerlySerializedAs , который будет поддерживать старое сериализованное имя поля.
[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/I18NData", order = 1)]
public class I18NData : ScriptableObject
{
[FormerlySerializedAs("Sprites")]
public I18NSpriteData[] Sprites2;
public I18NTextData[] Texts;
}
Другой вариантесли вы можете сделать поля приватными и использовать атрибут SerializeField .Затем вы можете свободно изменять свойства, которые обращаются к полям или изменяют их с течением времени, не влияя на сериализацию:
[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/I18NData", order = 1)]
public class I18NData : ScriptableObject
{
[SerializeField]
private I18NSpriteData[] Sprites;
public I18NSpriteData[] Sprites2 {
get { return Sprites; }
set { Sprites = value; }
}
[SerializeField]
private I18NTextData[] Texts;
public I18NTextData[] Texts2 {
get { return Texts; }
set { Texts= value; }
}
}
Еще одна вещь, которую вы можете рассмотреть, - это использование интерфейса ISerializationCallbackReceiver для большего контроля надПроцесс сериализации Unity.Он предоставляет два метода, OnBeforeSerialize и OnAfterDeserialize, которые вызываются в процессе сериализации и десериализации Unity.
Это, вероятно, более полезно при сериализации сложных структур, которые Unity обычно не может обрабатывать, например, словари, но в зависимости от типов вносимых вами изменений это может оказаться полезным.Вы можете использовать его для переноса данных между ревизиями.