Mit dem In-Experience-Text-Chat -System auf Roblox können Spieler miteinander über Text-basierte Nachrichten in Live-Sitzungen kommunizieren. Das System bietet eine Reihe von Methoden und Ereignissen, um Chat-Funktionen zu erweitern und anzupassen, z. B. Nachrichten basierend auf benutzerdefinierten Anforderungen , das Hinzufügen von Spezialberechtigungen oder Moderationen zu bestimm
Diese Anleitung bezieht sich auf die Chat-Workflow und Ansätze für die Erweiterung der Funktionalitäten des Chat-Systems. Weitere Informationen zum Anpassen der Chat-Benutzeroberfläche (UI) finden Sie unter Anpassung des Text-Chats.
Chat-Workflow
Das in-experience Text-Chat-System besteht aus sowohl veränderbaren Klassen, die Sie für benutzerdefinierte Chat-Lieferungsverhalten erweitern können, als auch unveränderlichen Datenobjekten, die bestimmte Chat-Elemente repräsentieren, die von mutablen Klassen zurückgegeben werden.
Mutable Chat-Klassen
Das Text-Chat-System in der Erfahrung bietet die folgenden mutablen Klassen:
- TextChatService — Diese einzelne Klasse ist verantwortlich für die Verwaltung des Gesamtsystems, einschließlich der Verarbeitung von Chat-Nachrichten-Filtern, Moderation und Benutzerberechtigungen. Zugriff auf den Server bietet eine Reihe von Methoden und Ereignissen, die andere Text-Chat-APIs oder Spieler-Aktionen über den Chat-Lieferungs-Workflow aufrufen können.
- TextChannel — Diese Klasse stellt einen Text-Chat-Kanal dar, der Spieler-Chat-Nachrichten vom Client zum Server weiterleitet und sie anderen Spielern basierend auf Berechtigungen anzeigt. Sie können es verwenden, um Text-Kanäle in Ihrem Erlebnis zu erstellen, zu modifizieren und zu verwalten. Darüber hinaus können Sie mehrere Text-Kanäle erstellen, um Spieler miteinander für den Chat zu gruppieren, z. B. die Erla
- TextChatCommand — Diese Klasse ermöglicht es Ihnen, benutzerdefinierte Chat-Befehle zu erstellen, die es den Spielern ermöglichen, bestimmte Aktionen oder Verhaltensweisen durch das Schreiben spezieller Zeichen nach einem Befehlsnamen zu verknüpfen. Chat-Befehle sind hilfreich, um der Erlebniszusätzliche Funktionalitäten und Interaktivität hinzuzufügen. Sie können sie auch verwenden, um Admin-Befehle zu erstellen, um
Immobilisierte Chat-Objekte
Das Chat-System in der Erfahrung enthält die folgenden, nicht modifizierbaren Objekte mit nur "Lesen"-Eigenschaften, die Sie nicht ändern können:
- TextChatMessage : Dieses Objekt stellt eine einzelne Chat-Nachricht in einem Text-Chat-Kanal mit grundlegenden Informationen wie dem Absender der Nachricht, der ursprüngliche Inhalt der Nachricht, die gefilterte Nachricht und die Erstellungszeit dar.
- TextSource : Dieses Objekt stellt einen Nachrichten-Sender in einem Text-Chat-Kanal mit detaillierten Berechtigungen eines Spielers im Kanal dar. Wenn ein Spieler in mehreren Text-Chat-Kanälen ist, kann er auch mehrere Textquellen haben.
Chat-Flussdiagramm
Durch den Chat-Nachrichten-Senden- und -Liefer-Prozess, Methoden, Rückrufe und Ereignisse von mutablen Chat-Klassen arbeiten neben unveränderlichen Chat-Objekten auf drei Seiten des Client-Server-Modells:
- Der Sende-Client, der die lokale Geräte eines Spielers ist, der eine Nachricht sendet.
- Clients erhalten, die lokale Geräte anderer Spieler sind.
- Der Server, der der zentrale Prozessor ist, um die Nachricht vom Sender-Client zu erhalten, und die Lieferung an die Empfänger-Clients zu verarbeiten.
Wie die Flow-Diagramm-Anzeige zeigt, verarbeitet das Chat-System in der Erfahrung Text-Chat-Nachrichten durch die folgenden Schritte:
- Ein Spieler sendet eine Nachricht von seinem lokalen Gerät, wodurch die TextChannel:SendAsync() Methode ausgelöst wird. Diese Methode verarbeitet die Nachricht und bestimmt, ob es sich um eine Chat-Anfrage oder eine reguläre Chat-Nachricht handelt.
- Wenn die Spieler-Eingabe ein Chat-Befehl ist, wird das Ereignis TextChatCommand.Triggered ausgelöst, um die Aktion auszuführen, die Sie für den Befehl definiert haben.
- Wenn die Spieler-Eingabe eine normale Chat-Nachricht ist, wird TextChatService.SendingMessage ausgeführt, um die ursprüngliche Nachricht an den Sender auf dem Senden-Client anzuzeigen. Zugleich übermittelt die TextChannel:SendAsync() Nachricht an den Server.
- Der Server feuert TextChannel.ShouldDeliverCallback ab, um zu bestimmen, ob die Nachricht an andere Spieler basierend auf den Berechtigungen, die Sie einstellen, und den Roblox-Community-Filtering-Anforderungen geliefert werden soll.
- Wenn TextChannel.ShouldDeliverCallback feststellt, dass diese Nachricht für andere Spieler bereitgestellt werden kann, wird der Server alle Filter anwenden und TextChannel.OnIncomingMessage zweimal ausführen:
- Der erste Zeitpunkt auf dem Senden-Client, um zu signalisieren, dass der Server die Nachricht über das Ereignis TextChatService.MessageReceived verarbeitet. Dies ersetzt auch die lokale Nachricht auf dem Senden-Client durch die einkommende Nachricht an die Anzeige auf den Empfänger. Die Nachricht kann identisch sein, wenn der ursprüngliche Nachricht nicht필터링 erfordert.
- Das zweite Mal ist auf dem Client, auf den die Nachricht TextChatService.MessageReceived angezeigt wird, um die Nachricht an andere Spieler anzuzeigen.
Es gibt mehrere Bereiche des Chat-System-Workflows, in denen Sie das Verhalten erweitern und anpassen können, aber die Schritte, wie das System funktioniert, bleiben die gleichen.
Benutzerdefinierte Lieferverhaltens
Zusätzlich zum Stickere mit der Standard-Chat-Nachrichten-Lieferung Verhalten, können Sie TextChannel.ShouldDeliverCallback verwenden, um Berechtigungen und bestimmte Verhaltensweisen hinzuzufügen, um zu bestimmen, ob Spieler eine Nachricht für benutzerdefinierte Engagement erhalten können, z. B.:
- Unterstützung für Gruppenchat, bei dem nur Spieler in deiner Gruppe oder deinem Team miteinander kommunizieren können.
- Unterstützung der Nähe-basierten-Chat, in der Spieler nur Nachrichten an diejenigen senden können, die ihnen nahe stehen.
- Verhindern Sie Spieler mit bestimmten Attributen, die Nachrichten an andere senden. Zum Beispiel können Sie Spieler mit einem Todesstatus daran hindern, Nachrichten an lebende Spieler zu senden.
- Hinzufügen des Verdachts-Wettbewerbsfunktion, bei der die richtigen Antworten im Chat für andere Spieler nicht sichtbar sind.
Das folgende Beispiel zeigt, wie man exklusiven Chat für Spielercharaktere implementiert, die in naher Nähe sind. Es erweitert den Rückruf mit einer Funktion, die TextSource verwendet, um die Position eines Spielers zu identifizieren, der potenziell ein Nachrichten-Empfänger sein könnte. Wenn diese Funktion false zurückgibt, bedeutet dies, dass der
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Dieses Beispiel verwendet den allgemeinen Kanal; Sie können dies mit einem dedizierten Kanal ersetzen
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Definieren Sie eine Funktion, um die Position eines Spieler:inzu erhalten
local function getPositionFromUserId(userId: number)
-- Holen Sie sich den Spieler, der mit der angegebenen Benutzer-ID verbunden ist
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Wenn der Spieler existiert, erhalten Sie die Position ihres Charakters.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Kehre eine Standardposition zurück, wenn der Spieler oder der Charakter nicht gefunden werden kann
return Vector3.zero
end
-- Setzen Sie den Rückruf für den allgemeinen Kanal, um die Nachrichtenlieferung zu steuern
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Erhalten Sie die Positionen des Nachrichten senders und des Ziels
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Wenn die Entfernung zwischen dem Sender und dem Ziel weniger als 50 Einheiten beträgt, liefern Sie die Nachricht
return (targetPos - sourcePos).Magnitude < 50
end
Benutzerdefinierte Befehle erstellen
Das in-experience Text-Chat-System hat integrierte Chat-Befehle für häufige Zwecke, wie das Erstellen von Team-basierten Chat-Kanälen und das Spielen von Avatar-Emotes. Sie können sie aktivieren, indem Sie Class.TextChatService.Create
Das folgende Beispiel zeigt, wie man ein Chat-Befehl erstellt, der den Spielern erlaubt, die Größe ihres Charakters zu vergrößern oder zu verkleinern, wenn sie /super oder /mini eingeben.
Fügen Sie eine TextChatCommand Instanz in TextChatService ein.
Benennen Sie es um SizeCommand .
Setzen Sie seine PrimärAlias -Eigenschaft auf /super und seine SekundärAlias auf 1> /mini1>.
Fügen Sie den folgenden Script in ServerScriptService ein, um einen Rückruf für die Chat-Befehlsgröße zu definieren, die die Größe des Charakters skaliert.
Skriptlocal 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)
Von Legacy-Chat migrieren
Dieser Abschnitt hilft Ihnen bei der Migration vom Legacy-Chat-System, indem er alternative Methoden zur Umsetzung häufiger Chat-Funktionen und -Verhaltens mit dem In-Experience-Text-Chat-System bietet.
Um das Chat-System einer bestehenden Erfahrung vom Legacy-Chat-System zum In-Experience-Text-Chat-System umzustellen:
In dem Explorer-Fenster wählen Sie TextChatService .
In dem Eigenschaften-Fenster finden Sie das ChatVersion -Dropdown und wählen Sie TextChatService .
Grundlegende Funktionalitäten
Obwohl beide Systeme die gleichen grundlegenden Chat-Funktionalitäten teilen, sind die Umsetzungen des Text-Chats in der Erfahrung im Allgemeinen nachhaltiger und einfacher zu wiederholen.
Funktionalität | Legacy-Chat | In-Experience-Text-Chat | Unterschiede |
---|---|---|---|
Senden Sie eine Chat-Nachricht | Players:Chat() | TextChannel:SendAsync() | Die Methode TextChatService:SendAsync() unterstützt mehr erweiterte Chat-Funktionen, wie z. B. die Text-Formulierung und die Nachrichten priorisierung. Sie enthält auch integrierte Filter, um unangemessene Nachrichten zu verhindernSatz |
Messaging-Callouts implementieren | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Das Legacy-Chat-System bindet eine Funktion an, um System-Ereigniseiten für die Lieferung von Nachrichten anzubieten. Die beiden Methoden des In-Experience-Text-Chats haben mehr Flexibilitäten und Anpassungsmöglichkeiten. |
Benutzerdefinierte Chat-Befehle hinzufügen | ChatService/ChatCommand Modul | TextChatCommand | Das In-Experience-Text-Chat-System hat eine dedizierte Klasse, die ein Text-Befehl für die Anpassung verwendet, anstatt ein Legacy-Chat-Modul zu verwenden. |
Zeige eine Systemnachricht an | StarterGui:SetCore() mit "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Der TextChannel.OnIncomingMessage- Rückruf kann eine Instanz von TextChatMessageProperties zurückgeben, um die Aussehenanzupassen. |
Chat deaktivieren | Spieleinstellungen in Studio und ChatWindow/ChatSettings Modul zum Verbergen des Chat-Fensters | ChatWindowConfiguration.Enabled |
Nachrichten-Filterung
Das Chat-System in der Erfahrung filtert automatisch Chat-Nachrichten basierend auf der Kontoinformation jedes Spieler:in, sodass Sie keinen Text-Filter für alle Arten von Chat-Nachrichten manuell implementieren müssen.
Funktionalität | Legacy-Chat | In-Experience-Text-Chat |
---|---|---|
Nachricht für einzelnen Spieler filtern | Chat:FilterStringAsync() | n/a |
Filter-Broadcasting-Nachrichten | Chat:FilterStringForBroadcast() | n/a |
Fenster- und Blasen-Chat
sowohl das Chat-Fenster als auch das Blasen-Chat -Verhalten und Anpassungs -Optionen des In-Experience-Text-Chatsystems identisch sind mit denen des Legacy-Chat-Systems. Da das Legacy-
Funktionalität | Legacy-Chat | In-Experience-Text-Chat |
---|---|---|
Chat-Fenster aktivieren | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Blasen-Chat aktivieren | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Chat-Fenster-Eigenschaften einstellen | Players:SetChatStyle() | ChatWindowConfiguration |
Blasen-Chat-Eigenschaften einstellen | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
NPC-Blasen aktivieren | Chat:Chat() | TextChatService:DisplayBubble() |