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 scripts:

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.

Canal padrãoNome da aba
RBXGeneral Geral
RBXSystem Geral (combinado em uma aba única com RBXGeneral )
RBXTeam Equipe
RBXWhisperNome de usuário do outro jogador

Aparência da 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ência da 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ência das 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 chat, ú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

Mensagens de fontes não jogadoras

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 padrão do sistema 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.Por exemplo, você pode usar Metadata para identificar mensagens do sistema, mensagens de erro ou mensagens de sistemas específicos em sua experiência.

Sistema

Para entregar uma mensagem do sistema para o jogador local, como "discurso" de um sistema de endereçamento público, 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.

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.