Skip to main content

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 TagAccepted Tags
Inventory.Slot.HeadInventory.Slot.Head
Inventory.Slot.ChestInventory.Slot.Chest
Inventory.Slot.MainHandInventory.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.

Give the paperdoll an Item Query

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:

  1. A state written onto the itemSetEquipmentState(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.
  2. 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.
  3. 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.

An item that shows nothing is usually missing an anchor

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:

FieldPurpose
State TagsWhich states this covers. Empty = any state, which is what armour wants
Container Filter / Slot FilterNarrows it further
Visual TypeStatic mesh, skeletal mesh, or a spawned actor
Mesh / Skeletal Mesh / Actor ClassWhat to show
Follows Avatar PoseWhether a skeletal piece uses the character's animation
Attach Socket, Offset, Rotation, ScaleThe fit tweak from the anchor
MaterialAn override
PrerequisitesConditions the state itself requires
No ModelThe state is real but draws nothing — a ring, a passive charm
Attach FinderWhich 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:

FinderPicks
AvatarMeshThe character's main skeletal mesh. The usual answer.
ComponentTagA mesh tagged in the Blueprint — a mount, a vehicle seat, a second body.
OwnerInterfaceWhatever 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