Con il sistema di chat di testo in-experience su Roblox , i giocatori possono comunicare tra loro utilizzando messaggi basati sul testo in sessioni dal vivo. Il sistema fornisce un insieme di metodi e eventi per estendere e personalizzare le funzionalità di chat, come inviare messaggi basati su richieste personalizzate , aggiungere autorizzazioni speciali o moderazione a giocatori specifici e creare comandi personalizzati
Questa guida tratta il flusso di lavoro di chat e gli approcci per estendere le funzionalità del sistema di chat. Per ulteriori informazioni sulla personalizzazione dell'interfaccia utente di chat (UI), vedi Personalizzare l'interfaccia utente di chat.
Workflow di chat
Il sistema di chat di testo in-experience consiste in entrambi classi mutabili che puoi estendere per comportamenti di chat personalizzati e oggetti dati immutabili rappresentanti determinati elementi di chat restituiti dalle Classimutabili.
Classi di chat mutabili
Il sistema di chat di testo in-experience fornisce le seguenti Classimutabili:
- TextChatService — Questa classe singola è responsabile della gestione del sistema di chat generale, tra cui la gestione del filtro della chat, la moderazione e le autorizzazioni dell'utente. Accessibile dal Server, fornisce un insieme di metodi e eventi che le altre API di chat o azioni dell'utente possono invocare attraverso il flusso di lavoro di consegna della chat.
- TextChannel — Questa classe rappresenta un canale di chat di testo che passa i messaggi di chat inviati dal client al server e li visualizza per altri giocatori in base alle autorizzazioni. Puoi usarlo per creare, modificare e gestire i canali di testo nella tua esperienza. Inoltre, puoi creare più canali di testo per raggruppare i giocatori per il chat, come consentire ai giocatori di chattare con i loro membri del gruppo non visibili ad
- TextChatCommand — Questa classe ti consente di creare comandi di chat personalizzati che consentono ai giocatori di invocare azioni o comportamenti specifici digitando caratteri speciali seguiti da un nome di comando. I comandi di chat sono utili per aggiungere funzionalità e interattività alla chat experience. Puoi anche usarli per creare comandi amministratori per gestire e moderare la tua esperienza con gli script.
Oggetti di chat immutabili
Il sistema di chat di testo in-experience include i seguenti oggetti con proprietà di lettura che non puoi modificare:
- TextChatMessage : Questo oggetto rappresenta un singolo messaggio in un canale di chat di testo con informazioni di base come il mittente del Messaggio, il Messaggiooriginale, il Messaggiofiltrato e il timestamp di creazione.
- TextSource : Questo oggetto rappresenta un mittente di messaggi in un canale di chat di testo con autorizzazioni dettagliate di un giocatore nel canale. Se un giocatore è in più canali di chat di testo, possono avere più fonti di testo come well.
Carta di flusso della chat
Attraverso il messaggio di chat e il processo di consegna, metodi, richiami e eventi di classi di chat mutabili funzionano accanto agli oggetti di chat immutabili su tre lati del modello client-server:
- Il client di destinazione, che è il dispositivo locale di un giocatore che invia un Messaggio.
- Ricevere client, che sono dispositivi locali di altri giocatori.
- Il Server, che è il processore centrale per ricevere il messaggio dal client di destinazione e gestisce la consegna ai client di destinazione.
Come mostra la tabella di flusso, il sistema di chat di testo in-experience elabora un messaggio di chat attraverso i seguenti passaggi:
- Un giocatore invia un messaggio dal loro Dispositivolocale, attivando il metodo TextChannel:SendAsync() . Questo metodo elabora il messaggio e determina se è un comando di chat o un Messaggioregolare.
- Se l'input del giocatore è un comando di chat, attiva l'evento TextChatCommand.Triggered per eseguire l'azione che hai definito per il comando.
- Se l'input del giocatore è un Messaggiodi chat regolare, attiva TextChatService.SendingMessage per visualizzare il messaggio originale all' mittente sul client di destinazione. Allo stesso tempo, il TextChannel:SendAsync() passa il messaggio al Server.
- Il server fire TextChannel.ShouldDeliverCallback per determinare se inviare il messaggio ad altri giocatori in base alle autorizzazioni che hai impostato e alle richieste di filtro della comunità Roblox.
- Se TextChannel.ShouldDeliverCallback determinato che il messaggio è idoneo per essere consegnato ad altri giocatori, il server applica tutti i filtri e attiva TextChannel.OnIncomingMessage due volte:
- La prima volta sul client di destinazione per segnalare che il server sta elaborando il messaggio attraverso l'evento TextChatService.MessageReceived. Questo sostituisce anche il messaggio locale sul client di destinazione con il messaggio in arrivo per visualizzare sui client di destinazione. Il messaggio può essere identico se il messaggio originale non richiede filtro.
- La seconda volta è sul client di destinazione per attivare l'evento TextChatService.MessageReceived per visualizzare il messaggio ad altri giocatori.
Ci sono diverse aree del flusso di lavoro della chat system che puoi estendere e personalizzare il comportamento, ma le fasi di come il sistema funziona rimangono le stesse.
Personalizzare i comportamenti di consegna del messaggio
Oltre a seguire il comportamento di consegna del messaggio di chat predefinito, puoi usare TextChannel.ShouldDeliverCallback per aggiungere autorizzazioni e comportamenti specifici per determinare se i giocatori possono ricevere un messaggio per l'Coinvolgimento/Impregnopersonalizzato, come:
- Supporto della chat basata sul gruppo che solo i giocatori nello stesso gruppo o squad possono comunicare tra loro.
- Supporto della chat basata sulla vicinanza in cui i giocatori possono inviare messaggi solo a coloro che sono vicini a loro.
- Impedire ai giocatori con determinati attributi di inviare messaggi agli altri. Ad esempio, vieta ai giocatori con uno stato di morte di inviare messaggi a giocatori vivi.
- Aggiungere la funzione di competizione di indovinamento in cui le risposte corrette in chat non sono visibili per gli altri giocatori.
L'esempio seguente mostra come implementare la chat esclusiva per i personaggi dei giocatori che sono vicini tra loro in posizione. Estende il callback con una funzione che utilizza TextSource per identificare le posizioni di un giocatore che potrebbe essere un destinatario potenziale del messaggio. Se questa funzione restituisce false , significa che il personaggio del giocatore si trova oltre la portata pre
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Questo esempio usa il canale generale; puoi sostituirlo con un canale dedicato
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Definisci una funzione per ottenere la posizione di un personaggio di un Giocatore
local function getPositionFromUserId(userId: number)
-- Ottieni il giocatore associato all'ID utente fornito
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Se il giocatore esiste, ottieni la posizione del loro personaggio.
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Restituisci una posizione predefinita se il giocatore o il personaggio non possono essere trovati
return Vector3.zero
end
-- Imposta il callback per il canale generale per controllare la consegna del messaggio
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Ottieni le posizioni del mittente e del destinatario del messaggio
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Se la distanza tra il mittente e il destinatario è inferiore a 50 unità, invia il Messaggio
return (targetPos - sourcePos).Magnitude < 50
end
Creazione di Comandi Personalizzati
Il sistema di chat di testo in-experience ha comandi di chat incorporati per scopi comuni, come la creazione di canali di chat basati sul team e il giocare l'avatar Emote. Puoi abilitarli impostando TextChatService.CreateDefaultCommands
L'esempio seguente mostra come creare un comando di chat che consente ai giocatori di aumentare o diminuire la dimensione del loro personaggio quando inseriscono /super o /mini .
Inserisci un'istanza TextChatCommand all'interno di TextChatService .
Rinominalo in Comando di dimensioni .
Imposta la sua proprietà PrimaryAlias su /super e la sua proprietà SecondaryAlias su 1> /mini1> .
Inserisci il seguente Script dentro ServerScriptService per definire un callback per il comando di chat che ingrandisce la dimensione del personaggio.
Scriptlocal 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)
Migrazione dalla Chatlegacy
Questa sezione ti aiuta a passare dal legacy chat system fornendo metodi alternativi per l'implementazione di funzionalità e comportamenti di chat comuni utilizzando il sistema di chat in-experience.
Per passare dal sistema di chat di un'esperienza esistente dal sistema di chat di eredità allo script di chat di in-experience:
Nella finestra Explorer, seleziona TextChatService.
Nella finestra Proprietà, trova il ChatVersion menu a discesa e seleziona TextChatService.
Funzionalità di base
Anche se entrambi i sistemi condividono le stesse funzionalità di base del chat, le implementazioni del chat di testo in-esperienza sono in generale più sostenibili e più facili da itere.
Funzionalità | Chat di legacy | Chat di testo in-esperienza | Differenze |
---|---|---|---|
Invia un messaggio di chat | Players:Chat() | TextChannel:SendAsync() | Il metodo TextChatService:SendAsync() supporta più funzionalità di chat avanzate come la formattazione del testo ricco e la priorità del messaggio.Include anche il filtro built-in per aiutare a prevenire i messaggi non appropriati. |
implementa i messaggi di ritorno | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Il sistema di chat legacy lega una funzione a degli eventi del sistema chat per la consegna di messaggi. I due metodi del sistema chat in-experience hanno più flessibilità e opzioni di personalizzazione. |
Aggiungi comandi di chat personalizzati | ChatService/ChatCommand modulo | TextChatCommand | Il sistema di chat di testo in-experience ha una classe dedicata che rappresenta un comando di testo per la personalizzazione invece di utilizzare un modulo di chat legacy. |
Visualizza un messaggio del sistema | StarterGui:SetCore() utilizzando "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Il TextChannel.OnIncomingMessage callback può restituire un'istanza TextChatMessageProperties per personalizzare l'aspetto del messaggio. |
Disabilita Chat | Impostazioni di gioco in Studio e ChatWindow/ChatSettings modulo per nascondere la finestra di chat | ChatWindowConfiguration.Enabled |
Filtraggio del messaggio
Il sistema di chat di testo in-experience filtra automaticamente i messaggi di chat in base all'informazione dell'account di ciascun Giocatore, in modo che tu non debba implementare manualmente il filtro del testo per tutti i tipi di messaggi di chat.
Funzionalità | Chat di legacy | Chat di testo in-esperienza |
---|---|---|
Filtro del messaggio per il giocatore individuale | Chat:FilterStringAsync() | n/a |
Filtra i messaggi di broadcasting | Chat:FilterStringForBroadcast() | n/a |
Chat di finestra e bolle
Entrambi la finestra di chat e il comportamento chat a bolle e le opzioni Personalizzazione del sistema di chat in-experience sono identiche a quelle del sistema di chat legacy. Poiché il sistema di chat in-experience
Funzionalità | Chat di legacy | Chat di testo in-esperienza |
---|---|---|
Abilita finestra chat | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Abilita Bubble Chat | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Imposta le proprietà della finestra di chat | Players:SetChatStyle() | ChatWindowConfiguration |
Imposta le proprietà di Bubble Chat | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
Abilita bolle NPC | Chat:Chat() | TextChatService:DisplayBubble() |