Za pomocą TextChatService możesz użyć czatu dymkowego do wyświetlania dostosowywanych dymków rozmowy nad awatarami użytkowników i NPC. Czat dymkowy może uczynić twoją grę bardziej wizualnie wciągającą i pomóc użytkownikom łatwo identyfikować wiadomości i ich nadawców w odpowiedni sposób. Ta funkcja jest szczególnie przydatna w grach, w których użytkownicy muszą skupić się na treści, jednocześnie komunikując się z innymi w mniej inwazyjny sposób.
Włącz czat dymkowy
Aby włączyć czat dymkowy w swojej grze:
W oknie Eksploratora wybierz BubbleChatConfiguration w TextChatService.

W oknie Właściwości zaznacz pole wyboru BubbleChatConfiguration.Enabled.

Dostosowywanie dymków
Po włączeniu czatu dymkowego możesz dostosować wygląd i zachowanie swoich dymków czatu, aby pasowały do tematyki twojej gry. Użyj okna Właściwości BubbleChatConfiguration do podstawowych zmian, takich jak kolor tekstu i odstępy, lub zaimplementuj zaawansowane dostosowanie dla obrazów tła dymków i innych wizualnych poprawek.

Alternatywnie, dodaj LocalScript w StarterPlayerScripts ze wszystkimi ustawieniami dostosowania. Umożliwia to silnikowi zastosowanie twoich dostosowań podczas czasu wykonywania, nadpisując ustawienia w Studio. Jest to przydatne do dodawania efektów specjalnych do dymków czatu, gdy użytkownicy wyzwalają określone zdarzenia lub warunki.
Podstawowe dostosowanie
Poniższa tabela przedstawia wspólne właściwości dostosowywania czatu dymkowego. Aby uzyskać pełną listę właściwości dostosowywania, zapoznaj się z BubbleChatConfiguration.
| Właściwość | Opis | Domyślnie |
|---|---|---|
| BackgroundColor3 | Kolor tła dymków w Color3. | [250, 250, 250] |
| FontFace | Font tekstu dymków. | BuilderSansMedium |
| TextColor3 | Kolor tekstu w dymkach w Color3. | [57, 59, 61] |
| TextSize | Rozmiar tekstu w dymkach. | 16 |
Zaawansowane dostosowanie
Aby zaawansowanie dostosować swój dymek, dodaj obiekty UI reprezentujące określone aspekty wyglądu dymka jako dzieci pod BubbleChatConfiguration, w tym:
- ImageLabel dla ustawień obrazu tła.
- UIGradient dla ustawień gradientu tła.
- UICorner dla kształtu rogów dymków.
- UIPadding dla przestrzeni wielu między tekstem a krawędziami dymka, w odniesieniu do normalnego rozmiaru rodzica.
Po dodaniu tych obiektów możesz zmodyfikować właściwości tych obiektów, które są zastosowane do dymków czatu w celu zaawansowanego dostosowania dymków. Poniższy przykład LocalScript dodaje obraz tła i ostre rogi do dymków:
Zaawansowane dostosowanie dymkówlocal TextChatService = game:GetService("TextChatService")local bubbleChatConfiguration = TextChatService.BubbleChatConfigurationbubbleChatConfiguration.TailVisible = falsebubbleChatConfiguration.TextColor3 = Color3.fromRGB(220, 50, 50)bubbleChatConfiguration.FontFace = Font.fromEnum(Enum.Font.LuckiestGuy)local bubbleUICorner = bubbleChatConfiguration:FindFirstChildOfClass("UICorner")if not bubbleUICorner thenbubbleUICorner = Instance.new("UICorner")bubbleUICorner.Parent = bubbleChatConfigurationendbubbleUICorner.CornerRadius = UDim.new(0, 0)local bubbleUIPadding = bubbleChatConfiguration:FindFirstChildOfClass("UIPadding")if not bubbleUIPadding thenbubbleUIPadding = Instance.new("UIPadding")bubbleUIPadding.Parent = bubbleChatConfigurationendbubbleUIPadding.PaddingTop = UDim.new(0, 20)bubbleUIPadding.PaddingRight = UDim.new(0, 10)bubbleUIPadding.PaddingBottom = UDim.new(0, 15)bubbleUIPadding.PaddingLeft = UDim.new(0, 10)local bubbleImageLabel = bubbleChatConfiguration:FindFirstChildOfClass("ImageLabel")if not bubbleImageLabel thenbubbleImageLabel = Instance.new("ImageLabel")bubbleImageLabel.Parent = bubbleChatConfigurationendbubbleImageLabel.Image = "rbxassetid://109157529833093"bubbleImageLabel.ScaleType = Enum.ScaleType.SlicebubbleImageLabel.SliceCenter = Rect.new(40, 40, 320, 120)bubbleImageLabel.SliceScale = 0.5

Poniższe tabele przedstawiają dostępne dzieci GuiObject i modyfikatory wyglądu wraz z ich ważnymi właściwościami dostosowywania:
| Właściwość | Opis | Domyślnie |
|---|---|---|
| Image | ID zasobu obrazu tła dymka. | |
| ImageColor3 | Kolor odcienia obrazu tła dymka w Color3. | [255, 255, 255] |
| ImageRectOffset | Offset obszaru obrazu, który ma być wyświetlany od górnego lewego rogu, w pikselach. | (0, 0) |
| ImageRectSize | Rozmiar obszaru obrazu, który ma być wyświetlany w pikselach. Aby wyświetlić cały obraz, ustaw dowolny wymiar na 0. | (0, 0) |
| ScaleType | Typ skali do renderowania obrazu, gdy jego rozmiar różni się od absolutnego rozmiaru dymka. | Stretch |
| SliceCenter | Granice łez zdjęcia, jeśli obraz jest zdjęciem 9-krotnym. Dotyczy tylko, gdy ustawisz ScaleType jako Slice. | (0, 0, 0, 0) |
| SliceScale | Współczynnik skali krawędzi łez, jeśli obraz jest 9-krotnym obrazem. Dotyczy tylko, gdy ustawisz ScaleType jako Slice. | 1 |
| TileSize | Rozmiar kafelka obrazu. Dotyczy tylko, gdy ustawisz ScaleType jako Tile. | (1, 0, 1, 0) |
Dostosowywanie dymków na poziomie indywidualnym
Możesz indywidualnie stylizować i modyfikować zachowania dymków czatu w oparciu o określone warunki, aby nadpisać swoje ogólne ustawienia. Na przykład, możesz użyć dymków czatu, aby odróżnić NPC od użytkowników, podkreślić krytyczny stan zdrowia i zastosować efekty specjalne do wiadomości z wcześniej zdefiniowanymi słowami kluczowymi.
Aby ustawić dostosowanie na poziomie dymków, dodaj skrypt kliencki LocalScript używając BubbleChatMessageProperties, który nadpisuje odpowiadające właściwości BubbleChatConfiguration, oraz wywołanie zwrotne TextChatService.OnBubbleAdded, aby określić, jak dostosować każdy dymek. Callback dostarcza ci właściwość TextChatMessage, a także adornee, co pozwala zastosować dostosowanie na podstawie atrybutów związanych z użytkownikami, treścią tekstu czatu, właściwościami postaci użytkowników oraz wszelkimi specjalnymi warunkami, które chcesz zdefiniować.
Poniższe podstawowe właściwości dostosowywania są dostępne do dostosowania na poziomie dymków:
| Właściwość | Opis | Domyślnie |
|---|---|---|
| BackgroundColor3 | Kolor tła dymków w Color3. | (250, 250, 250) |
| BackgroundTransparency | Przezroczystość tła dymków. | 0.1 |
| FontFace | Font tekstu dymków. | BuilderSansMedium |
| TextColor3 | Kolor tekstu dymków w Color3. | [57, 59, 61] |
| TextSize | Rozmiar tekstu dymków. | 16 |
Poniższy przykład dodaje specjalny wygląd do dymków czatu użytkowników VIP, sprawdzając, czy nadawca wiadomości czatu ma atrybut IsVIP:
Dymki VIP
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Handler zdarzeń dla dodania nowego dymka czatu do gry
TextChatService.OnBubbleAdded = function(message: TextChatMessage, adornee: Instance)
-- Sprawdź, czy wiadomość czatu ma przypisane źródło tekstu (nadającego)
if message.TextSource then
-- Utwórz nową instancję BubbleChatMessageProperties, aby dostosować dymek czatu
local bubbleProperties = Instance.new("BubbleChatMessageProperties")
-- Uzyskaj użytkownika, który wysłał wiadomość czatu na podstawie jego UserId
local player = Players:GetPlayerByUserId(message.TextSource.UserId)
if player:GetAttribute("IsVIP") then
-- Jeśli gracz jest VIP, dostosuj właściwości dymka czatu
bubbleProperties.TextColor3 = Color3.fromHex("#F5CD30")
bubbleProperties.BackgroundColor3 = Color3.fromRGB(25, 27, 29)
bubbleProperties.FontFace = Font.fromEnum(Enum.Font.PermanentMarker)
end
return bubbleProperties
end
end
Wszystkie zaawansowane opcje dostosowywania są dostępne dla dostosowywania dymków na poziomie indywidualnym. Podobnie jak w przypadku zaawansowanego dostosowania ogólnych dymków, dodaj instancje, które chcesz dostosować, jako dzieci BubbleChatMessageProperties. Poniższy przykład dodaje specjalny efekt gradientu w połączeniu z innymi właściwościami do dymków czatu użytkowników o niskim stanie zdrowia, sprawdzając właściwość Humanoid.Health postaci nadawców wiadomości czatu:
Dymki o niskim zdrowiu
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Handler zdarzeń dla dodania nowego dymka czatu do gry
TextChatService.OnBubbleAdded = function(message: TextChatMessage, adornee: Instance)
-- Sprawdź, czy wiadomość czatu ma przypisane źródło tekstu (nadającego)
if message.TextSource then
-- Uzyskaj użytkownika, który wysłał wiadomość czatu na podstawie jego UserId
local player = Players:GetPlayerByUserId(message.TextSource.UserId)
-- Znajdź humanoida w postaci użytkownika
local humanoid = player.Character:FindFirstChildWhichIsA("Humanoid")
if humanoid and humanoid.Health < 25 then
-- Utwórz nową instancję BubbleChatMessageProperties, aby dostosować dymek czatu
local bubbleProperties :BubbleChatMessageProperties = Instance.new("BubbleChatMessageProperties")
-- Dostosuj właściwości dymka czatu dla niskiej wartości zdrowia
bubbleProperties.BackgroundColor3 = Color3.fromRGB(245, 245, 245)
bubbleProperties.TextColor3 = Color3.fromRGB(234, 51, 96)
bubbleProperties.TextSize = 20
bubbleProperties.FontFace = Font.fromEnum(Enum.Font.DenkOne)
-- Dodaj UIGradient jako dziecko, aby dostosować gradient
local uiGradient : UIGradient = Instance.new("UIGradient")
uiGradient.Color = ColorSequence.new(Color3.fromRGB(110, 4, 0), Color3.fromRGB(0, 0, 0))
uiGradient.Rotation = 90
uiGradient.Parent = bubbleProperties
return bubbleProperties
end
end
end
Ręczne wyświetlanie dymków
Możesz chcieć wyświetlić dymek czatu, gdy gracze nie wysłali wiadomości, na przykład w przypadku NPC. Użyj metody TextChatService:DisplayBubble(), aby ręcznie wyświetlić dymek czatu.
Dostosowanie tych dymków jest takie samo jak dostosowanie dymków, które są automatycznie wyświetlane, gdy gracze wysyłają wiadomości przez TextChannels, używając wywołania zwrotnego TextChatService.OnBubbleAdded.
Dymki NPC
Wyświetl dymki czatu dla postaci niegrających (NPC), wywołując TextChatService:DisplayBubble(character, message), z postacią NPC i wiadomością jako parametrami. Te dymki można dostosować przy użyciu wywołania zwrotnego TextChatService.OnBubbleAdded, tak jak każdy inny dymek czatu.
TextChatService:DisplayBubble() działa tylko w skryptach po stronie klienta, więc upewnij się, że używasz Script z RunContext ustawionym na Enum.RunContext.Client, lub LocalScript w odpowiednim kontenerze, takim jak StarterPlayerScripts. Jeśli do NPC dołączysz ProximityPrompt, skrypt do wyświetlania dymka czatu może wyglądać tak:
local TextChatService = game:GetService("TextChatService")
local Workspace = game:GetService("Workspace")
local prompt = Workspace.SomeNPC.ProximityPrompt
local head = prompt.Parent:WaitForChild("Head")
prompt.Triggered:Connect(function()
TextChatService:DisplayBubble(head, "Witaj świecie!")
end)