テキストチャットの概要

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

Roblox は、ライブセッションでプレイヤー間のテキストベースのメッセージングを提供します TextChatService 。このサービスには標準機能がありますが、カスタマイズされた要件 に基づいてメッセージを配信したり、特定のプレイヤーに特別な権限やモデレーションを追加したり、特定のアクションを実行するためのカスタムコマンドを作成するなど、チャットを拡張したりカスタマイズしたりするための一連のメソッドとイベントを提供します。

次のセクションでは、チャットシステムをカスタマイズするために使用できる主要なクラスとインスタンスを概要します。

トップレベルの構成

シングルトンクラスは、チャットメッセージのフィルタリング、モデレーション、ユーザー権限の処理など、全体的なチャットシステムの管理に責任があります。プロパティ like CreateDefaultTextChannelsCreateDefaultCommands を使用して、デフォルトのチャットチャンネルとコマンドを有効化/無効化します。

デフォルトの UI 構成

TextChatService は、あなたのエクスペリエンスのニーズに合わせてカスタマイズできるデフォルトの UI を提供します。これらの構成のそれぞれが無効になり、関連する UI 要素を非表示にすることができ、必要に応じてカスタムインターフェイスに置き換えることができます。

チャネル、メッセージ、およびコマンド

  • TextChannel — ユーザーからクライアントに送信されたチャットメッセージをサーバーにパスし、それらを許可に基づいて他のユーザーに表示するテキストチャットチャネルを表現します。これらのインスタンスは機能するために TextChatService に親化する必要があります。

  • TextSource — ユーザーを TextChannel で表現します。これらのインスタンスは、 が呼ばれたときに直接親になります。テキストソースには、チャネルでユーザーの詳細な権限、例えばメッセージを送信する能力が含まれています。単一のユーザーは、複数のテキストチャンネルに追加された場合、複数のテキストソースに関連付けることができます。

  • TextChatMessage — テキストチャンネルで単一のチャットメッセージを表現し、送信者、元のメッセージ、フィルタリングされたメッセージ、および作成時刻を含む基本情報を持っています。

  • TextChatCommand — ユーザーが PrimaryAlias または SecondaryAlias に一致するメッセージを送信して、特定のアクションまたは動作を呼び出すことを許可します。これらのインスタンスは機能するために TextChatService に親化する必要があります。

チャットフローチャート

テキストチャットは、クライアント-サーバーモデルを使用し、 送信クライアントサーバー 、および 受信クライアント を使用します。

A flowchart for in-experience text chat.
  1. プレイヤーがローカルデバイスからメッセージを送信し、TextChannel:SendAsync() メソッドをトリガーします。このメソッドはメッセージを処理し、チャットコマンドか普通のチャットメッセージかを判断します。

    • メッセージがチャットコマンドの場合、TextChatCommand.Triggered イベントを発動して定義されたアクションを実行します。その後の手順は必要ありません。

    • メッセージが通常のチャットメッセージの場合、送信クライアントに送信者にメッセージを表示するための TextChatService.SendingMessage イベントを発動します。同時に、TextChannel:SendAsync() はメッセージをサーバーにパスします。

  2. サーバーは TextChannel.ShouldDeliverCallback を発射して、パーミッションと Roblox コミュニティフィルタリング要件に基づいてメッセージを他のプレイヤーに配信するかどうかを判断します。

  3. TextChannel.ShouldDeliverCallback がメッセージが他のプレイヤーに配信できることを判断すると、サーバーは任意のフィルターを適用し、TextChannel.OnIncomingMessage を 2 回発射します:

    1. 最初は送信クライアントにあり、サーバーがメッセージを TextChatService.MessageReceived イベントを通じて処理していることを示します。このイベントは、送信クライアントのローカルメッセージをサーバーから処理されたメッセージに置き換えます。オリジナルがフィルタリングを必要としなかった場合、メッセージは同じです。

    2. 2回目は受信クライアントで、TextChatService.MessageReceived イベントをトリガーしてメッセージを他のプレイヤーに表示します。

テキストチャットホックとコールバック

TextChatService は、チャットメッセージの表示と配信に明確な分離を促進します。テキストチャットシステムの複数のインスタンスは、中央化された、明確な場所でフォーマットするためのハックとコールバックを提供します。

A flowchart of the TextChatService callbacks order

| 呼び出し | 返却値 | | ----------------------------------------- | ----------------------------------- | | | boolean | | | | | | | | | | | | | | |

条件付きでメッセージを配信する

TextChannel.ShouldDeliverCallback コールバックは、サーバー上でのみ定義する必要があります。コールバックは、メッセージが送信されてメッセージが配信されるべきかどうかを判断するために、テキストチャネルの各 TextSource 子に発射されます。このコールバックは、追加のゲームプレイコンテキストに依存する可能性のあるカスタムメッセージ配信ロジックを実装するのに使用できます。たとえば:

  • 近接ベースのチャット では、ユーザーは自分に近い人にのみメッセージを送ることができます。
  • 特定の属性を持つユーザーが他のユーザーにメッセージを送信するのを防ぐ。

メッセージ表示をカスタマイズする

デフォルトの TextChatService UIは、メッセージの表示方法を形式化し、カスタマイズするためにリッチテキストを使用しています。ユーザーに表示される前に、メッセージを形式化するための次のコールバックを使用できます。例えば、色を追加したり、チャットタグ をユーザー名に追加したり、メッセージコンテンツを形式化します。

次のコールバックは、表示されるすべての TextChatMessage に呼び出され、TextChannelTextSource、または TextChatMessage コンテンツに基づいてチャットウィンドウの外観をカスタマイズできます。クライアントがメッセージを送信すると、メッセージがサーバーに送信されるときに、これらのコールバックが 1回呼び出され、TextChatMessage.Status 値が Enum.TextChatMessageStatus.Sending になります。メッセージがサーバーに受信され、他のユーザーに配信されると、送信者クライアントは更新された Enum.TextChatMessageStatus 値でメッセージを再び受信します。

  • TextChatService.OnIncomingMessage — このコールバックは、クライアント側にのみ定義する必要があります。コールバックは、サーバーからのメッセージを受信するか、ローカルクライアントがメッセージを送信したときに発動します。コールバックは、すべての TextChatMessage インスタンスから受信したすべての TextChannel メッセージに呼び出され、ユーザーに表示される前にメッセージを処理するのが最初です。
  • TextChannel.OnIncomingMessage — このコールバックは、クライアント側にのみ定義する必要があります。コールバックは、サーバーからメッセージを受信したときに発動します。コールバックは、TextChatMessage から受信したすべての TextChannel に呼び出されます。デフォルトの TextChannel インスタンスは、TextChatService.CreateDefaultTextChannels から作成され、このコールバックが定義されており、オーバーライドできます。
  • TextChatService.OnBubbleAdded — このコールバックは、クライアント側にのみ定義する必要があります。チャットウィンドウ UI のメッセージの表示と独立して、チャットバブルの外観をカスタマイズするために使用します。
  • TextChatService.OnChatWindowAdded — このコールバックは、クライアント側にのみ定義する必要があります。チャットウィンドウ UI のチャットメッセージの外観をカスタマイズするために、チャットバブル内のメッセージの外観と独立して使用します。

レガシーチャットから移行する

このセクションでは、TextChatService を使用して一般的なチャット機能と動作を実装する代替方法を提供して、レガシーチャットシステムから移行するのを助けます。

  1. In the エクスプローラー window, select TextChatService .

  2. In the プロパティ window, find the ChatVersion ドロップダウン and select TextChatService .

基本機能

両方のシステムは、同じ基本的なチャット機能を共有していますが、TextChatService 実装は一般的により持続可能で、反復するのが簡単です。

機能性レガシーチャットテキストChatService違い
チャットメッセージを送信するPlayers:Chat()TextChannel:SendAsync()SendAsync() メソッドは、リッチテキスト形式やメッセージ優先度などのより高度なチャット機能をサポートします。また、不適切なメッセージが送信されないようにするための内蔵フィルターも含まれています。
メッセージリコールを実装するChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageレガシーチャットシステムは、メッセージを配信するためにチャットシステムイベントに機能をバインドします。TextChatService の 2つのメソッドは、より良い柔軟性とカスタマイズを提供します。
カスタムチャットコマンドを追加ChatService/ChatCommand モジュールTextChatCommandTextChatService は、レガシーのチャットモジュールを使用せずに、テキストコマンド用の専用クラスを持っています。
システムメッセージを表示するStarterGui:SetCore() を使用中 ChatMakeSystemMessageTextChannel:DisplaySystemMessage()TextChannel.OnIncomingMessage コールバックは、メッセージの外観をカスタマイズするために TextChatMessageProperties インスタンスを返すことができます。
チャットを無効にするゲーム設定 在 Studio と ChatWindow/ChatSettings モジュールでチャットウィンドウを非表示にするChatWindowConfiguration.Enabled

メッセージフィルター

TextChatService 各プレイヤーのアカウント情報に基づいてチャットメッセージを自動的にフィルターするので、すべての種類のチャットメッセージのテキストフィルターを手動で実装する必要はありません。

機能性レガシーチャットテキストChatService
個々のプレイヤーのチャットメッセージをフィルターするChat:FilterStringAsync()自動
放送メッセージをフィルタするChat:FilterStringForBroadcast()自動

ウィンドウとバブルチャット

両方の チャットウィンドウバブルチャット の動作とカスタマイズオプション、および TextChatService のものと同じです。レガシーチャットシステムはチャットモジュールまたは Players コンテナを使用してのみカスタマイズが可能であるため、サービスはすべてのチャットウィンドウとバブルチャットプロパティを管理する専用クラス(ChatWindowConfiguration および BubbleChatConfiguration )を提供します。さらに、すべてをスクリプトする必要がなく、Studio 設定を使用してバブルチャットの外観と動作プロパティを簡単に調整し、プレビューできます。

機能性レガシーチャットテキストChatService
チャットウィンドウを有効にするClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
バブルチャットを有効にするClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
チャットウィンドウプロパティを設定Players:SetChatStyle()ChatWindowConfiguration
バブルチャットプロパティを設定Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle()BubbleChatConfiguration
NPCバブルを有効にするChat:Chat()TextChatService:DisplayBubble()

スピーカーを「追加データ」に移行する

レガシーの Lua チャットシステムでは、開発者が SetExtraData クラスで Speaker を使用できました。このデータは、名前の色、チャットの色、または特定のスピーカーに名前タグを適用するために使用されました。

レガシーチャットシステム SetExtraData

-- レガシーチャットシステムでスピーカーに追加データを設定する例
ChatService.SpeakerAdded:Connect(function(playerName)
local speaker = ChatService:GetSpeaker(playerName)
speaker:SetExtraData("NameColor", Color3.fromRGB(255, 255, 55))
speaker:SetExtraData("ChatColor", Color3.fromRGB(212, 175, 55))
speaker:SetExtraData("Tags", {{TagText = "YourTagName", TagColor = Color3.fromRGB(0, 255, 0)}, {TagText = "OtherTagName", TagColor = Color3.fromRGB(255, 0, 0)}})
end)

TextChatServiceSetExtraData に直接相当するものがありません。代わりに、 コールバック ( ) などを使用して、メッセージの外観をカスタマイズし、メッセージの に基づいてリッチテキストを使用してメッセージをカスタマイズします。

次の例では、Player オブジェクトの属性にアクセスして、レガシー Lua チャットの「追加データ」をエミュレートする方法を示します:

TextChatService セットアトリビュート

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
player:SetAttribute("NameColor", Color3.fromRGB(255, 255, 55))
player:SetAttribute("ChatColor", Color3.fromRGB(212, 175, 55))
player:SetAttribute("isYourTag", true)
player:SetAttribute("isOtherTag", true)
end)

次に、OnChatWindowAdded コールバックを使用して、プレイヤーに設定された属性に基づいてチャットウィンドウの外観をカスタマイズできます:

テキストチャットサービス OnChatWindowAdded

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
TextChatService.OnChatWindowAdded = function(textChatMessage)
local textSource = textChatMessage.TextSource
if textSource then
local player = Players:GetPlayerByUserId(textSource.UserId)
if player then
local overrideProperties = TextChatService.ChatWindowConfiguration:DeriveNewMessageProperties()
overrideProperties.PrefixText = textChatMessage.PrefixText
overrideProperties.Text = textChatMessage.Text
local nameColor = player:GetAttribute("NameColor")
if nameColor and typeof(nameColor) == "Color3" then
overrideProperties.PrefixTextProperties.TextColor3 = nameColor
end
local chatColor = player:GetAttribute("ChatColor")
if chatColor and typeof(chatColor) == "Color3" then
overrideProperties.TextColor3 = chatColor
end
local isYourTag = player:GetAttribute("isYourTag")
if isYourTag == true then
overrideProperties.PrefixText = `<font color='rgb(0, 255, 0)'>[YourTag]</font> {overrideProperties.PrefixText}`
end
local isOtherTag = player:GetAttribute("isOtherTag")
if isOtherTag == true then
overrideProperties.PrefixText = `<font color='rgb(255, 0, 0)'>[OtherTag]</font> {overrideProperties.PrefixText}`
end
return overrideProperties
end
end
return nil
end