角色上下文菜单 (ACM) 使用户之间的互动变得更加简单。当在你的游戏中启用 ACM 时,用户可以走到其他用户的角色旁边并点击他们,以打开一个小菜单,其中包含几个默认选项。玩家可以发送朋友请求、开始私人聊天、查看用户的个人资料或挥手。
在 启用 游戏中的 ACM 后,你可以通过以下方式自定义 ACM:
- 以编程方式 打开和关闭 特定用户的 ACM。
- 自定义 ACM 外观 以创建独特的用户界面。
启用角色上下文菜单
必须使用 StarterGui:SetCore() 选项 "AvatarContextMenuEnabled" 在 LocalScript 中启用角色上下文菜单。ACM 最好用于没有预定义行为来点击其他用户的游戏中。
使用以下代码示例在 LocalScript 中启用 ACM:
-- 在 LocalScript 中运行,理想情况下在 "StarterPlayerScripts" 中local StarterGui = game:GetService("StarterGui")StarterGui:SetCore("AvatarContextMenuEnabled", true)
如果需要检测 ACM 是否启用,可以使用以下代码返回 ACM 当前状态的布尔值:
---返回一个布尔值,指示 ACM 当前是否启用。StarterGui:GetCore(AvatarContextMenuEnabled)
打开和关闭 ACM
启用后,可以通过 StarterGui 以编程方式打开和关闭 ACM。
要以编程方式打开 ACM,请使用以下代码:
-- 使用 StarterGui:SetCore,其中 targetPlayer 是有效的 Player 对象StarterGui:SetCore("AvatarContextMenuTarget", targetPlayer)
要以编程方式关闭 ACM,请使用以下代码:
StarterGui:SetCore("AvatarContextMenuTarget", nil)
菜单选项
您可以通过脚本 添加 和 删除 操作。默认情况下,菜单包含以下选项:
| 菜单选项 | 描述 |
|---|---|
| 好友 | 向所选用户发送一条好友请求。 |
| 聊天 | 在游戏内聊天中与所选用户打开私人对话。 |
| 查看 | 打开一个窗口查看所选用户的外观。 |
| 挥手 | 向所选用户发起挥手动画。 |
一旦 ACM 打开,用户可以在角色选择转盘中滚动并选择其他用户。角色根据距离所选角色的远近进行排序。菜单仅在打开时更新,滚动时可用用户列表会重复出现。

添加菜单选项
启用后,可以将特定于游戏的操作添加到 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)
-- 在此时,可以对 RemoteFunction 调用 InvokeServer() 通知服务器选择的内容
print("ACM 事件被 " .. player.Name .. " 在 " .. targetPlayer.Name .. " 上选择")
end
bindableEvent.Event:Connect(onCustomACMAction)
-- 使用 SetCore() 和 "AddAvatarContextMenuOption" 添加 ACM 选项
local options = {"自定义 ACM 操作", bindableEvent}
StarterGui:SetCore("AddAvatarContextMenuOption", options)
删除菜单选项
您可以通过引用自定义操作名称或默认的 Enum.AvatarContextMenuOption 枚举来删除 ACM 中的自定义选项和默认的添加好友、聊天、查看和挥手选项。
使用以下代码删除默认和自定义菜单选项:
-- 移除 "自定义 ACM 操作" 选项StarterGui:SetCore("RemoveAvatarContextMenuOption", "自定义 ACM 操作")-- 通过引用 AvatarContextMenuOption.Friend Enum 移除默认的 "好友" 选项StarterGui:SetCore("RemoveAvatarContextMenuOption", Enum.AvatarContextMenuOption.Friend)
自定义菜单外观
要更改角色上下文菜单的外观,请调用 StarterGui:SetCore(),使用选项 "AvatarContextMenuTheme",提供一个参数和数值的表以调整菜单外观。
ACM 用户界面包括以下部分:

A. 名称标签:正在互动的角色的用户名。
B. 按钮框架:包含所有 ACM 按钮的框架。
C. 按钮:默认或自定义 ACM 操作的单个按钮。
外观参数
这是 ACM 的自定义参数:
背景
| BackgroundColor | ACM 整体背景的 Color3(在不使用背景图像时最有用)。 |
| BackgroundTransparency | ACM 整体背景的透明度值(0–1)(在不使用背景图像时最有用)。 |
| BackgroundImage | ACM 背景的有效资产 ID 的图像。 |
| BackgroundImageTransparency | 背景图像的透明度值(0–1)。 |
| BackgroundImageScaleType | 背景图像缩放的 Enum.ScaleType 枚举。 |
| BackgroundImageSliceCenter | 指定当 BackgroundImageScaleType 设置为 Enum.ScaleType.Slice 时九切片图像的中心的 Rect。 |
名称标签
按钮框架
| ButtonFrameColor | 包含操作按钮的区域(框架)的 Color3。 |
| ButtonFrameTransparency | 按钮框架区域的透明度值(0–1)。 |
按钮
| ButtonColor | ACM 操作按钮的背景的 Color3。 |
| ButtonTransparency | 操作按钮的背景颜色的透明度值(0–1)。 |
| ButtonHoverColor | 操作按钮的 "悬停" 状态的 Color3。 |
| ButtonHoverTransparency | 操作按钮的 "悬停" 颜色的透明度值(0–1)。 |
| ButtonUnderlineColor | 分隔每个操作按钮的细线的 Color3。 |
| ButtonImage | 按钮背景的有效资产 ID 的图像。 |
| ButtonImageScaleType | 按钮图像缩放的 Enum.ScaleType 枚举。 |
| ButtonImageSliceCenter | 指定当 ButtonImageScaleType 设置为 Enum.ScaleType.Slice 时九切片图像的中心的 Rect。 |
文本
各种图像
| LeaveMenuImage | ACM 关闭按钮的图像资产 ID。 |
| ScrollLeftImage | 转盘 "向左滚动" 按钮的图像资产 ID。 |
| ScrollRightImage | 转盘 "向右滚动" 按钮的有效图像资产 ID。 |
选定角色
| SelectedCharacterIndicator | 在角色头顶上方悬浮的 MeshPart,表示它们被选中。 |
尺寸和位置
| Size | ACM 整体大小的 UDim2。 |
| MinSize | 指定 ACM 最小尺寸的 Vector2。 |
| MaxSize | 指定 ACM 最大尺寸的 Vector2。 |
| AspectRatio | 指定 ACM 的相对宽度和高度的浮点值。 |
| AnchorPoint | ACM 的 AnchorPoint。 |
| OnScreenPosition | 指定 ACM 在屏幕上的位置的 UDim2(它打开时的过渡位置)。 |
| OffScreenPosition | 指定 ACM 的非屏幕位置的 UDim2(它在打开/关闭时的过渡位置)。 |
示例自定义
以下代码示例使用一些基本参数自定义 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})
