O sistema de bate-papo de texto na experiência, alimentado por TextChatService, permite que os jogadores se comuniquem e socializem facilmente uns com os outros em experiências ao vivo.Além de suportar o chat de texto padrão, você pode personalizar a interface de usuário 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 são desativadas por padrão e cada componente pode ser ativado e desativado no Studio ou através de scripting:
Na janela Explorer, expanda a ramificação TextChatService e selecione ChatWindowConfiguration , ChatInputBarConfiguration ou ChannelTabsConfiguration.Então ative ou desative o componente na janela Propriedades.

Quando ChannelTabsConfiguration é habilitado, cada padrão TextChannel aparece em uma aba como descrito na seguinte tabela.Além disso, cada personalizado TextChannel cria uma aba correspondente à propriedade do canal Name.
canalpadrão | Nome da aba |
---|---|
RBX Geral | Geral |
Sistema RBX | Geral (combinado em uma aba única com RBXGeneral ) |
Equipe RBX | Equipe |
SBXSilêncio | Nome de usuário do outro jogador |
aparênciada janela
A aparência da janela de chat geral é personalizável através de ChatWindowConfiguration .

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

Propriedade | Descrição | Padrão |
---|---|---|
BackgroundColor3 | Color3 cor de fundo da barra de entrada de chat. | [25, 27, 29] |
BackgroundTransparency | Transparência do plano de fundo da barra de entrada de chat. | 0.2 |
FontFace | Font de texto de entrada de chat. | BuilderSansMedium |
PlaceholderColor3 | Color3 de texto de entrada de bate-papo de espaço reservado. | [178, 178, 178] |
TextColor3 | Color3 do texto de entrada de bate-papo inserido pelo jogador. | [255, 255, 255] |
TextSize | Tamanho do texto de entrada do chat. | 14 |
TextStrokeColor3 | Color3 cor do traço do texto de entrada de chat. | [0, 0, 0] |
TextStrokeTransparency | Transparência do traço para o texto de entrada do chat. | 0.5 |
AutocompleteEnabled | Se o sistema de chat de texto mostra opções de preenchimento automático para emojis e comandos.Emojis são preenchidos automaticamente ao digitar : seguido por caracteres não em branco, enquanto os comandos são preenchidos automaticamente ao digitar /. | true |
KeyboardKeyCode | Jogadores chave adicionais podem pressionar para ativar o foco na barra de entrada de chat padrão. | Slash |
aparênciadas abas de canal
A aparência das abas do canal é personalizável através de .

Propriedade | Descrição | Padrão |
---|---|---|
BackgroundColor3 | Color3 cor de fundo das abas do canal. | [25, 27, 29] |
BackgroundTransparency | Transparência do plano de fundo das abas do canal. | 0 |
HoverBackgroundColor3 | Color3 cor de fundo das abas quando você passa sobre elas. | [125, 125, 125] |
FontFace | Font para o texto nas abas de canal. | BuilderSansBold |
TextColor3 | Color3 de texto em uma aba não selecionada. | [175, 175, 175] |
SelectedTabTextColor3 | Color3 de texto em uma aba selecionada. | [255, 255, 255] |
TextSize | Tamanho do texto nas abas de canal. | 18 |
TextStrokeColor3 | Color3 cor do traço do texto nas abas de canal. | [0, 0, 0] |
TextStrokeTransparency | Transparência do traço para texto nas abas de canal. | 1 |
Personalizar mensagens
Você pode personalizar a aparência de corpos de mensagens de chat e prefixos usando ChatWindowMessageProperties e TextChatService.OnChatWindowAdded chamadas de retorno sem substituir a UI existente.As opções de personalização permitem que você modifique a aparência das mensagens de bate-papo para combinar com o tema da sua experiência e você também pode classificar ou destacar mensagens de diferentes grupos de usuários colorindo prefixos ou adicionando tags de bate-papo.
Nomes de usuários coloridos
Quando um usuário envia uma mensagem de bate-papo, sua DisplayName é exibida 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 alterar 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 de Nome de Usuário Aleatórias
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 a prefixos de mensagens de cores usando UIGradient.

Cores de Nome de Usuário 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
As etiquetas de cores de texto rico podem ser usadas para formatar mensagens de bate-papo, úteis se você quiser aplicar formatação a partes muito específicas da mensagem.Observe que o texto rico não suporta gradientes, mas o seguinte exemplo de código mostra como você pode mover o nome do usuário (armazenado em TextChatMessage.PrefixText ) para o corpo da mensagem e depois aplicar a etiqueta 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
Enviar mensagens de fontes não jogadoras
Às vezes, você pode querer mostrar diálogo não jogador no campo de bate-papo, como "discurso" de um sistema de endereços públicos ou um personagem não jogador.
Sistema
Para entregar uma mensagem do sistema ao jogador local, chame DisplaySystemMessage() do canal padrão RBXGeneral com um prefixo antes do nome de exibição do jogador.
Script do Cliente
local Players = game:GetService("Players")local TextChatService = game:GetService("TextChatService")local player = Players.LocalPlayerlocal generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGenerallocal PREFIX = "[Guide] Welcome "-- Envie "mensagem do sistema" para o jogador com o nome de exibição anexadogeneralChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)

Para um guia mais detalhado sobre como personalizar a aparência de mensagens do sistema, veja Personalizando mensagens do sistema.
Mensagens do sistema padrão
Quando TextChatService.CreateDefaultTextChannels é 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 dessas mensagens usando o TextChannel.OnIncomingMessage retorno de chamada.
Você pode querer personalizar ou alterar as mensagens do sistema que são emitidas automaticamente pelo sistema de chat.Como as mensagens do sistema padrão são localizadas para os usuários, você deve referenciá-las por TextChatMessage.Metadata em seus chamados de chat de texto se quiser personalizar sua aparência.
Abaixo está uma referência das mensagens padrão do sistema que são emitidas pelo sistema de chat:
Metadados | Descrição |
---|---|
Roblox.ChatTranslation.ChatWindow.Sistema de Mensagem | Indica que o sistema pode traduzir mensagens de bate-papo para o Jogador |
Roblox.Notification.Friend.Juntou-se | Exibido quando um amigo do Jogador se juntar à experiência |
Roblox.MessageStatus.Aviso/advertência.Floodchecked | Exibido quando a mensagem de bate-papo enviada pelo Jogador foi limitada pela taxa pelo Servidor |
Roblox.MessageStatus.Aviso/advertência.TextFilterFailed | Exibido quando o TextChatMessage enviado pelo Jogador não pôde ser exibido devido a um problema de filtro de texto |
Roblox.MessageStatus.Aviso/advertência.Configurações de Privacidade Inválidas | Exibido quando as configurações de privacidade do Jogador os impedem de enviar uma Mensagem de Chat de Texto |
Roblox.MessageStatus.Aviso/advertência.Mensagem Muito Longa | Exibido quando o Jogador envia uma Mensagem de Texto com conteúdo que é muito longo |
Roblox.MessageStatus.Aviso/advertência.Desconhecido | Exibe quando o sistema falha em enviar a Mensagem de Texto do Jogador por uma razão desconhecida |
Roblox.Ajuda.Info | Exibe a resposta do Comando de TextChat do RBXHelpCommand |
Roblox.Versão.Info | Exibe a resposta do Comando de TextChat da RBXVersionCommand |
Roblox.Team.Success.Agora na equipe | Exibido quando a equipe do Jogador muda |
Roblox.Team.Error.Não é possível conversar em equipe se não estiver na equipe | Exibido quando o Jogador ativa o RBXTeamCommand TextChatCommand sem estar em um Team |
Roblox.Whisper.Info.성공 | Exibido quando o Jogador inicia com sucesso uma conversa de Sussurro |
Roblox.Whisper.Welcome.Sent | Exibido ao entrar em um Canal de Texto Sussurrado |
Roblox.Whisper.Error.Não pode sussurrar para si mesmo | Uma resposta de erro do RBXWhisperCommand TextChatCommand |
Roblox.Whisper.Error.TargetNão existe | Uma resposta de erro do RBXWhisperCommand TextChatCommand |
Roblox.Whisper.Erro.MuitosEncontros | Uma resposta de erro do RBXWhisperCommand TextChatCommand |
Roblox.Whisper.Error.Desconhecido | Uma resposta de erro do RBXWhisperCommand TextChatCommand |
Roblox.Emote.Error.Não existe | Uma resposta de erro do RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.UserEmotesNão habilitados | Uma resposta de erro do RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.Temporariamente Indisponível | Uma resposta de erro do RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.Não Suportado | Uma resposta de erro do RBXEmoteCommand TextChatCommand |
Roblox.Emote.Erro.Mudar para R15 | Uma resposta de erro do RBXEmoteCommand TextChatCommand |
Roblox.Emote.Error.Animação Jogando | Uma resposta de erro do RBXEmoteCommand TextChatCommand |
Roblox.Mute.Error.JogadorDesconhecido | Uma resposta de erro do RBXMuteCommand TextChatCommand |
Roblox.Mute.Error.MultipleMatches | Uma resposta de erro do RBXMuteCommand TextChatCommand |
Roblox.Mute.Error.Não é possível silenciar a si mesmo | Uma resposta de erro do RBXMuteCommand TextChatCommand |
Roblox.Mute.Info.Success | Uma resposta de sucesso do RBXMuteCommand TextChatCommand |
Roblox.Unmute.Error.JogadorDesconhecido | Uma resposta de erro do RBXUnmuteCommand TextChatCommand |
Roblox.Unmute.Error.MultipleMatches | Uma resposta de erro do RBXUnmuteCommand TextChatCommand |
Roblox.Unmute.Error.Não é possível silenciar a si mesmo | Uma resposta de erro do RBXUnmuteCommand TextChatCommand |
Roblox.Unmute.Info.Success | Uma resposta de sucesso do RBXUnmuteCommand TextChatCommand |
NPC/objeto
Você também pode estilizar diálogo não-jogador e adicionar bolhas de chat para fazer parecer que as mensagens estão vindo de um NPC ou objeto dentro do mundo 3D.
Script do 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")
-- Verifique mensagens do sistema que contenham metadados
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- Adicione o 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 bate-papo de bolhas
TextChatService:DisplayBubble(Workspace.Statue, textChatMessage.Text)
end
return properties
end
local message = "Welcome! I will be your guide."
local speakerName = "Ancient Knight"
generalChannel:DisplaySystemMessage(message, speakerName)
