漏斗事件 讓你跟踪用戶在遊戲中關鍵階段的進展。這包括:
- 入門 — 用戶在開始使用你的遊戲時在哪裡掉落?
- 進展 — 用戶在哪裡停止在你的遊戲中前進?
- 商店 — 用戶在哪裡放棄購買?
一旦你的遊戲開始跟踪漏斗事件,你將解鎖分析儀表板的漏斗頁面。你可以在儀表板上添加最多十個漏斗的標籤。
跟踪漏斗事件
要跟踪漏斗事件,首先確定遊戲中最重要的漏斗並將其分段。因為目標是了解玩家行為,所以這些步驟通常對應於某些操作或成就。
在 RPG 中,你可能會有一個步驟是加入遊戲,一個是選擇職業,另一個是退出初始房間,等等。你通常在玩家完成步驟後調用 LogFunnelStepEvent() 或 LogOnboardingFunnelStepEvent(),但最重要的是要一致地調用這些方法並使用容易理解的名稱。
你的入門流程是一個很好的開始跟踪漏斗事件的地方,因為這很可能是你流失大部分用戶的地方。
跟踪一次性漏斗
一次性漏斗監控每位用戶僅發生一次的轉換事件。
一個常見的例子是 入門漏斗,這對於理解如何提高遊戲中新用戶的留存率和會話時長至關重要。以下示例是針對 Plant 的入門漏斗,這是一款類似經營的遊戲,新用戶進入農場,依次種植種子、澆水等:
在 Plant 中跟踪入門步驟local AnalyticsService = game:GetService("AnalyticsService")-- 記錄 FTUE 的第一步AnalyticsService:LogOnboardingFunnelStepEvent(player,1, -- 步驟編號"在農場" -- 步驟名稱)-- 記錄第二步AnalyticsService:LogOnboardingFunnelStepEvent(player,2, -- 步驟編號"種植種子" -- 步驟名稱)
跟踪重複漏斗
重複漏斗監控每位用戶多次發生的轉換事件。
一個常見的例子是 商店漏斗,這可以幫助你理解如何提高遊戲的付費者轉換率、ARPPU 和收入。以下示例是商店漏斗,用戶打開商店、查看商品、將商品添加到購物車等等。
使用 funnelSessionId 在重複漏斗中區分同一用戶的不同會話,例如在單一會話中多次打開商店。
跟踪商店步驟local AnalyticsService = game:GetService("AnalyticsService")local HttpService = game:GetService("HttpService")local funnelSessionId = HttpService:GenerateGUID()-- 記錄用戶打開商店時AnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- 用於將步驟分組的漏斗名稱funnelSessionId, -- 此唯一結賬會話的漏斗會話 ID1, -- 步驟編號"打開商店" -- 步驟名稱)-- 記錄用戶查看商品時AnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- 用於將步驟分組的漏斗名稱funnelSessionId, -- 此唯一結賬會話的漏斗會話 ID2, -- 步驟編號"查看商品" -- 步驟名稱)-- 記錄用戶添加到購物車時AnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- 用於將步驟分組的漏斗名稱funnelSessionId, -- 此唯一結賬會話的漏斗會話 ID3, -- 步驟編號"添加到購物車" -- 步驟名稱)
實施 funnelSessionId
在實施漏斗時,funnelSessionId 可以幫助你跟踪事件,但在每個實例中可能不是必需的。使用以下指南:
- 一次性漏斗 - 你不需要對一次性漏斗使用 funnelSessionId,因為這些事件每位用戶僅發生一次。
- 商店漏斗 - 在重複漏斗中,使用 funnelSessionId 區分同一用戶的不同會話,例如在 之前的示例 中,單一會話中多次打開商店。在這種情況下,建議使用 GUID 作為 funnelSessionId。
- 物品升級 - 使用 funnelSessionId 區分不同的物品升級路徑,通常超過單一遊玩會話的較長時間。與商店漏斗的例子相比,你通常可以根據升級的物品構建唯一鍵,例如:<playerId>-<itemId>。
初始步驟
漏斗在第一步被記錄時開始。如果你想在玩家加入時立即開始漏斗,在 PlayerAdded 事件中記錄第一步。
在 PlayerAdded 事件中記錄第一步
local AnalyticsService = game:GetService("AnalyticsService")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
AnalyticsService:LogOnboardingFunnelStepEvent(
player,
1, -- 步驟編號
"玩家加入" -- 步驟名稱
)
end)
重複步驟
如果用戶在漏斗中重複步驟,漏斗僅考慮該步驟的第一個實例。例如,如果用戶兩次記錄漏斗的第 2 步,則漏斗僅計入第一次出現的第 2 步。你不必對斷線和重新連接的玩家處理任何特別操作,並且 funnelSessionId 處理重複漏斗。
重複步驟將被漏斗忽略,但仍會被記錄並貢獻於 全局速率限制。
跳過步驟
如果因某種原因你跳過漏斗中的某個步驟,則早期步驟將自動完成。例如,如果你有一個包含步驟 1、2 和 3 的漏斗,而你在不記錄步驟 1 或 2 的情況下記錄步驟 3,則漏斗會將步驟 1 和 2 考慮為已完成。
使用漏斗過濾器
Roblox 提供過濾器來幫助你分析漏斗數據。這些過濾器包括玩家數據和設備數據,你也可以發送自定義數據。在某些情況下,玩家的狀態可能會在漏斗中發生變化,例如當玩家將設備從移動設備切換到桌面。
為了避免重複計算漏斗,過濾器僅適用於漏斗的第一步。這意味著如果玩家在漏斗中切換設備,則漏斗將僅歸因於他們在進入漏斗時的設備。
同樣,漏斗按隊列顯示,這意味著如果玩家在 6/19 進入漏斗,則漏斗將歸因於 6/19 隊列,即使他們在 6/20 完成漏斗。
修改漏斗
在你對漏斗步驟進行更新後,設置正確的日期範圍以查看最新的漏斗非常重要。如果當前日期是 6/21,你在 6/14 更新了入門漏斗的步驟 2,你應該將日期範圍設置為 6/14 - 6/21 以查看最新的漏斗。
如果你選擇的日期範圍包含漏斗步驟更新,則在相關步驟上會顯示警告:

保護你的漏斗不受利用者攻擊
為了保持數據的乾淨,重要的是在你的伺服器代碼中添加某種程度的數據驗證,以防止利用者向你的分析服務發送無效數據。
例如,如果你有一個包含三個步驟的入門漏斗,你可以使用 RemoteEvent 讓客戶端通知伺服器玩家已完成每個步驟,並添加伺服器檢查以確保步驟編號在登記事件之前是有效的:
客戶端事件代碼
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local onboardingEvent = ReplicatedStorage:WaitForChild("OnboardingEvent")
local function fireOnboardingEvent(step: number)
onboardingEvent:FireServer({ step = step })
end
fireOnboardingEvent(1)
fireOnboardingEvent(2)
fireOnboardingEvent(10) -- 無效步驟
伺服器端事件代碼
local AnalyticsService = game:GetService("AnalyticsService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local onboardingEvent = ReplicatedStorage:WaitForChild("OnboardingEvent")
local maxStep = 3
local function onPlayerEventFired(player: Player, args: { step: number })
local step = args.step
if(step > maxStep) then
warn(`從客戶端收到無效的教程步驟 {step}。`)
return
end
print(`{player.Name} 完成步驟: {step}`)
AnalyticsService:LogOnboardingFunnelStepEvent(player, step)
end
onboardingEvent.OnServerEvent:Connect(onPlayerEventFired)
使用自定義字段
漏斗事件還允許分解自定義字段以支持更容易的區段比較。例如,你可以跟踪哪種起始車輛能給玩家最佳進展,或附加不同的地圖來查看某個地圖是否有比其他地圖更好的遊戲循環。

有關更多信息,請參見 自定義字段。
使用漏斗來發展你的遊戲
最重要的漏斗之一是入門,因為許多遊戲在新用戶的保留和參與方面面臨挑戰。
在下面的 Plant 入門漏斗中,最大的掉落發生在第 2 步("種植種子")。

根據這些數據,你可以:
- 添加上下文指示器以更好地指導用戶在開始時種植種子。
- 設計一種新的用戶體驗,要求用戶在探索遊戲的其餘部分之前種植種子並培育成功的植物。你可以通過創建 正面反饋元素 或使用其他遊戲設計技術來改善這一事件。
