Equipment
Equipment is a container with a slot layout, plus a component that draws what is in it on the character. The two are independent: gear works with no visuals at all, and visuals need no special container.
The container
An equipment paperdoll is a container definition with an FEDSlotLayoutConfig. Each slot has a tag
and a filter:
| Slot Tag | Accepted Tags |
|---|---|
Inventory.Slot.Head | Inventory.Slot.Head |
Inventory.Slot.Chest | Inventory.Slot.Chest |
Inventory.Slot.MainHand | Inventory.Slot.MainHand |
Inventory.Slot.OffHand | (empty — takes anything) |
UEDEquipmentStatics::MakeEquipmentLayout(SlotTags) builds the same thing from code. The framework
ships no concrete slots; which ones a body has is your game's decision.
An item becomes equippable by carrying an Equipment Fragment naming its slot.
An empty Accepted Tags list is what makes an off-hand useful, and also what turns the paperdoll into
overflow storage for anything picked up. Set the container's Item Query to any tags match →
Inventory.Slot. Manual drags still work; only automatic placement is gated.
Drawing it on the body
UEDEquipmentManagerComponent watches the actor's containers and attaches, moves and removes meshes
to match. Equip a sword and it appears in the fist; move it to a holster slot and it jumps to the
back; drop it in a bag and it disappears.
What an item is doing: its state
An item's state answers "is this stowed, worn, or in hand?" — a question its slot cannot always answer, because a sword sheathed on the hip and the same sword in the fist occupy the same slot, and a hotbar holds nine items of which exactly one is being held.
The framework ships Inventory.Equipment.State.Stored, ...Equipped and ...Held, and you can
declare your own under the same root. A state is resolved in this order:
- A state written onto the item —
SetEquipmentState(Handle, Tag), authority only. This is for what a container cannot say, like which hotbar cell is selected. It is exclusive: giving one item a state takes it from whoever had it. - The state its container declares — put an
Inventory.Equipment.State.*tag in the container definition's Container Tags and everything in it is in that state. A paperdoll says Equipped once instead of every piece of armour being told individually. Stored, failing both.
Where it attaches: anchors
An anchor is which bone or socket this body uses. It belongs to the character, not to the item: every pair of boots in the game attaches to the same two ankles, and everything the character holds goes in the same fist. Anchors are keyed by a slot tag or a state tag.
FEDEquipmentSlotAnchor Feet;
Feet.Sockets = { TEXT("foot_r"), TEXT("foot_l") }; // both feet, one item
Feet.bMirrorAlternateSockets = true; // flip X on the second — paired bones mirror
Equipment->Anchors.Add(FeetTag, Feet);
FEDEquipmentSlotAnchor Hand; // anything HELD, wherever it came from
Hand.Sockets = { TEXT("HandGrip_R") };
Equipment->Anchors.Add(EDEquipmentTags::Inventory_Equipment_State_Held, Hand);
Slot wins over state, so a helmet stays on the head whatever it is doing, while an item its container gives no slot at all — anything held from a hotbar — is placed by what it is doing instead.
Saying the bone once means an armour set carries only its meshes and a fit tweak, and re-rigging the character does not mean re-authoring two hundred items.
A state whose slot and state tags both map to no anchor draws nothing, deliberately — that is how
items in a bag stay invisible with nothing configured. It is also the most common reason a piece of
equipment you expect to see does not appear. Turn on Log LogEDInventory Verbose and the component
says which tags it evaluated and how many anchors it had to match them against.
States
One item can look and behave differently depending on what it is doing. Each state in the fragment carries:
| Field | Purpose |
|---|---|
| State Tags | Which states this covers. Empty = any state, which is what armour wants |
| Container Filter / Slot Filter | Narrows it further |
| Visual Type | Static mesh, skeletal mesh, or a spawned actor |
| Mesh / Skeletal Mesh / Actor Class | What to show |
| Follows Avatar Pose | Whether a skeletal piece uses the character's animation |
| Attach Socket, Offset, Rotation, Scale | The fit tweak from the anchor |
| Material | An override |
| Prerequisites | Conditions the state itself requires |
| No Model | The state is real but draws nothing — a ring, a passive charm |
| Attach Finder | Which mesh on the actor to attach to |
A sword with a drawn state in the hand and a sheathed state on the back is two entries in one
list. The state is selected by where the item is, expressed as tags — its container, its slot, and
its per-stack DynamicTags.
// Move the sword from sheathed to drawn: the visuals follow, on every machine.
Container->SetEntryDynamicTags(SwordHandle, FGameplayTagContainer(DrawnTag));
That one vocabulary — container tag, slot tag, dynamic tags — is what visuals, GAS grants and Mutable parameters all read, so a state change moves the model, the buffs and the body in one step.
Roles the container cannot express
Some states are not about placement at all. "The hotbar item the player has selected" is one — the
item has not moved. SetItemRoleTags lets the game add tags to an item for exactly that.
Attach finders
Which mesh does a piece attach to? UEDEquipmentAttachFinder answers, and there are three shipped:
| Finder | Picks |
|---|---|
AvatarMesh | The character's main skeletal mesh. The usual answer. |
ComponentTag | A mesh tagged in the Blueprint — a mount, a vehicle seat, a second body. |
OwnerInterface | Whatever the owner returns from IEDEquipmentAvatar. |
Subclass it when your character rig is unusual. A state with no finder uses the component's default.
Equipping from code
Equipment is a container, so equipping is a move:
// Naming the container makes it an instruction: if it will not fit, this fails loudly.
Inventory->TryMoveToContainer(SwordHandle, EquipmentTag);
The slot layout picks the slot from the item's Equipment fragment. Pass an explicit address when the player dragged onto a specific one.
Grants
An item can grant gameplay effects, abilities and attribute sets while it sits somewhere. That is the
Grants (GAS) fragment and it uses the same placement vocabulary — see
Gameplay Ability System.
Armour that IS the body
For gear that changes the character's mesh rather than attaching to it, see Mutable. Same item assets either way.
Where next
- Gameplay Ability System
- Mutable
- User interface — drawing a paperdoll