自定义聊天

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

基于 TextChatService 的在体验中的文字聊天系统,允许玩家在实时体验中轻松沟通并社交化。 除了支持默认的文字聊天外,您还可以 自定义 前端用户界面。

聊天窗口配置

总体聊天窗口由聊天窗口、输入栏和可选频道标签组成。

Core components of the text chat window.

通道选项卡默认为关闭,各个组件可以通过 Studio 或脚本打开/关闭:

直接在 Studio 的 Explorer 窗口中,扩展 Class.TextChatService 分支,然后选择 Class.ChatWindowConfiguration , 1> Class.ChatInputBarConfiguration1> 或 4> Class.ChannelTabsConfiguration4> 。然后,在 7> 属性7> 窗口中启用或禁用组件。

ChannelTabsConfiguration 已启用时,每个 默认 TextChannel 将在下表中的每个选项卡中出现。 另外,每个 1>自定义1> 4>Class.TextChannel4> 都会创建一个与频道的 7> Class.Instance.Name|Name

默认频道Tab 名称
RBXGeneral 一般
RBXSystem 一般 (已组合成一个单独的标签 with RBXGeneral )
RBX团队 团队
RBXWhisper 其他玩家的用户名

窗口外观

聊天窗口 的外观可以通过 ChatWindowConfiguration 自定义。

ChatWindowConfiguration instance in Explorer hierarchy.
属性描述默认
BackgroundColor3Color3 聊天窗口的背景颜色。[25, 27, 29]
BackgroundTransparency聊天窗口的背景透明度。0.3
FontFaceFont 的聊天窗口文本。BuilderSansMedium
TextColor3Color3 的聊天窗口文本。[255, 255, 255]
TextSize聊天窗口的文本大小。14
TextStrokeColor3Color3 的线条为聊天窗口文本。[0, 0, 0]
TextStrokeTransparency聊天窗口文本的渐变透明度。0.5
HorizontalAlignment聊天窗口的横向对齐。Left
VerticalAlignment聊天窗口的垂直对齐。Top
HeightScale聊天窗口的高度与屏幕大小相对。1
WidthScale聊天窗口的宽度与屏幕大小相对。1

输入栏显示

聊天 输入栏 的外观可以通过ChatInputBarConfiguration自定义。

ChatInputBarConfiguration instance in Explorer hierarchy.
属性描述默认
BackgroundColor3Color3 聊天输入框的背景颜色。[25, 27, 29]
BackgroundTransparency聊天输入框的背景透明度。0.2
FontFaceFont 的聊天输入文本。BuilderSansMedium
PlaceholderColor3Color3 的预置聊天输入文本。[178, 178, 178]
TextColor3Color3 玩家输入聊天内容的文本。[255, 255, 255]
TextSize聊天输入文本的大小。14
TextStrokeColor3Color3 用于聊天输入文本的轮廓颜色。[0, 0, 0]
TextStrokeTransparency聊天输入文本的渐变透明度。0.5
AutocompleteEnabled文字聊天系统是否显示对于表情符号和 命令 的自动完成选项。 表情符号是通过输入 : 跟迁余符号后自动完成,而命令是通过输入 / 来自动完成。true
KeyboardKeyCode额外的键盘玩家可以按下以在默认聊天输入栏上集中。Slash

频道选项卡外观

通道选项卡 的外观可以通过 ChannelTabsConfiguration 进行自定义。

ChannelTabsConfiguration instance in Explorer hierarchy.
属性描述默认
BackgroundColor3Color3 是频道选项卡的背景颜色。[25, 27, 29]
BackgroundTransparency透明度管道背景。0
HoverBackgroundColor3Color3 鼠标悬停时标签的背景颜色。[125, 125, 125]
FontFaceFont 对于频道选项卡中的文本。BuilderSansBold
TextColor3Color3 的文本在未选择的选项卡中。[175, 175, 175]
SelectedTabTextColor3Color3 的文本在选定的选项卡中。[255, 255, 255]
TextSize频道选项卡中的文本大小。18
TextStrokeColor3Color3 用于频道选项卡中的文本颜色。[0, 0, 0]
TextStrokeTransparency在频道选项卡中文本的透明度。1

自定义消息

您可以使用 ChatWindowMessagePropertiesTextChatService.OnChatWindowAdded 回调调整聊天消息的外观,而无需覆盖现有 UI。 您可以通过修改 聊天标签 和颜色 1>在不同的用户群组添加聊天标签1> 来修改聊天消息的外观,以反映您的体验主题。您还

为用户名着色

当用户发送聊天消信息时,其 DisplayName 显示为消信息的

Colored user name in the chat window.
本地脚本 - 随机用户名颜色

local TextChatService = game:GetService("TextChatService")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local nameColors = {
Color3.fromRGB(255, 0, 0),
Color3.fromRGB(0, 255, 0),
Color3.fromRGB(0, 0, 255),
Color3.fromRGB(255, 255, 0),
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
local textSource = message.TextSource
if textSource then
local index: number = (textSource.UserId % #nameColors) + 1
local randomColor: Color3 = nameColors[index]
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
properties.PrefixTextProperties.TextColor3 = randomColor
end
return properties
end

您还可以使用 UIGradient 来为颜色和透明度级别添加渐变。

Gradient user name in the chat window.
渐变用户名字体颜色

local TextChatService = game:GetService("TextChatService")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 255))
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
local textSource = message.TextSource
if textSource then
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
gradient:Clone().Parent = properties.PrefixTextProperties
end
return properties
end

添加聊天标签

如果您的体验有用户具有特殊属性 属性 ,例如 VIP 状态,您可以将 聊天标签 包含在括号前的用户消息的前部以突出其消息。 以下 LocalScript 在 1>

VIP chat tag appended to user name in the chat window.
附加聊天标签

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
if message.TextSource then
local player = Players:GetPlayerByUserId(message.TextSource.UserId)
if player:GetAttribute("IsVIP") then
properties.PrefixText = "[VIP] " .. message.PrefixText
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
properties.PrefixTextProperties.TextColor3 = Color3.fromRGB(255, 125, 50)
end
end
return properties
end

丰富的文本自定义

字体颜色标签 可用于格式聊天消息,有助于您想要对特定部分 of 消信息的字体进行格式化。 注意, rich text 不支持渐变,但以下代码示例显示了您如何将用户名 (存储在 TextChatMessage.PrefixText 中) 移动到消息体内,然后应用 rich text 标记。

Rich text customization of user name in the chat window.
丰富的文本自定义

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
local chatWindowConfiguration = TextChatService.ChatWindowConfiguration
local gradient = Instance.new("UIGradient")
gradient.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 0, 0)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(255, 255, 0)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 0, 255))
}
TextChatService.OnChatWindowAdded = function(message: TextChatMessage)
local properties = chatWindowConfiguration:DeriveNewMessageProperties()
if message.TextSource then
properties.PrefixText = "[VIP]"
properties.Text = string.format("<font color='#00ffff'>%s</font>", message.PrefixText) .. " " .. message.Text
properties.PrefixTextProperties = chatWindowConfiguration:DeriveNewMessageProperties()
gradient:Clone().Parent = properties.PrefixTextProperties
end
return properties
end

发送非玩家源的消息

在某些设计场景中,您可能需要在聊天窗口中显示非玩家对话,例如“聊天”来自公共地址系统或非玩家角色。

系统

要将未格式化系统消息发送到本地玩家,请从默认 DisplaySystemMessage() 通道调用 Class.TextChannel:DisplaySystemMessage()|DisplaySystemMessage(),并在玩家的显昵称前加上一个前缀。

客户端脚本

local Players = game:GetService("Players")
local TextChatService = game:GetService("TextChatService")
local player = Players.LocalPlayer
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
local PREFIX = "[Guide] Welcome "
-- 将“系统信息息”发送给玩家,其显示名称为
generalChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)
Image showing a basic system message in the chat window.

NPC/对象

您还可以使用非玩家对话框来显示 聊天气泡 来让它看起来像来自 3D 世界中的 NPC 或对象的消息。

客户端脚本

local TextChatService = game:GetService("TextChatService")
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
TextChatService.OnIncomingMessage = function(textChatMessage: TextChatMessage)
local properties = Instance.new("TextChatMessageProperties")
-- 检查包含数据的系统消息
if not textChatMessage.TextSource and textChatMessage.Metadata ~= "" then
-- 添加前缀以使消息看起来像是玩家发送的
properties.PrefixText = string.format("<font color='#%s'>%s: </font>", "#50C999", textChatMessage.Metadata)
-- 添加泡泡聊天
TextChatService:DisplayBubble(workspace.Statue, textChatMessage.Text)
end
return properties
end
local message = "Welcome! I will be your guide."
local speakerName = "Ancient Knight"
generalChannel:DisplaySystemMessage(message, speakerName)
Image showing a knight statue NPC broadcasting a chat message to the chat window, along with a chat bubble above its head.