プラットフォーム統合チャットは、すべてのプレイヤーに報告やミュートなどの安全ツールへの一貫したアクセスを提供し、クイックワードのようなチャット機能をすべてのゲームで信頼性高く展開できるようにします。また、現在のプレフィックスシステムを置き換え、ユーザーに関連付けられた役割が一貫して表示され、すべての年齢層に安全になります。
ゲーム内の何も変更されることはなく、プラットフォーム統合チャットを有効にするまで待つ必要があります。有効にすると:
- RobloxはデフォルトウィンドウまたはUIに配置したTextChannelWindowでチャットを配信およびレンダリングします。カスタムチャットUIはもはやメッセージを自分でレンダリングできません。
- プレイヤーメッセージのテキストはコードからアクセスできません。読み取ったり、ログに記録したり、エクスポートしたりすることはできません。以前はメッセージテキストを返していたAPIは、nilの代わりに空の文字列("")を返すようになり、スクリプトは実行され続けますが、コンテンツは受け取れません。
サポートされていないAPI
プラットフォーム統合チャットが有効になると、以下のAPIは""(空の文字列、nilではない)を返し、警告をログに記録します:
| 機能 | サポートされていないAPI | 代わりに使用するもの |
|---|---|---|
| チャットメッセージと表示 | TextChatMessage.Text、TextChatMessage.Translation | カスタムチャットGUIをTextChannelWindowに移行します。TargetをTextChannelに設定します。ユーザーは自動的にメッセージを送受信できます。 |
| チャットプレフィックス | TextChatMessage.PrefixText | サポートされていません。ゲームがプレフィックスを必要とする場合は、まだプラットフォーム統合チャットを有効にしないでください。 |
| プリセット / チャットホイール | TextChannel:SendAsync() | クイックワードのクリエイターカスタマイズを使用して、チャットに関連するフレーズを追加します。 |
| モデレーション / 管理者コマンド | OnIncomingMessage、Player.Chatted | チャットトリガーコマンドにはTextChatCommandを使用します。ライブイベント中のモデレーションのために、すべてのチャットを表示するには読み取り専用チャットを使用します。 |
プラットフォーム統合チャットを有効にする
Studioでプラットフォーム統合チャットを有効にするには:
- Explorerウィンドウを開きます。
- TextChatServiceを選択します。
- Propertiesパネルで、PlatformIntegratedChatを見つけます。
- Enabledに設定します。
更新が有効になると、前述のサポートされていないAPIは空の文字列を返し、警告をログに記録します。このプロパティはいつでもDisabledに戻すことができます。
このプロパティはStudio内でのみ変更でき、スクリプトからは変更できません。
TextChannelWindowを作成する
TextChannelWindowを作成するには:
- StarterGuiにScreenGuiを作成します。
- ScreenGuiの子としてTextChannelWindowインスタンスを追加します。
- Targetプロパティを表示したいTextChannelに設定します。
各TextChannelWindowは単一のTextChannelにバインドされます。複数のチャネルを一緒に表示するには、各チャネルのためにTextChannelWindowを作成し、独自の表示/非表示ロジックを適用します。グローバルチャネルはカスタムウィンドウのターゲットとしては利用できません。
以下のコードサンプルは、RBXGeneralチャネルを表示するカスタムチャットウィンドウを作成します:
local TextChatService = game:GetService("TextChatService")
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "TextChannelWindowDemo"
screenGui.Parent = script.Parent
local myTextChannelWindow = Instance.new("TextChannelWindow")
myTextChannelWindow.Size = UDim2.new(0, 400, 0, 300)
myTextChannelWindow.Position = UDim2.new(0, 10, 0, 10)
myTextChannelWindow.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
myTextChannelWindow.BackgroundTransparency = 0.5
local targetChannelName = "RBXGeneral"
local targetChannel = TextChatService:WaitForChild("TextChannels"):WaitForChild(targetChannelName)
if targetChannel and targetChannel:IsA("TextChannel") then
myTextChannelWindow.Target = targetChannel
end
myTextChannelWindow.Parent = screenGuiカスタムチャネルを独自のウィンドウでのみ表示する
デフォルトでは、デフォルトチャットウィンドウはすべてのTextChannelからメッセージをレンダリングするため、カスタムTextChannelWindowで表示するチャネルもデフォルトウィンドウに表示されます。
カスタムチャネルを独自のウィンドウでのみ表示するには:
- Explorerで、TextChatServiceの下にあるChatWindowConfigurationを選択します。
- 各カスタムチャネルについて、TextChannelWindowを作成し、そのTargetをそのチャネルに設定します。
以下の例は、独自のウィンドウにのみ表示されるカスタムギルドチャネルを示しています:
-- 前提条件: StudioでTextChannelDisplayModeがDefaultTextChannelsに設定されています。
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
local playerGui = Players.LocalPlayer:WaitForChild("PlayerGui")
-- スクリプトはランタイムでプロパティを読み取ることができますが、変更することはできません。
local config = TextChatService.ChatWindowConfiguration
if config.TextChannelDisplayMode ~= Enum.TextChannelDisplayMode.DefaultTextChannels then
warn("ギルドメッセージはデフォルトチャットウィンドウにも表示されます。")
end
local guildChannel = TextChatService:WaitForChild("TextChannels"):WaitForChild("Guild")
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "GuildChat"
screenGui.Parent = playerGui
local guildWindow = Instance.new("TextChannelWindow")
guildWindow.Size = UDim2.new(0, 400, 0, 300)
guildWindow.Target = guildChannel
guildWindow.Parent = screenGuiこれらの動作を考慮してください:
- TextChannelDisplayModeはStudioまたはプラグインからのみ設定できます。スクリプトはランタイムで読み取ることができますが、変更することはできません。
- ランタイムで作成されたチャネルは、表示されるときに現在のモードに従います。ランタイムで作成されたデフォルトチャネル(チームやウィスパーなど)は、依然としてデフォルトウィンドウに表示されます。
チャットトリガー管理者コマンドを移行する
管理者コマンドを更新する必要があるかどうかは、トリガーの方法によります:
- チャットからトリガーされたコマンドはTextChatCommandを使用する必要があります。
- 生のチャットテキストを読み取るコマンド処理はもはや機能しません。これには、MessageReceived、Chatted、またはTextChatMessageの内容を検査するその他のものが含まれます。
移行するには:
- 現在生のチャットメッセージを解析しているゲーム内の管理者コマンドを特定します。
- 各コマンドのためにTextChatCommandを作成します。
- コマンドのトリガーキーワードとコールバックロジックを定義します。
例については、カスタムテキストチャットコマンドを参照してください。
FAQ
PlatformIntegratedChatをEnabledに設定しない限り、ゲーム内で何も変わりません。
いいえ。それらの表面に関するポリシーは変更されていません:プレイヤー間の双方向通信には使用できず、少なくとも1分のレート制限が必要であり、モデレーションの対象となります。
いいえ。この更新はTextChatServiceのみを対象としています。
いいえ。PlatformIntegratedChatがEnabledのとき、どのAPIもクライアントまたはサーバーでプレイヤーメッセージの内容を返しません。ゲーム内のモデレーターは、チャットを表示するために読み取り専用チャット権限を使用できます。プレイヤーは、Robloxの悪用報告やミュートやブロックなどの安全ツールに依存することもできます。
いいえ。カスタマイズなしでデフォルトのRobloxチャットを使用している場合、アクションを取る必要はなく、変更は見られないはずです。