Czat tekstowy w czasie

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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.
A flowchart of the in-experience text chat workflow

Jak pokazuje rysunek płynny, system czatu tekstowego w doświadczeniu przetwarza wiadomość o czacie poprzez następujące kroki:

  1. 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.
  2. Jeśli wpis gracza jest komendą czatu, uruchomia wydarzenie TextChatCommand.Triggered, aby wykonać akcję, którą określiłeś dla komendy.
  3. 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.
  4. 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.
  5. Jeśli TextChannel.ShouldDeliverCallback określa, że wiadomość jest elegible do dostarczenia innym graczom, serwer stosuje wszystkie filtry i uruchnia TextChannel.OnIncomingMessage dwukrotnie:
    1. 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.
    2. 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.

  1. Wprowadź TextChatCommand instancję w TextChatService .

  2. Zmień go na Komenda rozmiarowa .

  3. Ustaw jego PrimaryAlias wartość na /super i jego SecondAlias na 1> /mini1> .

  4. Wprowadź następujące Script w ServerScriptService, aby zdefiniować wysokę funkcję dla przycisku czatu, który skaluje rozmiar znaku.

    Skrypt

    local TextChatService = game:GetService("TextChatService")
    local Players = game:GetService("Players")
    local sizeCommand: TextChatCommand = TextChatService:WaitForChild("SizeCommand")
    sizeCommand.Triggered:Connect(function(textSource, message)
    local scaleMult = 1
    local messageWords = string.split(message, " ")
    if messageWords[1] == "/super" then
    scaleMult = 2
    elseif messageWords[1] == "/mini" then
    scaleMult = 0.5
    end
    local player = Players:GetPlayerByUserId(textSource.UserId)
    if player then
    local character = player.Character
    if character then
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    for _, child in humanoid:GetChildren() do
    if child:IsA("NumberValue") then
    child.Value *= scaleMult
    end
    end
    end
    end
    end
    end)

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:

  1. W oknie Explorer wybierz TextChatService .

  2. 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 DziedzictwaCzat tekstowy w czasieRóżnice
Wyślij wiadomość czatuPlayers: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 zwrotnychChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageLegacy 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 czatuChatService/ChatCommand modułTextChatCommandW 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 CzatUstawienia gry w Studio i ChatWindow/ChatSettings moduł do ukrywania okienka czatuChatWindowConfiguration.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 DziedzictwaCzat tekstowy w czasie
Filtruj wiadomość dla jednego graczaChat:FilterStringAsync()n/d
Filtruj wiadomości nadawaneChat: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 DziedzictwaCzat tekstowy w czasie
Włącz okienko czatuClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Włącz czat CzatClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Ustawienia Okienka CzatuPlayers:SetChatStyle()ChatWindowConfiguration
Ustawienia Bubble ChatClass.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0>BubbleChatConfiguration
Włącząć bąbelki NPCChat:Chat()TextChatService:DisplayBubble()