Home / Guides / How to Design an Inventory System in Unreal Engine (Blueprint or C++)

How to Design an Inventory System in Unreal Engine (Blueprint or C++)

An inventory looks like a UI problem, but the hard parts are data and rules. Get those right first and the widget becomes the easy part. Here is the order I would build it in, whether you use Blueprint or C++.

1. Start with item data, not widgets

Describe every item once, in a Data Asset or a Data Table: an id, display name, icon, category, stack size and any rules (can it be equipped, consumed, dropped). At runtime an item in the inventory is just a definition id plus a quantity (and optional state such as durability). Keeping instances this small makes saving, networking and UI refreshes trivial.

2. Decide how space works

Pick one model early: fixed slots, a grid, or a weight limit. Then write down the rules in plain language: how stacks merge, what happens when a stack overflows, whether you can split a stack, and where an item goes when the inventory is full (drop it in the world is the usual answer). Most inventory bugs are unwritten rules.

3. Keep the logic out of the UI

Put the inventory in a component (on the character, or on the Player State if it must survive respawns). The UI should only observe it through event dispatchers such as "inventory changed" and send requests back ("move item", "use item"). If the widget owns the state, every new screen duplicates bugs.

4. Pickup and drop

A world item is an actor that points at an item definition. Picking it up asks the inventory to add it; if some of the stack does not fit, the actor stays with the remainder. Dropping spawns the actor again. In multiplayer, the server performs both and clients only request them.

5. Quick slots and equipment are views, not copies

A five-slot quick bar or an equipment panel should reference inventory entries (by index or id), not hold their own copies. Equipping then becomes an event ("item X equipped in slot Y") that your character reacts to, for example by attaching a mesh.

6. Save ids, not object references

Save the definition id and the quantity of each entry, never a pointer to an actor or asset. On load, rebuild the entries from your data table. This survives refactors and engine upgrades.

Common mistakes

Want a working base?

If you would rather start from something that already handles the list above, my Inventory System includes a scrollable item grid, five quick slots, filters and sorting, contextual item actions, an equipment panel and survival stats, with a playable demo. Details are below.

Related products

Tools that apply this

Need this built for your project?

I take on custom Unreal Engine, Unity and Blender work.

Request custom work