角色上下文選單 (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 動作" 選項StarterGui:SetCore("RemoveAvatarContextMenuOption", "自定義 ACM 動作")-- 參考 AvatarContextMenuOption.Friend 枚舉移除默認的 "好友" 選項StarterGui:SetCore("RemoveAvatarContextMenuOption", Enum.AvatarContextMenuOption.Friend)
自定義菜單外觀
要更改角色上下文選單的外觀,調用 StarterGui:SetCore() 和選項 "AvatarContextMenuTheme",提供一個參數和數值的表來調整菜單的外觀。
ACM 用戶介面包括以下部分:

A. 名稱標籤:與之互動的角色的用戶名。
B. 按鈕框架:包含所有 ACM 按鈕。
C. 按鈕:默認或自定義 ACM 動作的單個按鈕。
外觀參數
這些是 ACM 的自定義參數:
背景
| 背景顏色 | ACM 整體背景的 Color3 。(當不使用背景圖像時最有用。) |
| 背景透明度 | ACM 整體背景的透明度值 (0–1)。(當不使用背景圖像時最有用。) |
| 背景圖像 | ACM 背景圖像的有效資源 ID。 |
| 背景圖像透明度 | 背景圖像的透明度值 (0–1)。 |
| 背景圖像縮放類型 | 用於背景圖像縮放的 Enum.ScaleType 列舉。 |
| 背景圖像切片中心 | 當背景圖像縮放類型設置為 Enum.ScaleType.Slice 時,指定九切片圖像中心的一個 Rect。 |
名稱標籤
按鈕框架
| 按鈕框架顏色 | 包含動作按鈕的區域(框架)的 Color3。 |
| 按鈕框架透明度 | 按鈕框架部分的透明度值 (0–1)。 |
按鈕
| 按鈕顏色 | ACM 動作按鈕背景的 Color3。 |
| 按鈕透明度 | 動作按鈕的背景顏色的透明度值 (0–1)。 |
| 按鈕懸停顏色 | 動作按鈕的 "懸停" 狀態的 Color3。 |
| 按鈕懸停透明度 | 動作按鈕的 "懸停" 顏色的透明度值 (0–1)。 |
| 按鈕下劃線顏色 | 分隔每個動作按鈕的細線的 Color3。 |
| 按鈕圖像 | 按鈕背景圖像的有效資源 ID。 |
| 按鈕圖像縮放類型 | 按鈕圖像縮放的 Enum.ScaleType 列舉。 |
| 按鈕圖像切片中心 | 當按鈕圖像縮放類型設置為 Enum.ScaleType.Slice 時,指定九切片圖像中心的一個 Rect。 |
文本
各種圖像
| 離開菜單圖像 | ACM 關閉按鈕的資源 ID。 |
| 向左滾動圖像 | 旋轉木馬 "向左滾動" 按鈕的資源 ID。 |
| 向右滾動圖像 | 旋轉木馬 "向右滾動" 按鈕的有效資源 ID。 |
選定角色
| 選定角色指示器 | 懸浮在角色頭頂的一個 MeshPart,用於指示他們被選中。 |
大小和位置
| 大小 | ACM 的總體大小的 UDim2。 |
| 最小大小 | 指定 ACM 的最小大小的 Vector2。 |
| 最大大小 | 指定 ACM 的最大大小的 Vector2。 |
| 寬高比 | 指定 ACM 相對寬度和高度的浮點值。 |
| 錨點 | ACM 的 AnchorPoint。 |
| 螢幕內位置 | 指定 ACM 在螢幕上的位置的 UDim2 (當打開時的過渡位置)。 |
| 螢幕外位置 | 指定 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})
