System czatu tekstowego w grze, obsługiwany przez TextChatService, umożliwia graczom łatwe komunikowanie się i nawiązywanie towarzyskich kontaktów w czasie rzeczywistym. Oprócz wspierania domyślnego czatu tekstowego, możesz dostosować interfejs użytkownika z przodu.
Konfiguracja okna czatu
Ogólne okno czatu składa się z:
- Okna czatu
- Paska wprowadzania
- Kart kanałów (opcjonalnie)

Karty kanałów są domyślnie wyłączone, a każdy komponent można włączać i wyłączać w Studio lub za pomocą skryptów:
W oknie Eksploratora rozwiń gałąź TextChatService i wybierz ChatWindowConfiguration, ChatInputBarConfiguration lub ChannelTabsConfiguration. Następnie włącz lub wyłącz komponent w oknie Właściwości.

Gdy ChannelTabsConfiguration jest włączone, każdy domyślny TextChannel pojawia się na karcie zgodnie z poniższą tabelą. Ponadto każda niestandardowa TextChannel tworzy kartę odpowiadającą właściwości Name kanału.
| Domyślny kanał | Nazwa karty |
|---|---|
| RBXGeneral | Ogólny |
| RBXSystem | Ogólny (połączony w jedną kartę z RBXGeneral) |
| RBXTeam | Zespół |
| RBXWhisper | Nazwa użytkownika innego gracza |
Wygląd okna
Wygląd ogólnego okna czatu można dostosować za pomocą ChatWindowConfiguration.

| Właściwość | Opis | Domyślna |
|---|---|---|
| BackgroundColor3 | Color3 kolor tła okna czatu. | [25, 27, 29] |
| BackgroundTransparency | Przezroczystość tła okna czatu. | 0.3 |
| Enabled | Czy pokazywać domyślne okno czatu. Ustaw na false, aby ukryć. | true |
| FontFace | Font tekstu w oknie czatu. | BuilderSansMedium |
| TextColor3 | Color3 tekstu w oknie czatu. | [255, 255, 255] |
| TextSize | Rozmiar tekstu w oknie czatu. | 14 |
| TextStrokeColor3 | Color3 koloru konturu tekstu w oknie czatu. | [0, 0, 0] |
| TextStrokeTransparency | Przezroczystość konturu tekstu w oknie czatu. | 0.5 |
| HorizontalAlignment | Wyrównanie poziome okna czatu. | Left |
| VerticalAlignment | Wyrównanie pionowe okna czatu. | Top |
| HeightScale | Skala wysokości okna czatu w stosunku do rozmiaru ekranu. | 1 |
| WidthScale | Skala szerokości okna czatu w stosunku do rozmiaru ekranu. | 1 |
Wygląd paska wprowadzania
Wygląd paska wprowadzania czatu można dostosować za pomocą ChatInputBarConfiguration.

| Właściwość | Opis | Domyślna |
|---|---|---|
| BackgroundColor3 | Color3 kolor tła paska wprowadzania czatu. | [25, 27, 29] |
| BackgroundTransparency | Przezroczystość tła paska wprowadzania czatu. | 0.2 |
| FontFace | Font tekstu wprowadzania czatu. | BuilderSansMedium |
| PlaceholderColor3 | Color3 tekstu zastępczego w pasku wprowadzania czatu. | [178, 178, 178] |
| TextColor3 | Color3 tekstu wprowadzonego przez gracza. | [255, 255, 255] |
| TextSize | Rozmiar tekstu wprowadzania czatu. | 14 |
| TextStrokeColor3 | Color3 kolor konturu tekstu wprowadzania czatu. | [0, 0, 0] |
| TextStrokeTransparency | Przezroczystość konturu tekstu wprowadzania czatu. | 0.5 |
| AutocompleteEnabled | Czy system czatu tekstowego pokazuje opcje autouzupełniania dla emoji i komend. Emoji są autouzupełniane przez wpisanie : po którym następują znaki niebiałe, podczas gdy komendy są autouzupełniane przez wpisanie /. | true |
| KeyboardKeyCode | Dodatkowy klawisz, który gracze mogą nacisnąć, aby skupić się na domyślnym pasku wprowadzania czatu. | Slash |
Wygląd kart kanałów
Wygląd kart kanałów można dostosować za pomocą ChannelTabsConfiguration.

| Właściwość | Opis | Domyślna |
|---|---|---|
| BackgroundColor3 | Color3 kolor tła kart kanałów. | [25, 27, 29] |
| BackgroundTransparency | Przezroczystość tła kart kanałów. | 0 |
| HoverBackgroundColor3 | Color3 kolor tła kart podczas najeżdżania na nie kursorem. | [125, 125, 125] |
| FontFace | Font dla tekstu w kartach kanałów. | BuilderSansBold |
| TextColor3 | Color3 tekstu w niezaznaczonej karcie. | [175, 175, 175] |
| SelectedTabTextColor3 | Color3 tekstu w zaznaczonej karcie. | [255, 255, 255] |
| TextSize | Rozmiar tekstu w kartach kanałów. | 18 |
| TextStrokeColor3 | Color3 kolor konturu tekstu w kartach kanałów. | [0, 0, 0] |
| TextStrokeTransparency | Przezroczystość konturu tekstu w kartach kanałów. | 1 |
Dostosowywanie wiadomości
Możesz dostosować wygląd ciał wiadomości czatu i prefixów używając ChatWindowMessageProperties oraz TextChatService.OnChatWindowAdded callbacków bez nadpisywania istniejącego interfejsu użytkownika. Opcje dostosowywania pozwalają Ci zmienić wygląd wiadomości czatu tak, aby pasowały do tematu Twojej gry, a także sortować lub wyróżniać wiadomości z różnych grup użytkowników, kolorując prefixy lub dodając tagi czatu.
Kolorowanie nazw użytkowników
Gdy użytkownik wysyła wiadomość czatu, jego DisplayName wyświetla się jako część prefiksu wiadomości. Domyślnie, nazwa każdego użytkownika jest kolorowana zgodnie z jego Player.TeamColor, ale możesz zmienić kolory nazw czatu używając ChatWindowMessageProperties i OnChatWindowAdded. Poniższy LocalScript w StarterPlayerScripts przypisuje ustalony kolor każdemu użytkownikowi, wybierając losowo z tabeli kolorów RGB.

LocalScript - Kolory nazw użytkowników
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
Możesz również zastosować kolory i przezroczystość gradientów do kolorowania prefixów wiadomości używając UIGradient.

Gradientowe kolory nazw użytkowników
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
Dostosowywanie tekstu bogatego
Tagi [koloru czcionki] (../ui/rich-text.md#supported-tags) tekstu bogatego można wykorzystać do formatowania wiadomości czatu, co jest pomocne, gdy chcesz zastosować formatowanie do bardzo specyficznych części wiadomości. Zauważ, że tekst bogaty nie obsługuje gradientów, ale poniższy przykład kodu pokazuje, jak możesz przenieść nazwę użytkownika (przechowywaną w TextChatMessage.PrefixText) do treści wiadomości, a następnie zastosować tagowanie tekstu bogatego tylko do części nazwy.

Dostosowywanie tekstu bogatego
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
Wiadomości z źródeł niebędących graczami
Gdy TextChatService.CreateDefaultTextChannels jest true, jednym z domyślnych kanałów tekstowych jest kanał RBXSystem. Domyślne skrypty czatu automatycznie wyświetlają wiadomości systemowe w tym kanale. Możesz dostosować wygląd tych wiadomości używając callbacku TextChannel.OnIncomingMessage.
Możesz chcieć dostosować lub zmienić wiadomości systemowe, które są automatycznie emitowane przez system czatu. Ponieważ domyślne wiadomości systemowe są lokalizowane dla użytkowników, powinieneś odwołać się do nich przez TextChatMessage.Metadata w swoich callbackach czatu tekstowego, jeśli chcesz dostosować ich wygląd. Na przykład, możesz użyć Metadata, aby zidentyfikować wiadomości systemowe, wiadomości o błędach lub wiadomości z konkretnych systemów w Twojej grze.
System
Aby dostarczyć wiadomość systemową do lokalnego gracza, na przykład "przemówienie" z systemu publicznych adresów, wywołaj DisplaySystemMessage() z domyślnego kanału RBXGeneral z prefiksem przed nazwą wyświetlaną gracza.
Client Scriptlocal Players = game:GetService("Players")local TextChatService = game:GetService("TextChatService")local player = Players.LocalPlayerlocal generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGenerallocal PREFIX = "[Przewodnik] Witaj "-- Wyślij "wiadomość systemową" do gracza z ich nazwą wyświetlanągeneralChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)

NPC/obiekt
Możesz również stylizować dialogi osób niebędących graczami i dodać dymki czatu, aby wyglądało na to, że wiadomości pochodzą od NPC lub obiektu w wirtualnym świecie 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")
-- Sprawdzanie wiadomości systemowych, które zawierają metadane
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- Dodanie prefiksu, aby wiadomość wyglądała na wysłaną przez gracza
properties.PrefixText = string.format("<font color='#%s'>%s: </font>", "#50C999", textChatMessage.Metadata)
-- Dodanie dymka czatu
TextChatService:DisplayBubble(Workspace.Statue, textChatMessage.Text)
end
return properties
end
local message = "Witaj! Będę Twoim przewodnikiem."
local speakerName = "Starożytny Rycerz"
generalChannel:DisplaySystemMessage(message, speakerName)
