基于 TextChatService 的在体验中的文字聊天系统,允许玩家在实时体验中轻松沟通并社交化。 除了支持默认的文字聊天外,您还可以 自定义 前端用户界面。
聊天窗口配置
总体聊天窗口由聊天窗口、输入栏和可选频道标签组成。
通道选项卡默认为关闭,各个组件可以通过 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 自定义。
属性 | 描述 | 默认 |
---|---|---|
BackgroundColor3 | Color3 聊天窗口的背景颜色。 | [25, 27, 29] |
BackgroundTransparency | 聊天窗口的背景透明度。 | 0.3 |
FontFace | Font 的聊天窗口文本。 | BuilderSansMedium |
TextColor3 | Color3 的聊天窗口文本。 | [255, 255, 255] |
TextSize | 聊天窗口的文本大小。 | 14 |
TextStrokeColor3 | Color3 的线条为聊天窗口文本。 | [0, 0, 0] |
TextStrokeTransparency | 聊天窗口文本的渐变透明度。 | 0.5 |
HorizontalAlignment | 聊天窗口的横向对齐。 | Left |
VerticalAlignment | 聊天窗口的垂直对齐。 | Top |
HeightScale | 聊天窗口的高度与屏幕大小相对。 | 1 |
WidthScale | 聊天窗口的宽度与屏幕大小相对。 | 1 |
输入栏显示
聊天 输入栏 的外观可以通过ChatInputBarConfiguration自定义。
属性 | 描述 | 默认 |
---|---|---|
BackgroundColor3 | Color3 聊天输入框的背景颜色。 | [25, 27, 29] |
BackgroundTransparency | 聊天输入框的背景透明度。 | 0.2 |
FontFace | Font 的聊天输入文本。 | BuilderSansMedium |
PlaceholderColor3 | Color3 的预置聊天输入文本。 | [178, 178, 178] |
TextColor3 | Color3 玩家输入聊天内容的文本。 | [255, 255, 255] |
TextSize | 聊天输入文本的大小。 | 14 |
TextStrokeColor3 | Color3 用于聊天输入文本的轮廓颜色。 | [0, 0, 0] |
TextStrokeTransparency | 聊天输入文本的渐变透明度。 | 0.5 |
AutocompleteEnabled | 文字聊天系统是否显示对于表情符号和 命令 的自动完成选项。 表情符号是通过输入 : 跟迁余符号后自动完成,而命令是通过输入 / 来自动完成。 | true |
KeyboardKeyCode | 额外的键盘玩家可以按下以在默认聊天输入栏上集中。 | Slash |
频道选项卡外观
通道选项卡 的外观可以通过 ChannelTabsConfiguration 进行自定义。
属性 | 描述 | 默认 |
---|---|---|
BackgroundColor3 | Color3 是频道选项卡的背景颜色。 | [25, 27, 29] |
BackgroundTransparency | 透明度管道背景。 | 0 |
HoverBackgroundColor3 | Color3 鼠标悬停时标签的背景颜色。 | [125, 125, 125] |
FontFace | Font 对于频道选项卡中的文本。 | BuilderSansBold |
TextColor3 | Color3 的文本在未选择的选项卡中。 | [175, 175, 175] |
SelectedTabTextColor3 | Color3 的文本在选定的选项卡中。 | [255, 255, 255] |
TextSize | 频道选项卡中的文本大小。 | 18 |
TextStrokeColor3 | Color3 用于频道选项卡中的文本颜色。 | [0, 0, 0] |
TextStrokeTransparency | 在频道选项卡中文本的透明度。 | 1 |
自定义消息
您可以使用 ChatWindowMessageProperties 和 TextChatService.OnChatWindowAdded 回调调整聊天消息的外观,而无需覆盖现有 UI。 您可以通过修改 聊天标签 和颜色 1>在不同的用户群组添加聊天标签1> 来修改聊天消息的外观,以反映您的体验主题。您还
为用户名着色
当用户发送聊天消信息时,其 DisplayName 显示为消信息的
本地脚本 - 随机用户名颜色
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 来为颜色和透明度级别添加渐变。
渐变用户名字体颜色
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>
附加聊天标签
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 标记。
丰富的文本自定义
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.LocalPlayerlocal generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGenerallocal PREFIX = "[Guide] Welcome "-- 将“系统信息息”发送给玩家,其显示名称为generalChannel:DisplaySystemMessage(PREFIX .. player.DisplayName)
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)