The UE serialization system seems to have support for versioning of user classes, through things like FCustomVersionRegistration and FArchive::CustomVer(). However, these classes don’t seem to be used in UE4 itself (The apparently Epic-specific UE4Ver() is used instead), so it’s not really clear how to use them.
My assumption is that one creates a global FCustomVersionRegistration instance per class that may need to be versioned, constructed with a literal GUID, the current version of the class (consecutive integers from 1), and the name of the class. When the class changes in a way that the normal UPROPERTY versioning can’t handle, the developer increments the version number for that class. In the Serialize() method when loading, the developer checks GetVersion() on the FArchive (passing in the same GUID as was used to construct the FCustomVersionRegistration instance), and if it’s below the current version, executes code to update the object.
Are there bits I’m missing/mistaken about?