There’s no good documentation about RF Flags of UObject, so I was wondering the same thing.
I can highly recommend looking into: FProperty::ShouldSerializeValue and there we can find the code I pasted below.
// Skip properties marked NonTransactional when transacting
if ((PropertyFlags & CPF_NonTransactional) && Ar.IsTransacting())
{
return false;
}
Be aware that this snippet relates to a property, thus it uses CPF flags, not RF flags.
If we look deeper into FArchive implementation of IsTransacting(), it is possible to find that an archive is transacting only if it contains any editor related data.
/** Returns true if this archive is transacting, which is used to keep track of changes to objects for things like the editor undo system. */
FORCEINLINE bool IsTransacting() const
{
if (FPlatformProperties::HasEditorOnlyData())
{
return ArIsTransacting;
}
else
{
return false;
}
}
All this confirms that “transactional” term is indeed related to undo/redo system of the editor. The only question remains what exactly RF_Transactional means, when marking an entire object. I can only assume that objects not marked with such a flag are discarded early when preparing data for the undo/redo system.