[id="C4276659642"] .page-layout { align-items: center; } [id="C4276659642"] .page-layout { align-items: center; }


GUI Demo◎

UI made for a third person shooter project.

👥9 People
🕗 2 Weeks  
🛠️ Unreal Engine, Blueprints, SMG, Slate UI
🧢UI Technical Designer

[↗]🔗 Download macOS Demo

   

The GUI Demo  was prepared as a freelance project for a small studio working an a third person game. I was the only UI fellow on the team. This project focused on building a modular, data-driven UI stack in Unreal Engine 5. The work covers a skill tree system, radial menu, animated HUD elements, custom shaders, and supporting UI effects. The emphasis was on extensibility, visual clarity, and minimizing hard-coded logic.

1. Skill Tree System

1.1 Node Architecture

  • Each skill is a self-contained Widget Blueprint.
  • Nodes are manually placed for layout control, but all behavior is data-driven.
  • Every node stores:
    • NodeName
    • SkillState (Locked, Available, Purchased)
    • An array of node connections, allowing multiple outgoing links per node.
  • Visual state (color, interactivity, animation) is derived entirely from SkillState.

1.2 Per-Node Material Instances

  • Each node owns its own Material Instance Dynamic for the UnlockFill child.
  • MID creation happens in OnConstruct of the node widget.
  • This avoids shared state issues where adjusting one node would affect all others.
  • Scalar parameters on the MID are driven at runtime for unlock progress and feedback.

1.3 Unlock Interaction Flow

  • Input is handled in the Player Controller.
  • The Skill Tree widget exposes a CurrentSkillNode reference.
  • Holding the input key:
    • Starts a timer-driven fill on the active node.
    • Progresses from 0 → 1 over a fixed duration.
  • Releasing early:
    • Reverses the fill back to a negative baseline.
  • Successful completion:
    • Triggers a short delay.
    • Resets the fill.
    • Updates node state and visuals.
  • No Event Tick is used. All time-based behavior is timer-driven for predictability and performance.

Blueprint : Skill Node Unlock Logic


2. Line Drawer for Skill Tree Connections

2.1 Motivation

  • Early attempts tied line rendering directly to node widgets.
  • This caused scope, geometry, and repaint issues.
  • The final solution separates rendering responsibility into a dedicated widget.

2.2 Final Approach

  • A dedicated Line Drawer Widget sits above the node canvas.
  • It overrides OnPaint to render all connections in one pass.
  • The Skill Tree widget:
    • Collects all nodes.
    • Resolves their connection data.
    • Supplies start and end positions to the Line Drawer.

2.3 Technical Details

  • Absolute positions are derived from widget geometry at paint time.
  • Lines are colored based on node state.
  • The system supports:
    • Multiple outgoing connections per node.
    • Directional clarity without duplicating lines.
  • This approach avoids per-node draw calls and keeps layout logic centralized.
Blueprint : Line Drawer



3. Radial Menu System

3.1 Data-Driven Design

  • The radial menu is fully backed by a Data Table.
  • Each row represents a weapon and includes:
    • Icon
    • Display name
    • Index / slot metadata
  • The UI does not assume a fixed number of weapons.
  • Adding or removing weapons only requires editing data, not Blueprint logic.
  • All weapon stats are also stored in a data table, that way if weapons are upgraded in the future, data management won’t be tricky

3.2 Runtime Behavior

  • The menu dynamically spawns segments based on table size.
  • Selection logic resolves directly to data rows.



4. HUD Elements

4.1 Health Bar with Pulse Logic

  • Health is visualized using a heart-based bar.
  • A pulse animation is driven by health percentage:
    • Faster pulse at low health.
    • Slower pulse at high health.
  • The effect is parameterized rather than hard-coded, allowing easy tuning.


4.2 Mini-Map and Compass

  • Mini-map and compass are implemented as independent widgets.
  • Orientation updates are driven by player rotation.
  • Visual assets were authored externally and animated inside Unreal.

4.3 Other Tidbits

  • I also created an achievement alert that shows up when an achievement is unlocked along with an ammo indicator which switches weapons when a new one is selected from the radial menu, I also created a reticle and toast alert that can be used to show helpful input prompts.
  • Visual assets were authored externally and animated inside Unreal.




5. UI Transitions and Glitch Shader

5.1 Glitch Entry Effect

  • The skill tree is introduced using a custom glitch material.
  • The shader uses:
    • UV distortion
    • Time-based noise
    • Masked blending for controlled transitions
  • Exposed parameters allow the effect to be reused across UI elements.

5.2 Usage

  • The skill tree remains invisible until the glitch transition completes.
  • The same material can be reused for exits or other UI reveals.



Blueprint : Glitch Material Graph



6. Text De-Scrambler (Typewriter Effect)

6.1 System Overview

  • Text is revealed progressively using a timer-driven approach.
  • Characters are temporarily replaced with randomized glyphs.
  • Locked characters stabilize over time until the final string is fully revealed.

6.2 Technical Notes

  • No per-frame ticking.
  • Timers control:
    • Character reveal rate.
    • Scramble duration.
  • The system supports:
    • Variable speeds.
    • Interrupts and resets.


Blueprint : De-Scramble Text


7. Visual Assets and Animation Workflow

  • All UI assets were designed in Adobe Illustrator.
  • Widgets are animated directly in Unreal’s UI animation system.


While I could have implemented this in Unity by spending a few hours less on the project, the team I worked for was working in Unreal Engine. Unreal provided deeper control over rendering, materials, and widget lifecycle, and made the process more technically engaging.😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌😌

thanks for visiting
made with 🩷and ☕ on a beautiful June afternoon🌻