Il sistema di chat testuale in gioco, alimentato da TextChatService, consente ai giocatori di comunicare e socializzare facilmente tra loro nei giochi dal vivo. Oltre a supportare la chat testuale predefinita, è possibile personalizzare l'interfaccia utente front-end.
Configurazione della finestra della chat
La finestra della chat complessiva consiste in:
- Finestra della chat
- Barra di input
- Schede canale (opzionale)

Le schede canale sono disabilitate per impostazione predefinita e ciascun componente può essere attivato o disattivato in Studio o tramite script:
Nella finestra Explorer, espandi il ramo TextChatService e seleziona ChatWindowConfiguration, ChatInputBarConfiguration o ChannelTabsConfiguration. Quindi, abilita o disabilita il componente nella finestra Proprietà.

Quando ChannelTabsConfiguration è abilitato, ciascun TextChannel predefinito appare in una scheda come descritto nella tabella seguente. Inoltre, ciascun TextChannel personalizzato crea una scheda corrispondente alla proprietà Name del canale.
| Canale predefinito | Nome della scheda |
|---|---|
| RBXGeneral | Generale |
| RBXSystem | Generale (unito in un'unica scheda con RBXGeneral) |
| RBXTeam | Squadra |
| RBXWhisper | Nome utente dell'altro giocatore |
Aspetto della finestra
L'aspetto complessivo della finestra della chat è personalizzabile tramite ChatWindowConfiguration.

| Proprietà | Descrizione | Predefinito |
|---|---|---|
| BackgroundColor3 | Colore di sfondo Color3 della finestra della chat. | [25, 27, 29] |
| BackgroundTransparency | Trasparenza dello sfondo della finestra della chat. | 0.3 |
| Enabled | Se mostrare la finestra della chat predefinita. Imposta su false per nascondere. | true |
| FontFace | Font del testo della finestra della chat. | BuilderSansMedium |
| TextColor3 | Color3 del testo della finestra della chat. | [255, 255, 255] |
| TextSize | Dimensione del testo della finestra della chat. | 14 |
| TextStrokeColor3 | Color3 del contorno per il testo della finestra della chat. | [0, 0, 0] |
| TextStrokeTransparency | Trasparenza del contorno per il testo della finestra della chat. | 0.5 |
| HorizontalAlignment | Allineamento orizzontale della finestra della chat. | Left |
| VerticalAlignment | Allineamento verticale della finestra della chat. | Top |
| HeightScale | Scala dell'altezza della finestra della chat rispetto alla dimensione dello schermo. | 1 |
| WidthScale | Scala della larghezza della finestra della chat rispetto alla dimensione dello schermo. | 1 |
Aspetto della barra di input
L'aspetto della barra di input della chat è personalizzabile tramite ChatInputBarConfiguration.

| Proprietà | Descrizione | Predefinito |
|---|---|---|
| BackgroundColor3 | Colore di sfondo Color3 della barra di input della chat. | [25, 27, 29] |
| BackgroundTransparency | Trasparenza dello sfondo della barra di input della chat. | 0.2 |
| FontFace | Font del testo di input della chat. | BuilderSansMedium |
| PlaceholderColor3 | Color3 del testo di input della chat di segnaposto. | [178, 178, 178] |
| TextColor3 | Color3 del testo di input della chat inserito dal giocatore. | [255, 255, 255] |
| TextSize | Dimensione del testo di input della chat. | 14 |
| TextStrokeColor3 | Color3 colore del contorno del testo di input della chat. | [0, 0, 0] |
| TextStrokeTransparency | Trasparenza del contorno per il testo di input della chat. | 0.5 |
| AutocompleteEnabled | Se il sistema di chat testuale mostra opzioni di completamento automatico per emoji e comandi. Gli emoji vengono completati automaticamente digitando : seguito da caratteri non bianchi, mentre i comandi vengono completati automaticamente digitando /. | true |
| KeyboardKeyCode | Tasto aggiuntivo che i giocatori possono premere per attivare il focus sulla barra di input della chat predefinita. | Slash |
Aspetto delle schede canale
L'aspetto delle schede canale è personalizzabile tramite ChannelTabsConfiguration.

| Proprietà | Descrizione | Predefinito |
|---|---|---|
| BackgroundColor3 | Colore di sfondo Color3 delle schede canale. | [25, 27, 29] |
| BackgroundTransparency | Trasparenza dello sfondo delle schede canale. | 0 |
| HoverBackgroundColor3 | Colore di sfondo delle schede quando si passa sopra di esse. | [125, 125, 125] |
| FontFace | Font per il testo nelle schede canale. | BuilderSansBold |
| TextColor3 | Color3 del testo in una scheda non selezionata. | [175, 175, 175] |
| SelectedTabTextColor3 | Color3 del testo in una scheda selezionata. | [255, 255, 255] |
| TextSize | Dimensione del testo nelle schede canale. | 18 |
| TextStrokeColor3 | Color3 colore del contorno del testo nelle schede canale. | [0, 0, 0] |
| TextStrokeTransparency | Trasparenza del contorno del testo nelle schede canale. | 1 |
Personalizza i messaggi
Puoi personalizzare l'aspetto dei corpi dei messaggi della chat e dei prefissi utilizzando ChatWindowMessageProperties e i callback TextChatService.OnChatWindowAdded senza sovrascrivere l'interfaccia utente esistente. Le opzioni di personalizzazione ti consentono di modificare l'aspetto dei messaggi della chat per adattarli al tema del tuo gioco e puoi anche ordinare o evidenziare i messaggi di diversi gruppi di utenti colorando i prefissi o aggiungendo tag di chat.
Colora i nomi utente
Quando un utente invia un messaggio nella chat, il suo DisplayName viene visualizzato come parte del prefisso del messaggio. Per impostazione predefinita, il nome di ciascun utente è colorato in base al loro Player.TeamColor, ma puoi cambiare i colori dei nomi della chat utilizzando ChatWindowMessageProperties e OnChatWindowAdded. Il seguente LocalScript in StarterPlayerScripts assegna un colore predeterminato a ciascun utente, scegliendo casualmente da una tabella di colori RGB.

LocalScript - Colori 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 gradienti di trasparenza per colorare i prefissi dei messaggi utilizzando UIGradient.

Colori Nome Utente con 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
Personalizzazione del testo ricco
I tag di colore del font possono essere utilizzati per formattare i messaggi della chat, utile se desideri applicare la formattazione a parti molto specifiche del messaggio. Tieni presente che il testo ricco non supporta gradienti, ma il seguente esempio di codice mostra come puoi spostare il nome utente (memorizzato in TextChatMessage.PrefixText) nel corpo del messaggio e quindi applicare la registrazione del testo ricco solo alla parte del nome.

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
Messaggi da fonti non giocatori
Quando TextChatService.CreateDefaultTextChannels è true, uno dei canali di testo predefiniti è il canale RBXSystem. Gli script di chat predefiniti visualizzano automaticamente i messaggi di sistema in questo canale. Puoi personalizzare l'aspetto di questi messaggi utilizzando il callback TextChannel.OnIncomingMessage.
Potresti voler personalizzare o alterare i messaggi di sistema che vengono emessi automaticamente dal sistema di chat. Poiché i messaggi di sistema predefiniti sono localizzati per gli utenti, dovresti riferirti a loro tramite TextChatMessage.Metadata nei tuoi callback di chat testuale se desideri personalizzarne l'aspetto. Ad esempio, potresti utilizzare Metadata per identificare i messaggi di sistema, i messaggi di errore o messaggi di sistemi specifici nel tuo gioco.
Sistema
Per inviare un messaggio di sistema al giocatore locale, come "annuncio" da un sistema di altoparlante pubblico, chiama DisplaySystemMessage() dal canale RBXGeneral predefinito con un prefisso prima del nome visualizzato del giocatore.
Client Scriptlocal Players = game:GetService("Players")local TextChatService = game:GetService("TextChatService")local player = Players.LocalPlayerlocal generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGenerallocal PREFIX = "[Guida] Benvenuto "-- Invia "messaggio di sistema" al giocatore con il suo nome visualizzato aggiuntogeneralChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)

NPC/oggetto
Puoi anche stilizzare il dialogo non giocatore e aggiungere bolle di chat per far sembrare che i messaggi provengano da un NPC o un oggetto all'interno del mondo 3D.
Client Script
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")
-- Controlla i messaggi di sistema che contengono metadati
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- Aggiungi prefisso per far sembrare che il messaggio sia stato inviato da un giocatore
properties.PrefixText = string.format("<font color='#%s'>%s: </font>", "#50C999", textChatMessage.Metadata)
-- Aggiungi bolla di chat
TextChatService:DisplayBubble(Workspace.Statue, textChatMessage.Text)
end
return properties
end
local message = "Benvenuto! Sarò la tua guida."
local speakerName = "Cavaliere Antico"
generalChannel:DisplaySystemMessage(message, speakerName)
