Roblox(ロブロックス)blox の インエクスペリエンステキストチャット システムは、プレイヤーがライブセッションでテキストベースのメッセージを使用してお互いにコミュニケーションできるようにします。システムは、「カスタマイズされた要件」、「特別な権限やモ
このガイドでは、チャットワークフローとアプローチを含むチャットシステムの機能の拡張について説明しています。チャットユーザーインターフェース (UI) のカスタマイズについては、「チャットのカスタマイズ」を参照してください。
チャットワークフロー
エクスペリエンス内のチャットシステムは、変更可能なクラス で構成されています。これは、カスタマイズされたチャット配信動作を拡張するために、変更可能なクラスに拡張することができる immutable data objects を表します。
変更可能なチャットクラス
インエクスペリエンスのテキストチャットシステムは、次の変更可能なクラスを提供します:
- TextChatService — このシングルクラスは、チャットシステム全体を管理するために責任を負っています、包括チャットメッセージフィルタリング、モデレーション、ユーザー権限を含む。サーバーからアクセス可能な、他のテキストチャット API またはプレイヤーアクションを通じて呼び出される可能性のあるメソッ
- TextChannel — このクラスは、プレイヤーがクライアントからのチャットメッセージをサーバーにパスし、それらを他のプレイヤーに基づいて表示するテキストチャットチャンネルを表します。これを使用して、エクスペリエンスでテキストチャンネルを作成、変更、および管理で
- TextChatCommand — このクラスでは、プレイヤーが特定のアクションや動作を実行するために、特別な文字列に続くコマンドを作成できます。チャットコマンドは、チャットエクスペリエンスに追加の機能とインタラクティビティを追加するのに便利です。また、ショートカットを使用して管理およびモデレートするため
不変更なチャットオブジェクト
体験中のテキストチャットシステムには、読み取りのみのプロパティを持つ不変更なオブジェクトが含まれており、これらのオブジェクトを変更できません:
- TextChatMessage : このオブジェクトは、基本情報(メッセージの送信元、元メッセージ、フィルターされたメッセージ、および作成時間)を持つ 1つのチャットメッセージを表示します。
- TextSource : このオブジェクトは、チャットチャンネルでプレイヤーの詳細な権限を持つテキストチャットチャンネルでメッセージ送信者を表します。プレイヤーが複数のテキストチャットチャンネルにある場合、彼らは複数のテキストソースを持つこともできます。
チャットフローチャート
チャットメッセージの送信と配信プロセス、メソッド、コールバック、イベント、および変更可能なチャットクラスの 3つの側面で、ミュータブルチャットクラスのメソッド、コールバック、イベント、およびイベントは、クライアント-サーバー モデルの 3つの側面で動作します:
- メッセージを送信するプレーヤーのローカルデバイスの送信クライアント。
- 他のプレイヤーのローカルデバイスであるクライアントを受信しています。
- 送信クライアントからメッセージを受信し、受信クライアントに配信する中央プロセッサーです。
フローチャートに示すように、経験のないテキストチャットシステムは、次のステップを通じてチャットメッセージを処理します:
- プレイヤーはローカルデバイスからメッセージを送信し、TextChannel:SendAsync() メソッドをトリガーします。このメソッドはメッセージを処理し、チャットコマンドか、通常のチャットメッセージかを判断します。
- プレイヤーの入力がチャットコマンドである場合、TextChatCommand.Triggered イベントを発動して、コマンドに定義されたアクションを実行します。
- プレイヤーの入力が規則的なチャットメッセージである場合、TextChatService.SendingMessage を発動して、送信クライアントに原始メッセージを表示する。同時に、TextChannel:SendAsync() は、メッセージをサーバーにパスします。
- サーバーは TextChannel.ShouldDeliverCallback を発動して、Roblox コミュニティのフィルタリング要件と設定された権限に基づいてメッセージを他のプレイヤーに配信するかどうかを判断します。
- Class.TextChannel.ShouldDeliverCallback が、そのメッセージが他のプレイヤーに配信できることを決定した場合、サーバーはフィルターを適用し、TextChannel.OnIncomingMessage を 2 回実行します:
- 送信クライアントがサーバーを処理することを信号するために、TextChatService.MessageReceivedイベントで最初の時間にサーバーを送信します。これにより、送信クライアントのローカルメッセージも、受信クライアントに表示されるメッセージに置き換えられます。メッセージは、オリジナルメッセージがフィルタリングされない場合と同じ
- 第2回は、受信クライアントで TextChatService.MessageReceived イベントをトリガーして、メッセージを他のプレイヤーに表示することです。
チャットシステムのワークフローには、拡張とカスタマイズができるいくつかのエリアがありますが、システムの操作方法は変更されません。
メッセージの配信行動をカスタマイズする
デフォルトのチャットメッセージの配信動作に従うことに加えて、TextChannel.ShouldDeliverCallback を使用して、プレイヤーがカスタマイズされたエンゲージメントのメッセージを受信できるかどうかを確認するために権限と特定の動作を追加できます:
- 同じグループまたはチームのプレイヤーだけがコミュニケーションできるグループベースのチャットをサポートしています。
- プレイヤーが近くにいる人にのみメッセージを送信できる近接ベースのチャットをサポートします。
- プレイヤーに特定のアトリビュートを持つメッセージを他のプレイヤーに送信することを防止します。たとえば、死亡ステータスのプレイヤーをディスアロープして、生きているプレイヤーにメッセージを送信できます。
- チャットで正しい答えが他のプレイヤーに表示されないことを含む推測コンテスト機能を追加します。
次の例では、場所に近いプレイヤーのキャラクターの限定チャットを実装する方法を示しています。これは TextSource を使用してコールバックを拡張して、プレイヤーが潜在的なメッセージ受信者である可能性のある場所を特定するために使用
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- この例では、一般チャンネルを使用しています。これを専用チャンネルに置き換えることができます
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- プレイヤーのキャラクターの位置を取得する関数を定義します
local function getPositionFromUserId(userId: number)
-- 指定されたユーザー ID に関連するプレイヤーを取得する
local targetPlayer = Players:GetPlayerByUserId(userId)
-- プレイヤーが存在する場合、そのキャラクターの位置を取得します。
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- プレイヤーまたはキャラクターが見つかることができない場合、デフォルトの位置を返します
return Vector3.zero
end
-- 一般チャンネルのメッセージ配信を制御するためのコールバックを設定します
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- メッセージ送信者とターゲットの位置を取得
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- 送信者とターゲットの距離が 50 以下の場合、メッセージを送信
return (targetPos - sourcePos).Magnitude < 50
end
カスタムコマンドの作成
エクスペリエンス内のチャットシステムには、チームベースのチャットチャンネルの作成やアバターのエモートプレイなど、さまざまな目的で使用できるチャットコ
次の例では、プレイヤーが /super または /mini を入力するときにキャラクターのサイズを増加または減少するようにするチャットコマンドを作成する方法を示しています。
Class.TextChatService 内の TextChatService インスタンスを挿入します。
Rename it to サイズコマンド 。
その PrimaryAlias プロパティを /super に、その SecondaryAlias を 1> /mini1> に設定します。
Class.Script を ServerScriptService の中に挿入して、キャラクターのサイズを拡大/縮小するチャットコマンドのコールバックを定義します。
スクリプトlocal 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)
レガシーチャットからの移行
このセクションでは、レガシーチャットシステムからの移行に役立つ、コモンチャット機能と動作を実装するためのオルタネティブメソッドを提供します。
既存のエクスペリエンスのチャットシステムをレガシーチャットシステムからインエクスペリエンステキストチャットシステムに切り替えるには:
In the Explorer window, select TextChatService .
In the プロパティ window, find the チャットバージョン dropdown and select TextChatService .
基本的な機能
両方のシステムは基本的なチャット機能に共通するものがありますが、経験のないテキストチャットシステムの実装は一般的に持続可能であり、イテレートしやすいようになっています。
機能性 | レガシーチャット | インエクスペリエンステキストチャット | 違い |
---|---|---|---|
チャットメッセージを送信 | Players:Chat() | TextChannel:SendAsync() | Class.TextChatService:SendAsync() メソッドは、リッチテキストフォーマット、メッセージ優先度などのより高度なチャット機能をサポートしています。また、不適切なメッセージが送信されるのを防ぐために内蔵のフィルターを含みます。 |
メッセージキャックバックを実装する | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | TextChatService.SendingMessage TextChatService.OnIncomingMessage | レガシーチャットシステムは、メッセージを配信するためにチャットシステムイベントに関数をバインドします。エクスペリエンステキストチャットシステムの 2つのメソッドは、より多くの柔軟性とカスタマイズオプションを提供します。 |
カスタムチャットコマンドを追加 | ChatService/ChatCommand モジュール | TextChatCommand | 現在のエクスペリエンスのチャットシステムには、レガシーチャットモジュールを使用する代わりに、テキストコマンドのカスタマイズを表す専用クラスがあります。 |
システムメッセージを表示 | StarterGui:SetCore() を使用しています "ChatMakeSystemMessage" | TextChannel:DisplaySystemMessage() | Class.TextChannel.OnIncomingMessage コールバックは、メッセージの表示をカスタマイズするために TextChatMessageProperties インスタンスを返すことができます。 |
チャットを無効にする | ゲーム設定 Studio と ChatWindow/ChatSettings モジュールでチャットウィンドウを非表示にする | ChatWindowConfiguration.Enabled |
メッセージフィルタ
経験のないテキストチャットシステムは、各プレイヤーのアカウント情報に基づいてチャットメッセージを自動的にフィルタリングするため、すべての種類のチャットメッセージに対してテキストフィルタリングを手動で実装する必要はありません。
機能性 | レガシーチャット | インエクスペリエンステキストチャット |
---|---|---|
個々のプレイヤーに関するメッセージのフィルタ | Chat:FilterStringAsync() | なし |
フィルターをかけた放送メッセージ | Chat:FilterStringForBroadcast() | なし |
ウィンドウとバブルチャット
チャットウィンドウと バブルチャット 動作と カスタマイズ オプションは、レガシーチャットシステムのみのチャットウィ
機能性 | レガシーチャット | インエクスペリエンステキストチャット |
---|---|---|
チャットウィンドウを有効にする | Chat.LoadDefaultChat Players.ClassicChat | ChatWindowConfiguration.Enabled |
バブルチャットを有効にする | Chat.BubbleChatEnabled Players.BubbleChat | BubbleChatConfiguration.Enabled |
チャットウィンドウプロパティを設定 | Players:SetChatStyle() | ChatWindowConfiguration |
バブルチャットプロパティを設定 | Class.Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat 0> Class.Players:SetChatStyle()0> | BubbleChatConfiguration |
NPC バブルを有効化 | Chat:Chat() | TextChatService:DisplayBubble() |