Dzięki czatu tekstowemu w doświadczeniu na Roblox gracze mogą komunikować się ze sobą używając tekstowych wiadomości w sesjach na żywo. System zapewnia zestaw metod i wydarzeń dla rozszerzenia i dostosowania funkcjonalności czatu, takich jak dostarczanie wiadomości opartych na wymaganiach personalizowanych , dodaw
Ten przewodnik pokrywa workflow i podejścia do rozbudowy funkcjonalności systemu czatu. For more information on customizing the chat user interface (UI), see Dostosowywanie interfejsu użytkownika czatu .
Praca w czacie
System czatu tekstowego w czasie wdrożenia składa się z dwóch klas zmiennych, które możesz rozszerzyć o dostosowane zachowania dostarczania czatu i niezmiennych obiektów danych, które reprezentują pewne elementy czatu zwracane przez zmienne klasy.
Zmienne klasy czatu
System czatu tekstowego w czasie rzeczywistego doświadczenia dostarcza następujące zmienne klasy:
- TextChatService — Ta jedyny klas jest odpowiedzialna za zarządzanie ogólnym systemem czatu, w tym filtrowanie wiadomości czatu, moderację i ustawienia uprawnień dla użytkowników. Dostępny z serwera, zapewnia zestaw metod i wydarzeń, które inne API czatu lub działania użytkowników mogą wywołać poprzez przepływ roboczy czatu.
- TextChannel — Ta klasa przedstawia kanał czatu tekstowego, który przesyła wiadomości czatu wysłane przez gracza z klienta na serwer i wyświetla je dla innych graczy na podstawie uprawnień. Możesz użyć go do tworzenia, modyfikacji i zarządzania kanałami tekstowymi w swoim doświadczeniu. Ponadto możesz utworzyć wiele kanałów
- TextChatCommand — Ta klasa umożliwia stworzenie niestandardowych komend czatu, które umożliwiają graczom wykonanie określonych działań lub zachowań, poprzez wpisanie specjalnych znaków postaci pod postacią znaku zapytania. Komendy czatu są przydatne do dodawania dodatkowych funkcji i interakcji z doświadczeniem. Możesz również użyć ich do tworzenia komend administratora do zarządzania i moder
Niezmienne obiekty czatu
System czatu tekstowego w czasie wdrożenia nie uwzględnia następujących niezmiennych obiektów z jedynymi właściwościami, które nie możesz zmodyfikować:
- TextChatMessage : Ten obiekt reprezentuje pojedyncze wiadomość w kanałach czatu tekstowego z podstawowymi informacjami, takimi jak nadawca wiadomości, oryginalna wiadomość, filtrowana wiadomość i data utworzenia.
- TextSource : Ten obiekt przedstawia nadawcę wiadomości w kanale czatu tekstowego z szczegółowymi uprawnieniami gracza w kanale. Jeśli gracz jest w wielu kanałach czatu tekstowego, może mieć wiele źródeł tekstu również.
Rysunek przepływu czatu
Przez proces wysyłania i dostarczania wiadomości w czacie, metody, wiązania i wydarzenia w klasach czatu zmiennego działają obok niezmiennych obiektów czatu na trzech stronach modelu klient-serwer:
- Kliент wysyłający, który jest lokalnym urządzeniem gracza wysyłającego wiadomość.
- Otrzymywanie klientów, które są lokalnymi urządzeniami innych graczy.
- serwer, który jest centralnym procesorem do otrzymywania wiadomości od wysyłającego klienta i zarządzania dostarczaniem klientów do otrzymywania.
Jak pokazuje rysunek płynny, system czatu tekstowego w doświadczeniu przetwarza wiadomość o czacie poprzez następujące kroki:
- Gracz wysyła wiadomość z lokalnego urządzenie, wywołując metodę TextChannel:SendAsync(). Ta metoda przetwarza wiadomość i określa, czy jest to komendy czatu lub zwykły wiadomość czatu.
- Jeśli wpis gracza jest komendą czatu, uruchomia wydarzenie TextChatCommand.Triggered, aby wykonać akcję, którą określiłeś dla komendy.
- Jeśli wpis gracza jest to zwykła wiadomość czatu, wysyłana jest TextChatService.SendingMessage do wyświetlenia oryginalnej wiadomości dla nadawcy na klienta wysyłania. W tym samym czasie TextChannel:SendAsync() przesyła wiadomość na serwer.
- Serwer wysyłuje TextChannel.ShouldDeliverCallback, aby określić, czy dostarczić wiadomość innym graczom w oparciu o upoważnienia, które ustawiłeś, i wymagania filtrowania społeczności Roblox.
- Jeśli TextChannel.ShouldDeliverCallback określa, że wiadomość jest elegible do dostarczenia innym graczom, serwer stosuje wszystkie filtry i uruchnia TextChannel.OnIncomingMessage dwukrotnie:
- Po raz pierwszy na klientach nadawczych wysyłającym sygnalizuje się, że serwer przetwarza wiadomość poprzez wydarzenie TextChatService.MessageReceived. To również zastępuje lokalną wiadomość na klientach nadawczych z wiadomością przychodzącą na wyświetlanie na klientach odbiorczych. Wiadomość może być identyczna, jeśli oryginalna wiadomość nie wymaga filtrowania.
- Drugi raz to na odbiorcu klienta, aby wywołać wydarzenie TextChatService.MessageReceived, aby wyświetlić wiadomość dla innych graczy.
Istnieje kilka obszarów pracy systemu czatu, w których możesz rozciągnąć i dostosować zachowanie, ale kroki, jak system działa, pozostają takie same.
Dostosowywanie zachowań dostarczania wiadomości
Oprócz przestrzegania domyślnego zachowania dostarczania wiadomości w czacie, możesz użyć TextChannel.ShouldDeliverCallback, aby dodać uprawnienia i zachowania specyficzne, aby określić, czy gracze mogą otrzymać wiadomość do personalizowanej zaangażowanie, takiej jak:
- Wspieranie czatu grupowego, w którym tylko gracze w tej samej grupie lub drużynie mogą komunikować się między sobą.
- Wspieranie bliskości opartej na czacie, w której gracze mogą wysyłać tylko wiadomości do tych blisko nich.
- Zapobieganie graczom wysyłania wiadomości do innych. Na przykład, niedozwala graczom z statusie śmierci wysyłania wiadomości do żywych graczy.
- Dodanie funkcji konkursu zgadnięcia, w której poprawne odpowiedzi w czacie nie są widoczne dla innych graczy.
Poniższy przykład pokazuje, jak zaimplementować ekskluzywny czat dla postaci gracza, które są blisko siebie w lokalizacjach. Używa funkcji TextSource, aby zidentyfikować lokalizacje gracza, który może być odbiorcą potencjalnych wiadomości. Jeśli funkcja zwraca false false, ozn
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Ten przykład używa ogólnego kanału; możesz go zastąpić kanałem dedykowanym
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Definiuj funkcję, aby uzyskać pozycję postaci gracza
local function getPositionFromUserId(userId: number)
-- Zdobądź gracza powiązanego z podanym ID użytkownika
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Jeśli gracz istnieje, uzyskaj jego pozycję.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Wróć do domyślnej pozycji, jeśli gracz lub postać nie może zostać znaleziony
return Vector3.zero
end
-- Ustaw zwrotny wątku dla ogólnego kanału do kontroli dostarczania wiadomości
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Zdobądź pozycje nadawcy i odbiorcy wiadomości
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Jeśli dystans między nadawcą a odbiorcą wynosi mniej niż 50 jednostek, dostarcz wiadomość
return (targetPos - sourcePos).Magnitude < 50
end
Tworzenie niestandardowych komend
Wbudowany system czatu tekstowego w doświadczeniu ma wbudowane komendy czatu dla celów ogólnych, takich jak tworzenie kanałów czatu zespołowych i gra w emotka. Możesz włączyć je poprzez ustawienie
Poniższy przykład pokazuje, jak utworzyć polecenie czatu, które umożliwia graczom zmianę rozmiaru ich postaci, gdy wpisują /super lub /mini.
Wprowadź TextChatCommand instancję w TextChatService .
Zmień go na Komenda rozmiarowa .
Ustaw jego PrimaryAlias wartość na /super i jego SecondAlias na 1> /mini1> .
Wprowadź następujące Script w ServerScriptService, aby zdefiniować wysokę funkcję dla przycisku czatu, który skaluje rozmiar znaku.
Skryptlocal TextChatService = game:GetService("TextChatService")local Players = game:GetService("Players")local sizeCommand: TextChatCommand = TextChatService:WaitForChild("SizeCommand")sizeCommand.Triggered:Connect(function(textSource, message)local scaleMult = 1local messageWords = string.split(message, " ")if messageWords[1] == "/super" thenscaleMult = 2elseif messageWords[1] == "/mini" thenscaleMult = 0.5endlocal player = Players:GetPlayerByUserId(textSource.UserId)if player thenlocal character = player.Characterif character thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfor _, child in humanoid:GetChildren() doif child:IsA("NumberValue") thenchild.Value *= scaleMultendendendendendend)
Migracja z Legacy Czat
Ta sekcja pomaga Ci w migracji z legacy chat system poprzez zapewnienie alternatywnych metod wdrożenia popularnych funkcji i zachowań czatu w tekście czatu w doświadczeniu.
Aby przenieść system czatu istniejącego do systemu czatu w tekście doświadczenia:
W oknie Explorer wybierz TextChatService .
W Propnościach oknie znajdź CzatVersion dropdown i wybierz TextChatService.
Podstawowe funkcjonalności
Chociaż obie systemy dzielą się tę samą podstawową funkcjonalnością czatu, wdrożenia czatu tekstowego w doświadczeniu są ogólnie bardziej zrównoważone i łatwiejsze do powtarzania.
Funkcjonalność | Czat Dziedzictwa | Czat tekstowy w czasie | Różnice |
---|---|---|---|
Wyślij wiadomość czatu | Players:Chat() | TextChannel:SendAsync() | Methode TextChatService:SendAsync() wspiera bardziej zaawansowane funkcje czatu, takie jak bogate używanie znaków tekstowych i priorytet wiadomości. Zawiera również zintegrowany filtr, aby pomóc zapobiec wysyłaniu nieodpowiednich wiadomości. |
Wdrożenie wiadomości zwrotnych | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Legacy system czatu wiąże funkcję z wydarzeniami systemu czatu, aby dostarczać wiadomości. Dwa metody z wbudowanego w przeglądarkę systemu czatu do czatu mają więcej elastyczności i opcji dostosowania. |
Dodaj funkcje czatu | ChatService/ChatCommand moduł | TextChatCommand | W systemie czatu tekstowego w wersji bez doświadczenia jest dedykowana klasa przedstawiająca komendy tekstowe do personalizacji, a nie używając dziedzictwa modułu czatu. |
Pokaż wiadomość systemową | StarterGui:SetCore() używając "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Przycisk TextChannel.OnIncomingMessage może zwrócić instancję TextChatMessageProperties, aby dostosować wygląd wiadomości. |
Wyłącz Czat | Ustawienia gry w Studio i ChatWindow/ChatSettings moduł do ukrywania okienka czatu | ChatWindowConfiguration.Enabled |
Filtrowanie wiadomości
System czatu tekstowego w czasie rzeczywistego doświadczenia automatycznie filtrowuje wiadomości czatu w zależności od informacji o kontach wszystkich graczy, więc nie musisz ręcznie wdrożać filtrowania tekstu dla wszystkich rodzajów wiadomości czatu.
Funkcjonalność | Czat Dziedzictwa | Czat tekstowy w czasie |
---|---|---|
Filtruj wiadomość dla jednego gracza | Chat:FilterStringAsync() | n/d |
Filtruj wiadomości nadawane | Chat:FilterStringForBroadcast() | n/d |
Okienko i czat Czat
Zarówno okienko czatu jak i czat bąbelkowy zachowanie i opcje personalizacji w systemie czatu w doświadczeniu są identyczne z wszystkoz systemu czatu dziedz
Funkcjonalność | Czat Dziedzictwa | Czat tekstowy w czasie |
---|---|---|
Włącz okienko czatu | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Włącz czat Czat | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Ustawienia Okienka Czatu | Players:SetChatStyle() | ChatWindowConfiguration |
Ustawienia Bubble Chat | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
Włącząć bąbelki NPC | Chat:Chat() | TextChatService:DisplayBubble() |