Il sistema chat di testo in-experience alimentato da TextChatService , consente ai giocatori di comunicare facilmente e socializzare tra loro in esperienze dal vivo. Oltre a supportare il chat di testo predefinito, puoi personalizzare l'interfaccia utente front-end.
Configurazione della finestra di chat
La finestra di chat generale consiste della finestra di chat, di una barra di input e di opzionali schede di canale.
Le schede del canale sono disabilitate per impostazione predefinita e ogni component può essere attivato/disattivato in Studio o tramite scripting:
Direttamente nella finestra Explorer di Studio, espandi il ramo TextChatService e seleziona ChatWindowConfiguration , 1> Class.ChatInputBarConfiguration1> o 4> Class.ChannelTabsConfiguration4> . Quindi, nella finestra 7> Proprietà7>, abilita o disabilita il component.
Quando ChannelTabsConfiguration è abilitato, ogni Class.TextChannel apparirà in una scheda come descritti nella seguente tabella. Inoltre, ogni TextChannel1> Class.TextChannel1> creerà una scheda corrispondente alla Proprietàdel canale 4> Class.Instance.
Canale predefinito | Nome della scheda |
---|---|
RBXGeneral | Generale |
RBXSystem | Generale (combinato in una singola scheda con RBXGeneral ) |
RBXTeam | Squadra |
RBXWhisper | Nome utente di un altro Giocatore |
Aspetto della finestra
L'aspetto della finestra di chat generale è personalizzabile attraverso Class.ChatWindowConfiguration.
Proprietà | Descrizione | Predefinito |
---|---|---|
BackgroundColor3 | Color3 colore di sfondo della finestra di chat. | [25, 27, 29] |
BackgroundTransparency | Trasparenza del background della finestra di chat. | 0.3 |
FontFace | Font di testo di chat. | BuilderSansMedium |
TextColor3 | Color3 di testo di chat. | [255, 255, 255] |
TextSize | Dimensione del testo della finestra di chat. | 14 |
TextStrokeColor3 | Color3 del tratto per il testo della finestra di chat. | [0, 0, 0] |
TextStrokeTransparency | Trasparenza del tratto per il testo della finestra di chat. | 0.5 |
HorizontalAlignment | Allineamento orizzontale della finestra di chat. | Left |
VerticalAlignment | Allineamento verticale della finestra di chat. | Top |
HeightScale | Scala di altezza della finestra di chat rispetto alla dimensione dello schermo. | 1 |
WidthScale | Scala di larghezza della finestra di chat rispetto alla dimensione dello schermo. | 1 |
Aspetto della barra di input
L'aspetto della chat barra di input è personalizzabile attraverso ChatInputBarConfiguration .
Proprietà | Descrizione | Predefinito |
---|---|---|
BackgroundColor3 | Color3 colore di sfondo della barra di input della chat. | [25, 27, 29] |
BackgroundTransparency | Trasparenza del background della barra di input della chat. | 0.2 |
FontFace | Font di testo di input di chat. | BuilderSansMedium |
PlaceholderColor3 | Color3 di testo di input di chat di placeholder. | [178, 178, 178] |
TextColor3 | Color3 di testo di ingresso della chat giocatore. | [255, 255, 255] |
TextSize | Dimensione del testo di input della chat. | 14 |
TextStrokeColor3 | Color3 colore di trattamento del testo di ingresso della chat. | [0, 0, 0] |
TextStrokeTransparency | Trasparenza del tratto per il testo di ingresso della chat. | 0.5 |
AutocompleteEnabled | Indipendentemente dal fatto che il sistema di chat di testo mostri opzioni di completamento automatico per emoji e comandi . Gli emoji vengono completati automaticamente digitando : seguito da caratteri non spaziosi, mentre i comandi vengono completati automaticamente digitando / . | true |
KeyboardKeyCode | I giocatori chiave aggiuntivi possono premere per attivare il focus sull'input di chat predefinito. | Slash |
Aspetto delle schede del canale
L'aspetto delle schede del canale è personalizzabile attraverso ChannelTabsConfiguration .
Proprietà | Descrizione | Predefinito |
---|---|---|
BackgroundColor3 | Color3 colore di sfondo delle schede del canale. | [25, 27, 29] |
BackgroundTransparency | Trasparenza del background delle schede del canale. | 0 |
HoverBackgroundColor3 | Color3 colore di sfondo delle schede quando si passa il mouse su di esse. | [125, 125, 125] |
FontFace | Font per il testo nelle schede del canale. | BuilderSansBold |
TextColor3 | Color3 di testo in una scheda non selezionata. | [175, 175, 175] |
SelectedTabTextColor3 | Color3 di testo in una scheda selezionata. | [255, 255, 255] |
TextSize | Dimensione del testo nelle schede del canale. | 18 |
TextStrokeColor3 | Color3 colore di trattamento del testo nelle schede del canale. | [0, 0, 0] |
TextStrokeTransparency | Trasparenza del tratto per il testo nelle schede del canale. | 1 |
Personalizzare i messaggi
Puoi personalizzare l'aspetto dei messaggi di chat e dei premi di ChatWindowMessageProperties e TextChatService.OnChatWindowAdded callback senza sovrascrivere l'interfaccia utente esistente. Le opzioni di personalizzazione ti consentono di modificare l'aspetto dei messaggi di chat per corrispondere all'argomento della tua esperienza e puoi anche ordinare o evidenziare i messaggi
Colorare i nomi utente
Quando un utente invia un Messaggiodi chat, il suo DisplayName viene visualizz
Script locale - Colori di nome utente casuali
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
Puoi anche applicare colori e gradi di trasparenza ai premi del messaggio di colore usando UIGradient .
Colori utente 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
Aggiungere Tag di Chat
Se la tua esperienza ha utenti con attributi speciali come lo StatoVIP, puoi aggiungere tag di chat avvolti in parentesi alla parte anteriore dei messaggi dell'utente per evidenziare i loro messaggi. Il seguente LocalScript in 2> Class
Tag di chat di appuntamento
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
Personalizzazione del testo ricco
I colori di carattere possono essere usati per formattare i messaggi di chat, utile se si vuole applicare la formattazione alle parti molto specifiche del Messaggio. Nota che i colori di carattere non supportano i gradienti, ma il seguente esempio di codice mostra come si può spostare il nome utente ( memorizzato in Class.TextChatMessage.PrefixText ) nel corpo del messaggio e quindi applicare il taglio di carattere per solo la parte
Personalizzazione del testo ricco
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
Invio di messaggi da fonti non giocatore
In alcuni scenari di progettazione, potresti voler mostrare un dialogo non giocatore nella finestra di chat, come "parola" da un sistema di indirizzo pubblico o un personaggio non giocatore.
Sistema
Per fornire un messaggio del sistema non stilato al Giocatorelocale, chiama semplicemente DisplaySystemMessage() dal canale predefinito RBXGeneral con un prefisso prima del nome di visualizzazione del Giocatore.
Script del client
local Players = game:GetService("Players")local TextChatService = game:GetService("TextChatService")local player = Players.LocalPlayerlocal generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGenerallocal PREFIX = "[Guide] Welcome "-- Invia "system Messaggio" al giocatore con il loro nome visualizzatogeneralChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)
NPC/Oggetto
Puoi anche stilizzare il dialogo non giocatore e aggiungere bolle di chat per farlo sembrare come se i messaggi provengano da un NPC o un oggetto all'interno del Mondo3D.
Script del client
local TextChatService = game:GetService("TextChatService")
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
TextChatService.OnIncomingMessage = function(textChatMessage: TextChatMessage)
local properties = Instance.new("TextChatMessageProperties")
-- Controlla i messaggi del sistema che contengono metadati
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- Aggiungi un prefisso per far sembrare il messaggio che è stato inviato da un Giocatore
properties.PrefixText = string.format("<font color='#%s'>%s: </font>", "#50C999", textChatMessage.Metadata)
-- Aggiungi chat a bolle
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)