Display Panel & Manager
The Display Panel Manager coordinates a Canvas of openable UI, assigns the player whose Inventory the panels use, and restores the previous panel and control focus when a panel closes. Use it for a Main Menu containing Bag and Equipment panels, shops, crafting, storage, and other UIS screens. It is optional when the project already has a complete UI framework and binds UIS views itself.
Create the Canvas manager
- Open Tools > Opsive > Ultimate Inventory System > UI Designer.
- Select Setup.
- Under Create Canvas Managers, click Setup when the scene does not already have an inventory Canvas.
- Select the generated Inventory Canvas and review its Display Panel Manager.
The setup creates a Screen Space Overlay Canvas, Canvas Scaler, Graphic Raycaster, Prevent Selectable Deselection, Item View Slot Cursor Manager, Display Panel Manager Handler, and Display Panel Manager. It also creates an Event System with a Standalone Input Module when no Event System exists.
For a generated single-player setup, the manager initially uses the GameObject tagged Player as Panel Owner. Assign the intended owner explicitly when the player is spawned later or another object uses that tag.
Configure the Display Panel Manager

The legacy image shows the manager’s core references. Released Version 1 also includes Panel Owner Inventory Identifier ID and Enable Input On Gameplay Selected.
| Setting | Default | Purpose |
|---|---|---|
| ID | 1 |
Registers this manager for lookup. Each simultaneous manager needs a unique nonzero ID. |
| Panel Owner | None | Receives panel events and supplies Inventory, input, and other player context to bindings. |
| Panel Owner Inventory Identifier ID | 1 |
Finds an Inventory Identifier when Panel Owner is empty. |
| Gameplay Panel | None | Identifies the normal gameplay state and the panel that returns after closing a menu. |
| Main Menu Panel | None | Supplies the target for the Main Menu open, close, and toggle methods. |
| Set Time Scale To Zero When Menu Is Opened | Disabled | Sets Time.timeScale to 0 while the selected menu is open and to 1 when it closes. |
| Close Menu When Opening Another | Disabled | Replaces the selected menu when enabled; otherwise a second menu is refused. |
| Enable Input On Gameplay Selected | Disabled | Sends the gameplay-input enable event when selection moves into or out of the Gameplay Panel. |
The time-scale option does not remember a previous nonstandard time scale. Projects that use slow motion, nested pause systems, or scene changes while paused should manage time centrally instead.
Bind the panel owner
The Panel Owner is normally the player GameObject containing the Inventory, Inventory Identifier, Item User, Currency Owner, and player input. Bag and Equipment panel bindings can then use Bind To Panel Owner Inventory instead of holding separate Inventory references.
At initialization the manager:
- registers itself with the Inventory System Manager by ID;
- discovers all child Display Panels, including inactive children;
- looks up Panel Owner Inventory Identifier ID when Panel Owner is empty; and
- sets up every discovered panel and binding after an owner is available.
If no owner can be found, the manager logs a warning and disables its GameObject. Call SetPanelOwner after spawning the player to set up and reactivate it. Dynamic Panel Owner can do this from a player at Awake, using Display Panel Manager ID with a default of 1, but it does not retry when the manager is unavailable at that moment. An explicit call after both objects exist is safer for asynchronous spawning.
Changing the owner unregisters panel events from the old owner, invokes OnPanelOwnerAssigned, reinitializes panel bindings for the new owner, and sends the panel-owner-change event.
Configure each Display Panel
| Setting | Default | Purpose |
|---|---|---|
| Unique Name | Empty | Registers the panel for name-based lookup. Names must be unique within one manager. |
| Is Menu Panel | Disabled | Marks a root menu. The manager allows only one selected menu at a time. |
| Is Non Selectable Panel | Disabled | Opens an overlay such as a tooltip without replacing the selected panel. |
| Start Enabled | Disabled | Starts active without sending an open event. |
| Open On Start | Disabled | Opens at Start and sends normal open events. |
| Set Active On Open | Enabled | Activates the panel GameObject before selection and open callbacks. |
| Set Disable On Close | Enabled | Deactivates the panel GameObject when it closes. |
| Selectable On Open | None | Gives keyboard or controller focus to a chosen Selectable. |
| Main Content | None; uses the panel Rect Transform during setup | Tells UI Designer where generated content belongs. |
| Bindings | Empty | Receives initialize, open, close, and open-back callbacks. Bindings on the same GameObject are added during setup. |
A blank Unique Name prevents name lookup but not direct-reference opening. Duplicate names produce a warning and leave the first registered panel under that name.
Build a Bag and Equipment Main Menu
Use the Gameplay Panel as the normal selected panel and assign a root Main Menu Display Panel with Is Menu Panel enabled. Add Bag and Equipment as submenu Display Panels paired with their tab buttons in the Main Menu binding.

Bag and Equipment are normally non-menu panels inside the Main Menu. Their Item View Slots Container Panel Bindings can both resolve the player’s Inventory through Panel Owner while selecting different collections or slot views.

For the complete menu and collection-view workflows, see Main Menu and Item View Slots Container.
How opening and closing works
Opening a non-menu panel records the currently selected panel and currently selected UI control as its direct previous targets. Opening a menu first applies the one-menu rule, closes the Gameplay Panel without navigating back, and records the current selected panel as the menu’s previous panel.
When a selected panel closes with selectPrevious enabled:
- its direct Previous Panel receives
OpenBack; - its Previous Selectable receives focus again; and
- the manager updates Selected Display Panel from the open-back event.
This is a per-panel chain, not an independent history stack. Reopening the same panel from another place replaces that panel’s previous references. Use explicit navigation when a screen can be reached through several nested routes and the direct previous relationship is insufficient.
An Is Non Selectable Panel overlay can open and close without taking selected-panel status, which makes it suitable for tooltips and short prompts. A root Is Menu Panel is different: it participates in the one-menu rule and in time-scale behavior.
Focus, input, and the Event System
Set Selectable On Open for every panel that must work immediately with keyboard or controller input. The panel remembers the control selected before it opened and restores that control when it closes.
Prevent Selectable Deselection restores the last selected GameObject whenever the Event System selection becomes null. Enable Allow Deselection While Gameplay Panel Selected on that component when gameplay should have no UI selection.
Display Panel Manager Handler reads input from the Panel Owner. Its Version 1 defaults include Close Panel Input named Close Panel and one toggle entry that maps Open Panel to the panel named Main Menu. It can also lock or reveal the cursor as selection moves between gameplay and menus.
The manager warns when no current Event System exists. For local multiplayer, Event System Manager uses the Event System reference on an Event System Identifier found on the local UI root; without one, it falls back to EventSystem.current.
Multiple managers and local multiplayer
Give each player/UI pair:
- a unique Display Panel Manager ID;
- a unique Inventory Identifier ID;
- the correct Panel Owner;
- its own Canvas and panel hierarchy; and
- the intended Event System and input route.
Duplicate Display Panel Manager IDs cannot be reassigned automatically because the manager exposes a read-only ID to the runtime register. The first registered object remains the object found by that ID. Test every lookup and input route rather than relying on hierarchy order. Follow Split-screen co-op UI for the full ownership workflow.
Editor checkpoint
Before entering Play Mode, confirm that:
- the manager ID is unique and the owner is the intended player;
- Gameplay Panel and Main Menu Panel are assigned;
- every name-opened panel has a nonempty, unique Unique Name;
- Main Menu is a menu panel while Bag and Equipment are configured as intended subpanels;
- every controller-driven panel has a valid Selectable On Open and navigation links;
- Bag and Equipment bindings resolve the Panel Owner’s Inventory;
- the Canvas has a Graphic Raycaster and the correct Event System/input module; and
- the time-scale and gameplay-input options match the project’s pause policy.
Verify in Play Mode
- Start with the Gameplay Panel open and confirm normal gameplay input works.
- Toggle Main Menu. Confirm that gameplay closes, Main Menu becomes the selected menu, and its first intended control receives focus.
- Open Bag, switch to Equipment, then return. Confirm that only the intended submenu is visible and focus follows the tab or panel configuration.
- Close Main Menu. Confirm that Gameplay Panel opens back and the previous gameplay or menu control state is restored as configured.
- Attempt to open another root menu while Main Menu is open. With Close Menu When Opening Another disabled, confirm that it is refused; enable the setting and confirm replacement instead.
- Enable the time-scale option, open Main Menu, and confirm
Time.timeScalebecomes0; close it and confirm the value becomes1. - Open a nonselectable tooltip and confirm that Selected Display Panel does not change.
- For local multiplayer, open both menus independently and confirm that each controller changes only its own Bag, Equipment, focus, and Canvas.
Save, scenes, and network boundaries
Display Panel Manager does not save the open panel, previous-panel chain, selected control, or time scale. UIS savers can persist Inventory and selected grid data separately, but a newly loaded UI starts from its configured Start Enabled and Open On Start state. Close a paused menu or explicitly restore the project time scale before unloading its scene; destroying the manager does not restore it.
Version 1 does not replicate panel state, focus, manager IDs, or owner changes over a network. The project or networking integration must assign the local owner and open local UI on the owning client. Display Panel Manager IDs and Inventory Identifier IDs are local lookup keys, not network identities.
Troubleshooting
| Symptom | Check | Fix |
|---|---|---|
| The entire inventory Canvas disables itself | Panel Owner is empty and Panel Owner Inventory Identifier ID cannot be resolved. | Assign the player or call SetPanelOwner after it spawns. |
| Opening by name does nothing | Unique Name is blank, misspelled, or duplicated. | Give every name-opened child panel one unique name and reinitialize the manager. |
| A second root menu will not open | Another menu is selected and Close Menu When Opening Another is disabled. | Close the current menu or enable replacement. |
| Closing a panel returns to the wrong screen | The panel’s direct Previous Panel was overwritten by another open route. | Open it through the intended parent or implement explicit navigation for that route. |
| Controller focus disappears | Selectable On Open, navigation, Event System, or Prevent Selectable Deselection is missing or misconfigured. | Assign the first control and verify the player-specific Event System path. |
| Gameplay input remains active behind the menu | Enable Input On Gameplay Selected is disabled or no listener handles its event. | Enable it when the player input supports that event, or disable gameplay input in the project’s menu controller. |
| Time resumes at the wrong speed | The built-in option restores Time.timeScale to 1, not the prior value. |
Manage pause and slow motion through a central system. |
| One controller operates both menus | Manager IDs, owners, Event Systems, or player inputs are shared. | Give each player/UI pair unique local IDs and explicit routes. |
| A panel added at runtime is missing from lookup | It was added after the manager’s child discovery and was not set up or registered. | Set it up with the intended manager or call RegisterPanel after creation. |
Related pages
- User Interface overview
- UI Designer
- Main Menu
- Main Menu UI Designer
- Item View Slots Container
- Views
- Input
- Split-screen co-op UI
- Inventory System Manager
- Save System
Developer details
Use InventorySystemManager.GetDisplayPanelManager(id) for ID lookup. Display Panel Manager exposes GetPanel, OpenPanel, ClosePanel, TogglePanel, SetSelectedPanel, CloseSelectedPanel, OpenMainMenu, CloseMainMenu, ToggleMainMenu, and SetPanelOwner. Display Panel exposes SmartOpen, SmartClose, SmartToggle, Open, OpenBack, Close, PreviousPanel, PreviousSelectable, IsOpen, and GetBinding<T>.
var manager = InventorySystemManager.GetDisplayPanelManager(1);
var mainMenu = manager.GetPanel("Main Menu");
manager.OpenPanel(mainMenu);
if (manager.SelectedDisplayPanel == mainMenu) {
manager.CloseSelectedPanel();
}
Panel Owner receives PanelEventData through the panel-open/close and new-panel-selected events. It also receives the gameplay-panel-selected Boolean and, when enabled, the gameplay-input Boolean. Display Panel provides C# and Unity events for open, close, and open-back, while each Display Panel Binding receives corresponding lifecycle callbacks. The manager also exposes the C# OnPanelOwnerAssigned event and sends the global panel-owner-change event after a successful owner assignment.