O sistema de chat de texto in-game, alimentado pelo TextChatService, permite que os jogadores se comuniquem e socializem facilmente entre si em jogos ao vivo. Além de suportar o chat de texto padrão, você pode customizar a interface do usuário do front-end.
Configuração da janela de chat
A janela de chat geral consiste em:
- Janela de chat
- Barra de entrada
- Abas de canal (opcional)

As abas de canal estão desativadas por padrão e cada componente pode ser ativado ou desativado no Studio ou através de script:
Na janela do Explorer, expanda o ramo TextChatService e selecione ChatWindowConfiguration, ChatInputBarConfiguration ou ChannelTabsConfiguration. Em seguida, ative ou desative o componente na janela de Properties.

Quando ChannelTabsConfiguration está ativada, cada TextChannel padrão aparece em uma aba conforme destacado na tabela a seguir. Além disso, cada TextChannel personalizada cria uma aba correspondente à propriedade Name do canal.
| Canal padrão | Nome da aba |
|---|---|
| RBXGeneral | Geral |
| RBXSystem | Geral (combinado em uma única aba com RBXGeneral) |
| RBXTeam | Equipe |
| RBXWhisper | Nome de usuário do outro jogador |
Aparência da janela
A aparência da janela de chat geral é personalizável através de ChatWindowConfiguration.

| Propriedade | Descrição | Padrão |
|---|---|---|
| BackgroundColor3 | Cor de fundo Color3 da janela de chat. | [25, 27, 29] |
| BackgroundTransparency | Transparência do fundo da janela de chat. | 0.3 |
| Enabled | Se deve mostrar a janela de chat padrão. Defina como false para ocultar. | true |
| FontFace | Font do texto da janela de chat. | BuilderSansMedium |
| TextColor3 | Color3 do texto da janela de chat. | [255, 255, 255] |
| TextSize | Tamanho do texto da janela de chat. | 14 |
| TextStrokeColor3 | Color3 do contorno do texto da janela de chat. | [0, 0, 0] |
| TextStrokeTransparency | Transparência do contorno do texto da janela de chat. | 0.5 |
| HorizontalAlignment | Alinhamento horizontal da janela de chat. | Left |
| VerticalAlignment | Alinhamento vertical da janela de chat. | Top |
| HeightScale | Escala da altura da janela de chat em relação ao tamanho da tela. | 1 |
| WidthScale | Escala da largura da janela de chat em relação ao tamanho da tela. | 1 |
Aparência da barra de entrada
A aparência da barra de entrada do chat é personalizável através de ChatInputBarConfiguration.

| Propriedade | Descrição | Padrão |
|---|---|---|
| BackgroundColor3 | Cor de fundo Color3 da barra de entrada do chat. | [25, 27, 29] |
| BackgroundTransparency | Transparência do fundo da barra de entrada do chat. | 0.2 |
| FontFace | Font do texto de entrada do chat. | BuilderSansMedium |
| PlaceholderColor3 | Color3 do texto de entrada de chat do espaço reservado. | [178, 178, 178] |
| TextColor3 | Color3 do texto de entrada de chat inserido pelo jogador. | [255, 255, 255] |
| TextSize | Tamanho do texto de entrada do chat. | 14 |
| TextStrokeColor3 | Color3 cor do contorno do texto de entrada do chat. | [0, 0, 0] |
| TextStrokeTransparency | Transparência do contorno para o texto de entrada do chat. | 0.5 |
| AutocompleteEnabled | Se o sistema de chat de texto mostra opções de autocompletar para emojis e comandos. Emojis são completados automaticamente digitando : seguido de caracteres que não sejam espaço, enquanto comandos são completados automaticamente digitando /. | true |
| KeyboardKeyCode | Tecla adicional que os jogadores podem pressionar para ativar o foco na barra de entrada de chat padrão. | Slash |
Aparência das abas de canal
A aparência das abas de canal é personalizável através de ChannelTabsConfiguration.

| Propriedade | Descrição | Padrão |
|---|---|---|
| BackgroundColor3 | Cor de fundo Color3 das abas de canal. | [25, 27, 29] |
| BackgroundTransparency | Transparência do fundo das abas de canal. | 0 |
| HoverBackgroundColor3 | Cor de fundo Color3 das abas ao passar o mouse sobre elas. | [125, 125, 125] |
| FontFace | Font para o texto nas abas de canal. | BuilderSansBold |
| TextColor3 | Color3 do texto em uma aba não selecionada. | [175, 175, 175] |
| SelectedTabTextColor3 | Color3 do texto em uma aba selecionada. | [255, 255, 255] |
| TextSize | Tamanho do texto nas abas de canal. | 18 |
| TextStrokeColor3 | Color3 cor do contorno do texto nas abas de canal. | [0, 0, 0] |
| TextStrokeTransparency | Transparência do contorno para o texto nas abas de canal. | 1 |
Personalizar mensagens
Você pode personalizar a aparência dos corpos de mensagens de chat e dos prefixos usando ChatWindowMessageProperties e os callbacks TextChatService.OnChatWindowAdded sem sobrescrever a UI existente. As opções de personalização permitem que você modifique a aparência das mensagens de chat para combinar com o tema do seu jogo, e você também pode classificar ou destacar mensagens de diferentes grupos de usuários colorindo prefixos ou adicionando tags de chat.
Colorir nomes de usuários
Quando um usuário envia uma mensagem de chat, seu DisplayName é exibido como a parte do prefixo da mensagem. Por padrão, o nome de cada usuário é colorido de acordo com seu Player.TeamColor, mas você pode mudar as cores dos nomes de chat usando ChatWindowMessageProperties e OnChatWindowAdded. O seguinte LocalScript em StarterPlayerScripts atribui uma cor predeterminada a cada usuário, escolhendo aleatoriamente de uma tabela de cores RGB.

LocalScript - Cores Aleatórias para Nomes de Usuário
local TextChatService = game:GetService("TextChatService")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local nameColors = {
Color3.fromRGB(255, 0, 0),
Color3.fromRGB(0, 255, 0),
Color3.fromRGB(0, 0, 255),
Color3.fromRGB(255, 255, 0),
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
local textSource = message.TextSource
if textSource then
local index: number = (textSource.UserId % #nameColors) + 1
local randomColor: Color3 = nameColors[index]
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
properties.PrefixTextProperties.TextColor3 = randomColor
end
return properties
end
Você também pode aplicar gradientes de cor e transparência para colorir prefixos de mensagens usando UIGradient.

Cores de Nomes de Usuário em Gradiente
local TextChatService = game:GetService("TextChatService")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 255))
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
local textSource = message.TextSource
if textSource then
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
gradient:Clone().Parent = properties.PrefixTextProperties
end
return properties
end
Personalização de texto rico
Tags de cor de fonte de texto rico podem ser usadas para formatar mensagens de chat, útil se você quiser aplicar formatação a partes muito específicas da mensagem. Observe que texto rico não suporta gradientes, mas o seguinte exemplo de código mostra como você pode mover o nome de usuário (armazenado em TextChatMessage.PrefixText) para o corpo da mensagem e, em seguida, aplicar tagging de texto rico apenas à parte do nome.

Personalização de Texto Rico
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 255))
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
if message.TextSource then
properties.PrefixText = "[VIP]"
properties.Text = string.format("<font color='#00ffff'>%s</font>", message.PrefixText) .. " " .. message.Text
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
gradient:Clone().Parent = properties.PrefixTextProperties
end
return properties
end
Mensagens de fontes não-jogadoras
Quando TextChatService.CreateDefaultTextChannels está true, um dos canais de texto padrão é o canal RBXSystem. Os scripts de chat padrão exibem automaticamente mensagens do sistema neste canal. Você pode personalizar a aparência destas mensagens usando o callback TextChannel.OnIncomingMessage.
Você pode querer personalizar ou alterar as mensagens do sistema que são automaticamente emitidas pelo sistema de chat. Como as mensagens do sistema padrão são localizadas para os usuários, você deve referenciá-las pelo TextChatMessage.Metadata em seus callbacks de chat de texto se desejar personalizar sua aparência. Por exemplo, você poderia usar Metadata para identificar mensagens do sistema, mensagens de erro ou mensagens de sistemas específicos no seu jogo.
Sistema
Para entregar uma mensagem do sistema ao jogador local, como "discurso" de um sistema de endereçamento público, chame DisplaySystemMessage() a partir do canal padrão RBXGeneral com um prefixo antes do nome de exibição do jogador.
Script Clientelocal Players = game:GetService("Players")local TextChatService = game:GetService("TextChatService")local player = Players.LocalPlayerlocal generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGenerallocal PREFIX = "[Guia] Bem-vindo "-- Enviar "mensagem do sistema" para o jogador com seu nome de exibição anexadogeneralChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)

NPC/objeto
Você também pode estilizar diálogos de não-jogadores e adicionar bolhas de chat para fazer parecer que as mensagens estão vindo de um NPC ou objeto dentro do mundo 3D.
Script Cliente
local TextChatService = game:GetService("TextChatService")
local Workspace = game:GetService("Workspace")
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
TextChatService.OnIncomingMessage = function(textChatMessage: TextChatMessage)
local properties = Instance.new("TextChatMessageProperties")
-- Verificar mensagens do sistema que contêm metadados
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- Adicionar prefixo para fazer a mensagem parecer que foi enviada por um jogador
properties.PrefixText = string.format("<font color='#%s'>%s: </font>", "#50C999", textChatMessage.Metadata)
-- Adicionar bolha de chat
TextChatService:DisplayBubble(Workspace.Statue, textChatMessage.Text)
end
return properties
end
local message = "Bem-vindo! Eu serei seu guia."
local speakerName = "Cavaleiro Antigo"
generalChannel:DisplaySystemMessage(message, speakerName)
