Personalize a janela de chat

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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)
Core components of the text chat window.

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ãoNome 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 .

ChatWindowConfiguration instance in Explorer hierarchy.
PropriedadeDescriçãoPadrão
BackgroundColor3Color3 cor de fundo da janela de chat.[25, 27, 29]
BackgroundTransparencyTransparência do fundo da janela de bate-papo.0.3
FontFaceFont de texto da janela de bate-papo.BuilderSansMedium
TextColor3Color3 de texto da janela de bate-papo.[255, 255, 255]
TextSizeTamanho do texto da janela de chat.14
TextStrokeColor3Color3 da traça para o texto da janela de chat.[0, 0, 0]
TextStrokeTransparencyTransparência do traço para o texto da janela de chat.0.5
HorizontalAlignmentAlinhamento horizontal da janela de bate-papo.Left
VerticalAlignmentAlinhamento vertical da janela de bate-papo.Top
HeightScaleEscala de altura da janela de bate-papo em relação ao tamanho da tela.1
WidthScaleEscala 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 .

ChatInputBarConfiguration instance in Explorer hierarchy.
PropriedadeDescriçãoPadrão
BackgroundColor3Color3 cor de fundo da barra de entrada de chat.[25, 27, 29]
BackgroundTransparencyTransparência do plano de fundo da barra de entrada de chat.0.2
FontFaceFont de texto de entrada de chat.BuilderSansMedium
PlaceholderColor3Color3 de texto de entrada de bate-papo de espaço reservado.[178, 178, 178]
TextColor3Color3 do texto de entrada de bate-papo inserido pelo jogador.[255, 255, 255]
TextSizeTamanho do texto de entrada do chat.14
TextStrokeColor3Color3 cor do traço do texto de entrada de chat.[0, 0, 0]
TextStrokeTransparencyTransparência do traço para o texto de entrada do chat.0.5
AutocompleteEnabledSe 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
KeyboardKeyCodeJogadores 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 .

ChannelTabsConfiguration instance in Explorer hierarchy.
PropriedadeDescriçãoPadrão
BackgroundColor3Color3 cor de fundo das abas do canal.[25, 27, 29]
BackgroundTransparencyTransparência do plano de fundo das abas do canal.0
HoverBackgroundColor3Color3 cor de fundo das abas quando você passa sobre elas.[125, 125, 125]
FontFaceFont para o texto nas abas de canal.BuilderSansBold
TextColor3Color3 de texto em uma aba não selecionada.[175, 175, 175]
SelectedTabTextColor3Color3 de texto em uma aba selecionada.[255, 255, 255]
TextSizeTamanho do texto nas abas de canal.18
TextStrokeColor3Color3 cor do traço do texto nas abas de canal.[0, 0, 0]
TextStrokeTransparencyTransparê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.

Colored user name in the chat window.
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.

Gradient user name in the chat window.
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.

Rich text customization of user name in the chat window.
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.LocalPlayer
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
local PREFIX = "[Guide] Welcome "
-- Envie "mensagem do sistema" para o jogador com o nome de exibição anexado
generalChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)
Image showing a basic system message in the chat window.

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:

MetadadosDescrição
Roblox.ChatTranslation.ChatWindow.Sistema de MensagemIndica que o sistema pode traduzir mensagens de bate-papo para o Jogador
Roblox.Notification.Friend.Juntou-seExibido quando um amigo do Jogador se juntar à experiência
Roblox.MessageStatus.Aviso/advertência.FloodcheckedExibido quando a mensagem de bate-papo enviada pelo Jogador foi limitada pela taxa pelo Servidor
Roblox.MessageStatus.Aviso/advertência.TextFilterFailedExibido 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álidasExibido 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 LongaExibido quando o Jogador envia uma Mensagem de Texto com conteúdo que é muito longo
Roblox.MessageStatus.Aviso/advertência.DesconhecidoExibe quando o sistema falha em enviar a Mensagem de Texto do Jogador por uma razão desconhecida
Roblox.Ajuda.InfoExibe a resposta do Comando de TextChat do RBXHelpCommand
Roblox.Versão.InfoExibe a resposta do Comando de TextChat da RBXVersionCommand
Roblox.Team.Success.Agora na equipeExibido quando a equipe do Jogador muda
Roblox.Team.Error.Não é possível conversar em equipe se não estiver na equipeExibido 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.SentExibido ao entrar em um Canal de Texto Sussurrado
Roblox.Whisper.Error.Não pode sussurrar para si mesmoUma resposta de erro do RBXWhisperCommand TextChatCommand
Roblox.Whisper.Error.TargetNão existeUma resposta de erro do RBXWhisperCommand TextChatCommand
Roblox.Whisper.Erro.MuitosEncontrosUma resposta de erro do RBXWhisperCommand TextChatCommand
Roblox.Whisper.Error.DesconhecidoUma resposta de erro do RBXWhisperCommand TextChatCommand
Roblox.Emote.Error.Não existeUma resposta de erro do RBXEmoteCommand TextChatCommand
Roblox.Emote.Error.UserEmotesNão habilitadosUma resposta de erro do RBXEmoteCommand TextChatCommand
Roblox.Emote.Error.Temporariamente IndisponívelUma resposta de erro do RBXEmoteCommand TextChatCommand
Roblox.Emote.Error.Não SuportadoUma resposta de erro do RBXEmoteCommand TextChatCommand
Roblox.Emote.Erro.Mudar para R15Uma resposta de erro do RBXEmoteCommand TextChatCommand
Roblox.Emote.Error.Animação JogandoUma resposta de erro do RBXEmoteCommand TextChatCommand
Roblox.Mute.Error.JogadorDesconhecidoUma resposta de erro do RBXMuteCommand TextChatCommand
Roblox.Mute.Error.MultipleMatchesUma resposta de erro do RBXMuteCommand TextChatCommand
Roblox.Mute.Error.Não é possível silenciar a si mesmoUma resposta de erro do RBXMuteCommand TextChatCommand
Roblox.Mute.Info.SuccessUma resposta de sucesso do RBXMuteCommand TextChatCommand
Roblox.Unmute.Error.JogadorDesconhecidoUma resposta de erro do RBXUnmuteCommand TextChatCommand
Roblox.Unmute.Error.MultipleMatchesUma resposta de erro do RBXUnmuteCommand TextChatCommand
Roblox.Unmute.Error.Não é possível silenciar a si mesmoUma resposta de erro do RBXUnmuteCommand TextChatCommand
Roblox.Unmute.Info.SuccessUma 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)
Image showing a knight statue NPC broadcasting a chat message to the chat window, along with a chat bubble above its head.