O sistema de chat de texto na experiência, alimentado por TextChatService, permite que os jogadores se comuniquem facilmente e socializem uns com os outros em experiências ao vivo. Além de suportar o chat de texto padrão, você pode personalizar a interface do usuário front-end.
Configuração da Janela de Bate-papo
A janela de chat geral consiste em janela de chat, uma barra de entrada e opcionais guias de canal.
As guias de canal são desativadas por padrão e cada componente pode ser alternado para ligado/desligado no Studio ou através de scripting:
Diretamente na janela Explorer do Studio, expanda a filial TextChatService e selecione ChatWindowConfiguration, 1> Class.ChatInputBarConfiguration1> ou 4> Class.ChannelTabsConfiguration4>. Em seguida, na janela 7> Propriedades7>, ative ou desative o componente.
Quando ChannelTabsConfiguration é ativado, cada padrão TextChannel aparecerá em uma aba como descrito na tabela a seguir. Além disso, cada 1> personalizado1> 4> Class.TextChannel4> criará uma aba correspondente à propriedade do canal
Canal Padrão | Nome da Aba |
---|---|
RBXGeneral | Geral |
Sistema RBX | Geral (combinado em uma única aba com RBXGeneral ) |
Equipe RBX | Equipe |
RBXWhisper | Nome de usuário de outro jogador |
Aparência da Janela
A aparência geral da janela de chat é 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 chat. | 0.3 |
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 traço para o texto da janela de chat. | [0, 0, 0] |
TextStrokeTransparency | Transparência do traço para 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 de altura da janela de chat em relação ao tamanho da tela. | 1 |
WidthScale | Escala de 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 | Color3 cor de fundo da barra de entrada de 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 de texto de entrada de chat de espaço reservado. | [178, 178, 178] |
TextColor3 | Color3 do texto de entrada de chat do jogador. | [255, 255, 255] |
TextSize | Tamanho do texto de entrada do chat. | 14 |
TextStrokeColor3 | Color3 cor de traço do texto de entrada do chat. | [0, 0, 0] |
TextStrokeTransparency | Transparência do traço para texto de entrada de chat. | 0.5 |
AutocompleteEnabled | Se o sistema de chat de texto mostrar opções de autocompletar para emojis e comandos. Os emojis são autocompletados ao digitar : seguido por caracteres não-brancos, enquanto os comandos são autocompletados ao digitar /. | true |
KeyboardKeyCode | Jogadores adicionais podem pressionar para focar na barra de entrada de chat padrão. | Slash |
Aparência das guias de canal
A aparência das guias de canal é personalizável através de ChannelTabsConfiguration.
Propriedade | Descrição | Padrão |
---|---|---|
BackgroundColor3 | Color3 cor de fundo das abas de canal. | [25, 27, 29] |
BackgroundTransparency | A transparência do fundo das guias de canais. | 0 |
HoverBackgroundColor3 | Color3 cor de fundo das abas ao passar o mouse sobre elas. | [125, 125, 125] |
FontFace | Font para o texto nas abas de canal. | BuilderSansBold |
TextColor3 | Color3 de texto em uma guia não selecionada. | [175, 175, 175] |
SelectedTabTextColor3 | Color3 de texto em uma aba selecionada. | [255, 255, 255] |
TextSize | Tamanho do texto nas guias de canal. | 18 |
TextStrokeColor3 | Color3 cor de traça do texto nas abas de canal. | [0, 0, 0] |
TextStrokeTransparency | Transparência do traço para o texto nas abas de canal. | 1 |
Personalizando Mensagens
Você pode personalizar a aparência de corpos de mensagens de chat e prefixos usando ChatWindowMessageProperties e TextChatService.OnChatWindowAdded chamadas sem sobrescrever o tema existente da UI. As opções de personalização permitem que você modifique a aparência das mensagens de chat para corresponder ao tema da sua experiência e você também pode classificar ou destacar mensagens de diferentes grupos
Colorindo Nomes de Usuários
Quando um usuário envia uma mensagem de chat, o seu DisplayName é ex
LocalScript - Cores de Nome de Usuário Aleató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 cores e transparência aos prefixos de mensagem 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
Adicionando Tags de Chat
Se sua experiência tiver usuários com atributos especiais, como status VIP, você pode anexar tags de chat emoldurados em páginas de mensagens de usuários para destacar suas mensagens. O seguinte Class.LocalScript em Class.StarterPlayerScripts examina
Anexando Tags de Chat
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
if message.TextSource then
local player = Players:GetPlayerByUserId(message.TextSource.UserId)
if player:GetAttribute("IsVIP") then
properties.PrefixText = "[VIP] " .. message.PrefixText
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
properties.PrefixTextProperties.TextColor3 = Color3.fromRGB(255, 125, 50)
end
end
return properties
end
Personalização de Texto Rico
Ricos de texto tags de cor de fonte podem ser usados para formatar mensagens de chat, úteis se você quiser aplicar formatação em partes específicas da mensagem. Observe que ricos de texto não suportam gradientes, mas a seguinte amostra de código mostra como você pode mover o nome do usuário (armazenado em TextChatMessage.PrefixText ) para o corpo da mensagem e depois
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
Enviando Mensagens de Não-Jogadores
Em alguns cenários de design, você pode querer mostrar diálogo não jogador na janela de chat, como "conversa" de um sistema de endereço público ou um personagem não jogador.
Sistema
Para entregar uma mensagem de sistema não estilizada para o jogador local, simplesmente chame Class.TextChannel:DisplaySystemMessage()|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 display apresentadogeneralChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)
NPC/Objeto
Você também pode estilizar diálogos não jogáveis e adicionar burbujas de chat para fazer com que pareça que as mensagens estão vindo de um NPC ou objeto dentro do mundo 3D.
Script do Cliente
local TextChatService = game:GetService("TextChatService")
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
TextChatService.OnIncomingMessage = function(textChatMessage: TextChatMessage)
local properties = Instance.new("TextChatMessageProperties")
-- Verifique se há mensagens do sistema que contêm metadados
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- Adicione um 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 chat de bolha
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)