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 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.
  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 RuleWhich component 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.
FEDSetDynamicTagsTransaction Draw;
Draw.Container = Container;
Draw.Handle = SwordHandle;
Draw.Tags = FGameplayTagContainer(DrawnTag);
Container->RequestTransaction(FInstancedStruct::Make(Draw)); // server-only

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 rules​

Which mesh does a piece attach to? An Attach Rule answers — an FEDAttachRule struct picked in the details panel, like a layout config or a container rule. Three ship:

RulePicks
Avatar Skeletal MeshThe character's main skeletal mesh. The usual answer.
Component With TagA component tagged in the Blueprint — a mount, a vehicle seat, a second body.
Ask The OwnerWhatever the owner returns from IEDEquipmentAvatar.

A state with no rule uses the component's Default Attach Rule, and failing that the avatar mesh.

For a rig none of the three describe, write your own FEDAttachRule struct and register a resolver for it with FEDAttachRuleRegistry — the same shape as adding a layout or a container rule.

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​