虚拟形象上下文菜单 (ACM) 使用户更容易与其他用户互动。 当在您的体验中启用 ACM 时,用户可以走到另一个用户的角色并单击他们打开小菜单。 玩家可以发送朋友请求、开始私人聊天、查看用户的 个人资料rofil 或波。
在启用 ACM 在您的体验后,您可以根据以下方式自定义 ACM:
- 程序化 打开和关闭 ACM 对特定用户。
- 自定义 ACM 外观 以创建独特的用户界面。
启用虚拟形象上下文菜单
虚拟形象上下文菜单必须使用 StarterGui:SetCore() 选项 “AvatarContextMenuEnabled” 在 LocalScript 中。 最好在体验中使用无需预设的行为为其他用户点击。
使用以下代码示例启用 ACM 在 LocalScript 中:
-- 运行在本地脚本中,通常在“新手玩家脚本”中local StarterGui = game:GetService("StarterGui")StarterGui:SetCore("AvatarContextMenuEnabled", true)
如果您需要检查是否启用 ACM,您可以使用以下代码返回当前 ACM 状态下的一个Boolean:
--返回一个指示 ACM 是否已启用的Boolean。StarterGui:GetCore(AvatarContextMenuEnabled)
打开和关闭 ACM
启用后,您可以使用 StarterGui 来程序化打开和关闭 ACM 程序。
要程序打开 ACM,请使用以下验证码:
-- 使用 StarterGui:SetCore 将 targetPlayer 设置为有效的玩家对象StarterGui:SetCore("AvatarContextMenuTarget", targetPlayer)
要程序式关闭 ACM,请使用以下验证码:
StarterGui:SetCore("AvatarContextMenuTarget", nil)
菜单选项
您可以通过脚本添加或移除通过添加动作。 默认情况下,菜单有以下选项:
菜单选项 | 描述 |
---|---|
朋友 | 向选定的用户发送一个朋友请求。 |
聊天 | 打开在体验聊天中与选定用户的私人聊天。 |
查看 | 打开一个窗口以检查选定的用户的外观。 |
波 | 启动选定的用户的波动动画。 |
当 ACM 打开时,用户可以在角色选择车ousel 上滚动并选择其他用户。角色根据距离从选定角色排序。菜单仅在打开时更新,并且列表的可用用户会在滚动时重复。
添加菜单选项
启用时,可以向 ACM 添加经验相关的操作。例如,有经验可以允许交易请求、添加到派对选项或其他特殊互动。
下面的例子显示了如何在虚拟形象上下文菜单中添加自定义动作:
local Players = game:GetService("Players")
local StarterGui = game:GetService("StarterGui")
local player = Players.LocalPlayer
-- 将函数连接到“BindableEvent”
local bindableEvent = Instance.new("BindableEvent")
local function onCustomACMAction(targetPlayer)
-- 在此时,您可以在远程函数上调用 InvokeServer() 来警告服务器选择
print("ACM event selected by " .. player.Name .. " on " .. targetPlayer.Name)
end
bindableEvent.Event:Connect(onCustomACMAction)
-- 使用 SetCore() 使用 "AddAvatarContextMenuOption" 添加 ACM 选项
local options = {"Custom ACM Action", bindableEvent}
StarterGui:SetCore("AddAvatarContextMenuOption", options)
移除菜单选项
您可以通过在自定义行为名称或默认Enum.AvatarContextMenuOption枚列中引用自定义选项来从 ACM 中移除自定义和默认的“Enum.AvatarContextMenuOption”、“聊天”、“查看”和“2>波浪2>”选项。
使用以下代码移除默认和自定义菜单选项:
-- 移除“自定义 ACM 操作”选项StarterGui:SetCore("RemoveAvatarContextMenuOption", "Custom ACM Action")-- 通过参考 AvatarContextMenuOption.Friend 列表中的“朋友”选项来移除默认“朋友”选项StarterGui:SetCore("RemoveAvatarContextMenuOption", Enum.AvatarContextMenuOption.Friend)
自定义菜单外观
要改变虚拟形象上下文菜单的外观,请使用 StarterGui:SetCore() 调用“AvatarContextMenuTheme”选项卡,提供表参数和值来调整菜单外观。
ACM用户界面包括以下部分:
A. 名称标签:与角色互动中的用户名。
B. 按钮框:包含所有 ACM 按钮。
C. 按钮:个人按钮以启动默认或自定义 ACM 操作。
外观参数
这些是 ACM 的自定义参数:
背景
背景颜色 | 一个 Color3 对于 ACM 的整体背景。(使用不使用背景图像时最为有用)。 |
背景透明度 | 透明度值(0-1) 对于ACM的整体背景(最有用的时候不使用背景图像)。 |
背景图像 | 一个有效的图像资产ID,用于 ACM 背景。 |
背景图像透明度 | 背景图像的透明度(0-1)。 |
背景图像 escal 类型 | 一个 Enum.ScaleType 枚对背景图像的缩放。 |
背景图像片中心 | 一个 Rect 指定一个九个切割图像的中心,当背景图像类型设置为 Enum.ScaleType.Slice 。 |
名称标签
名称标签颜色 | Datatype.Color3 对于显示哪个玩家正在互动的条。 |
命名字符串颜色 | Datatype.Color3 用于名称标签和行动按钮之间的薄线。 |
按钮框
按钮框颜色 | Datatype.Color3 对于包含 action 按钮的部分 (框架). |
按钮框透明度 | 按钮框段的透明度(0–1)值。 |
按钮
按钮颜色 | 一个 Color3 为 ACM 操作按钮的背景。 |
按钮透明度 | 动作按钮的背景颜色(0-1)。 |
按钮悬停颜色 | Datatype.Color3 对于“悬停”状态的动作按钮。 |
按钮透明度 | 透明度值(0-1)对动作按钮的“悬浮信息停”颜色。 |
按钮轮廓颜色 | Datatype.Color3 用于分离每个 action 按钮的细线。 |
按钮图像 | 一个有效的图像ID,用于按钮的背景。 |
按钮图像缩放类型 | Entity.ScaleType 枚按钮图像缩放。 |
按钮图像片中心 | 一个 Rect 指定一个九个切割图像的中心,当 ButtonImageScaleType 设置为 Enum.ScaleType.Slice 。 |
文本
字体 | Entity.Font 枚值为名称标签和按钮文本的字符串。 |
文本颜色 | 一个 Color3 对于所有文本在 ACM 内。 |
文本缩放 | 一个漂浮值,用于缩放每个元素的默认文本大小。 |
各种图像
离开菜单图像 | 一个资产ID以便 ACM 关闭按钮。 |
向左滚动图像 | 车ousel“滚动左侧”按钮的图像ID。 |
滚动右图像 | 车ousel“滚动右侧”按钮的有效图像ID。 |
已选择角色
选定角色指示器 | 头顶上漂浮的MeshPart,表示他们已被选中。 |
大小和位置
大小 | 一个 UDim2 对 ACM 的整体尺寸。 |
最小尺寸 | 一个 Vector2 指定 ACM 的最小尺寸。 |
最大尺寸 | 一个 Vector2 指定 ACM 的最大尺寸。 |
外观比例 | 一个漂浮值,指定 ACM 的相对宽度和高度。 |
锚定点 | ACM的AnchorPoint。 |
屏幕位置 | 一个 UDim2 指定在屏幕上的 ACM 位置 (当打开时变更位置的位置)。 |
屏幕位置 | 一个 UDim2 指定 ACM 的屏幕位置,当打开/关闭时从/到此位置。 |
示例自定义
以下代码示例使用了一些基本参数来自定义 ACM 主题:
local StarterGui = game:GetService("StarterGui")StarterGui:SetCore("AvatarContextMenuTheme", {BackgroundImage = "",BackgroundTransparency = 0.5,BackgroundColor = Color3.fromRGB(111, 145, 242),NameTagColor = Color3.fromRGB(0, 0, 200),NameUnderlineColor = Color3.fromRGB(213, 233, 255),ButtonFrameColor = Color3.fromRGB(15, 24, 65),ButtonFrameTransparency = 0.2,ButtonUnderlineColor = Color3.fromRGB(213, 233, 255),Font = Enum.Font.SciFi})