Chat di testo in-esperienza

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

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

Come mostra la tabella di flusso, il sistema di chat di testo in-experience elabora un messaggio di chat attraverso i seguenti passaggi:

  1. 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.
  2. Se l'input del giocatore è un comando di chat, attiva l'evento TextChatCommand.Triggered per eseguire l'azione che hai definito per il comando.
  3. 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.
  4. 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.
  5. 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:
    1. 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.
    2. 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 .

  1. Inserisci un'istanza TextChatCommand all'interno di TextChatService .

  2. Rinominalo in Comando di dimensioni .

  3. Imposta la sua proprietà PrimaryAlias su /super e la sua proprietà SecondaryAlias su 1> /mini1> .

  4. Inserisci il seguente Script dentro ServerScriptService per definire un callback per il comando di chat che ingrandisce la dimensione del personaggio.

    Script

    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)

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:

  1. Nella finestra Explorer, seleziona TextChatService.

  2. 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 legacyChat di testo in-esperienzaDifferenze
Invia un messaggio di chatPlayers: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 ritornoChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageIl 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 personalizzatiChatService/ChatCommand moduloTextChatCommandIl 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 sistemaStarterGui:SetCore() utilizzando "ChatMakeSystemMessage"TextChannel:DisplaySystemMessage()Il TextChannel.OnIncomingMessage callback può restituire un'istanza TextChatMessageProperties per personalizzare l'aspetto del messaggio.
Disabilita ChatImpostazioni di gioco in Studio e ChatWindow/ChatSettings modulo per nascondere la finestra di chatChatWindowConfiguration.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 legacyChat di testo in-esperienza
Filtro del messaggio per il giocatore individualeChat:FilterStringAsync()n/a
Filtra i messaggi di broadcastingChat: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 legacyChat di testo in-esperienza
Abilita finestra chatClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Abilita Bubble ChatClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Imposta le proprietà della finestra di chatPlayers:SetChatStyle()ChatWindowConfiguration
Imposta le proprietà di Bubble ChatClass.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0>BubbleChatConfiguration
Abilita bolle NPCChat:Chat()TextChatService:DisplayBubble()