--- tags: Parsing --- # UAsset 5 Schema - Notes ## PropertyTag In the engine, all properties are read, first, as a PropertyTag ([Header](https://github.com/EpicGames/UnrealEngine/blob/1d950f1094195e1a62b45c10c39312586509fcfd/Engine/Source/Runtime/CoreUObject/Public/UObject/PropertyTag.h?plain=1#L15), [Serialize](https://github.com/EpicGames/UnrealEngine/blob/1d950f1094195e1a62b45c10c39312586509fcfd/Engine/Source/Runtime/CoreUObject/Private/UObject/PropertyTag.cpp?plain=1#L81)) The property tag looks like: ```cpp 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 ```cpp 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: ```cpp 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)`