Skip to main content

Hook UI

A visual, node-based UI navigation system for Unity

Stop wiring SetActive() and magic strings by hand. Build your menus as a graph, keep every ID validated, and let HookUI handle the transitions.

01

Visual Flow Graph

Wire your entire menu flow — screens, portals, quit nodes — in a node editor instead of a maze of SetActive() calls scattered across the codebase.

02

No Magic Strings

Every View, Button, Component and Signal ID is validated against a central Database asset, with autocomplete dropdowns and duplicate-ID warnings right in the Inspector.

03

Decoupled Signals

HookSignalHub lets any script react to game events without a direct reference to whatever screen triggered them — perfect for gold-updated, item-bought, achievement-unlocked style events.

04

Canvas + UI Toolkit

Mix classic Canvas-based screens and UGUI's newer UI Toolkit views in the same flow graph — HookUIManager drives both through one shared interface.

05

In-App Notifications

A ready-made modal popup system — simple info, confirm/cancel with lambdas, or a fully custom PromptData builder with icon and callbacks — ships as a drag-in prefab.

06

Built-in Animation System

Data-driven Show/Hide transitions (fade, scale, slide, rotate) with reusable presets you can author once and drop onto any screen or button.

Available on the Unity Asset Store

Download it from the Asset Store, open Window → Package Manager → My Assets, click Import — that's the whole install. No git URL, no manual file copying, no dependencies to chase down.

Full installation guide →
Package Manager → My Assets → Hook UI
Download → Import → done.

Real HookUI code, not pseudocode

Modal popups in 4 lines

var data = new PromptData("Purchase", "Buy Sword?")
.WithIcon(swordSprite)
.WithPrimaryText("Buy ($50)")
.WithSecondaryText("Leave");

data.OnPrimary = TryBuy;

HookInAppNotifications.Show(data);

Decoupled events

// Anywhere in your game - no direct screen reference needed
HookSignalHub.Send("OnGoldUpdated");

// On a HookSignalListener component
public void OnGoldUpdated() => _goldLabel.text = $"{_gold}g";