Skip to content
pluginv1.0Blueprint only

ScarChat

Multiplayer text chat system.

A fully replicated, real-time text chat system built in Unreal Engine with Blueprints only. Server-authoritative message handling, client-side UI updates and modular widgets that work with EOS, Steam, dedicated servers and LAN. No plugins and no C++, just clean Blueprints.

Engine support
Unreal Engine 5
Version
1.0
Backends
Steam, EOS, Dedicated Servers, LAN, Listen Servers

What you get

  • Server-authoritative message handling
  • Client-side UI updates
  • Modular widgets you can restyle
  • Copy-paste-friendly PlayerController logic
  • No plugins and no C++, just clean Blueprints

System overview

ScarChat is split into three layers.

LayerWhat it does
UI WidgetsDisplay messages, input text, and animate the chat box.
Player ControllerSends and receives messages.
Server LogicDistributes chat messages to all players.

The flow

Player types  ->  Client sends to Server  ->  Server sends to all Players  ->  Each client updates UI

This keeps the system secure, lag-free, and compatible with all multiplayer backends.

UI widgets

There are two widgets.

WBP_ChatPannel

This is the main chat UI. It contains:

  • Border, the chat box background
  • ScrollBox (ChatScroll), holds all messages
  • Vertical Box, inside the scroll box, where messages are added
  • Editable Text Box (ChatInput), where the player types
  • Button (Hide/Unhide), toggles chat visibility
  • Animation (Hide_UnhideChatBox), the slide in and out effect

This widget is created once per player on BeginPlay.

WBP_ChatMessage

This is one single chat line. It contains:

  • Horizontal Box
  • Text: PlayerName
  • Text: the colon separator
  • Text: ChatMessage

This widget is spawned every time someone sends a message.

Widget logic

Chat message widget (WBP_ChatMessage)

On Event Construct:

  • SetText(PlayerName)
  • SetText(ChatMessage)

This means every message widget is self-contained and clean.

Chat panel widget (WBP_ChatPannel)

When a new message arrives:

  1. 01Create WBP_ChatMessage.
  2. 02Set Player Name (Device Name).
  3. 03Set Chat Message.
  4. 04Add it to the Vertical Box.
  5. 05Scroll to the bottom.

That is what the UpdateChat event does.

Sending messages (client side)

Inside WBP_ChatPannel, the ChatInput uses the OnTextCommitted event, which triggers when the player presses Enter.

  1. 01Check if the commit method is Enter.
  2. 02Get Owning Player.
  3. 03Cast to your BP_Chat_PlayerController.
  4. 04Get Player Name from PlayerState.
  5. 05Call Server_SubmitChat(PlayerName, Message).
  6. 06Clear the input box.

The client never talks to other clients. It only talks to the server.

Server side logic

In the PlayerController, Server_SubmitChat runs on the server. It does the following:

  1. 01Gets GameState, then PlayerArray.
  2. 02Loops through all players.
  3. 03For each player, gets their PlayerController and calls Client_UpdateChat(PlayerName, Message).

This guarantees every player receives the message.

Client side receive

Client_UpdateChat runs on each client. This event:

  1. 01Gets WBP_ChatPannelRef.
  2. 02Calls UpdateChat.
  3. 03Passes Player Name and Message.
  4. 04The widget creates the UI.

That is why messages instantly appear on every screen.

Chat box animation

The Hide and Unhide system runs Button, then FlipFlop, then Play Animation.

  • A plays the animation in reverse
  • B plays the animation forward

This lets players focus on gameplay without losing the chat.

Auto UI setup

On PlayerController BeginPlay:

  1. 01Check Is Local Player Controller.
  2. 02Create WBP_ChatPannel. You can call the widget anywhere else as well.
  3. 03Save the reference.
  4. 04Add to Viewport.

So every player automatically gets a chat UI.

Why this system works everywhere

Because it:

  • Uses PlayerController replication
  • Uses the GameState PlayerArray
  • Never uses session-specific APIs

That is why it works with:

  • EOS
  • Steam
  • Dedicated Servers
  • LAN
  • Listen Servers

No changes needed between backends.

How developers use it

  1. 01Copy the PlayerController Blueprint logic and paste it into your player controller.
  2. 02Assign WBP_ChatPannel.
  3. 03Drop it into your project.

No re-wiring required.

Stuck on something?

We answer every serious message ourselves. Discord is the fastest way to get an answer from the person who built the plugin.