SeniorДебаггингРедкоЕщё не отвечали
Как переименовать или сменить тип UPROPERTY, не сломав уже сохранённые ассеты?
Дизайнеры настроили Health на сотнях сохранённых ассетов оружия. Переименование в коде на MaxHealth компилируется, но теперь каждый сохранённый ассет загружается с MaxHealth = 100 (значение по умолчанию) — настроенные дизайнерами значения молча пропали.
// Было — значения настраивались под это имя:
UPROPERTY(EditAnywhere)
float Health = 100.f;
// Стало — переименовано в коде, больше ничего не менялось:
UPROPERTY(EditAnywhere)
float MaxHealth = 100.f;
Найдите и исправьте ошибку.
Сохранённые ассеты хранят значения свойств по отражённому имени, поэтому простое переименование молча теряет старое значение. Добавьте запись CoreRedirects в DefaultEngine.ini, сопоставляющую старое имя новому, чтобы загрузчик перепривязал его. Смену типа перенаправить нельзя: реализуйте Serialize или PostLoad с кастомной версией (FCustomVersion), чтобы прочитать старую раскладку и сконвертировать её.
- ✗Переименовать
UPROPERTYв коде и считать, что сохранённые значения последуют за новым именем - ✗Верить, что
CoreRedirectsсправится и со сменой типа, а не только с переименованием - ✗Забыть поднять кастомную версию, из-за чего старые и новые данные не различить при загрузке
- →Где регистрируется
FCustomVersionи какPostLoadего читает? - →Чем перенаправления свойств отличаются от перенаправлений классов и enum?