Try   HackMD

UAsset 5 Schema - Notes

PropertyTag

In the engine, all properties are read, first, as a PropertyTag (Header, Serialize)

The property tag looks like:

FName    Name;        // Name of property.
FName    Type;        // Type of property
int32    Size;        // Property size.
int32    ArrayIndex;  // Index if an array; else 0.

Depending on the value of Type, it will also contain one or more of

uint8    BoolVal;     // a boolean property's value
FName    StructName;  // Struct name if FStructProperty.
FGuid    StructGuid;
FName    EnumName;    // Enum name if FByteProperty or FEnumProperty
FName    InnerType;   // Inner type if FArrayProperty, FSetProperty, or FMapProperty
FName    ValueType;   // Value type if UMapPropery

For EngineVersion >= 503:

uint8    HasPropertyGuid;
FGuid    PropertyGuid;

Value type properties

The engine defines individual classes for each value type, e.g. FloatProperty , ByteProperty, etc.

Each property class takes the property tag as a constructor parameter, then just read their value type during deserialization.

Tag

Type: (BoolProperty|FloatProperty|NameProperty|...)

Data

Standard binary serialization for the value type.

ArrayProperty

Tag

Type: ArrayProperty
InnerType: (BoolProperty|FloatProperty|...)

Data

The data of an ArrayProperty is just a series of child property values with no additional tag for each child property. BoolProperty and StructProperty adjust their serialization behavior in an array.

BoolProperty

Property tags will store a BoolProperty's value in the tag, before PropertyGuid in BoolVal.

Tag

Type: BoolProperty
BoolValue: bool

Data

There are no bytes after tag

StructProperty

StructProperties contain structs, so their type definition is more complex. The property's tag will point to struct type in the StructName property. The property has additional struct details provided as additional exports:

Tag

Type: StructProperty
StructName: (Vector|Rotator|CustomStruct)