漏斗事件

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

漏斗事件 让您可以跟踪用户在游戏中通过关键阶段的进展。这包括:

  • ** onboarding ** — 用户在开始使用您的游戏时在哪里流失?
  • ** 进展 ** — 用户在游戏中停止前进的地方?
  • ** 商店 ** — 用户在哪里放弃购买?

一旦您的游戏开始跟踪漏斗事件,您将解锁 Creator Hub 中的分析仪表板的漏斗页面。您可以为仪表板添加最多十个漏斗的选项卡。

跟踪漏斗事件

要跟踪漏斗事件,首先确定您游戏中最重要的漏斗并将其细分为步骤。由于目标是理解玩家行为,这些步骤通常对应于某些操作或成就。

在 RPG 中,您可能会有加入游戏的步骤,一个选择职业的步骤,另一个是退出起始房间的步骤,等等。您通常称 LogFunnelStepEvent()LogOnboardingFunnelStepEvent() 玩家完成一个步骤后调用,但最重要的是要保持一致,并使用易于解释的名称。

您的 onboarding 流程是开始跟踪漏斗事件的一个很好的地方,因为这里很可能是您失去大多数用户的地方。

跟踪一次性漏斗

一次性漏斗监控每个用户只发生一次的转换事件。

一个常见的例子是 onboarding 漏斗,它对于了解如何提高您游戏的新用户留存率和会话时间至关重要。以下示例是一个 onboarding 漏斗,适用于 Plant,这是一款模拟经营类游戏,新用户依次进入农场、种植种子、浇水等:

跟踪 Plant 中的 Onboarding 步骤

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, -- 此唯一结账会话的漏斗会话 ID
1, -- 步骤号
"打开商店" -- 步骤名称
)
-- 记录用户查看商品的时间
AnalyticsService:LogFunnelStepEvent(
player,
"ArmoryCheckout", -- 用于分组步骤的漏斗名称
funnelSessionId, -- 此唯一结账会话的漏斗会话 ID
2, -- 步骤号
"查看商品" -- 步骤名称
)
-- 记录用户添加到购物车的时间
AnalyticsService:LogFunnelStepEvent(
player,
"ArmoryCheckout", -- 用于分组步骤的漏斗名称
funnelSessionId, -- 此唯一结账会话的漏斗会话 ID
3, -- 步骤号
"添加到购物车" -- 步骤名称
)

实施 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,且您记录步骤 3 而未记录步骤 1 或 2,则该漏斗会将步骤 1 和 2 视为已完成。

使用漏斗过滤器

Roblox 提供了过滤器,以帮助您分析漏斗数据。这些包括玩家数据和设备数据,您还可以发送自定义数据。在某些情况下,玩家的状态可能会在漏斗期间发生变化,例如,当玩家从移动设备切换到桌面。

为避免双重计算漏斗,过滤器 仅适用于漏斗的第一步。这意味着,如果玩家在漏斗期间切换设备,漏斗将仅归因于他们进入漏斗时的设备。

同样,漏斗按队列显示,这意味着如果玩家在 6/19 进入漏斗,则漏斗将归因于 6/19 队列,即使他们在 6/20 完成漏斗。

修改漏斗

在您对漏斗步骤进行更新后,设定正确的日期范围以查看最新漏斗非常重要。如果当前日期是 6/21,而您在 6/14 更新了 onboarding 漏斗的第 2 步,则应将日期范围设置为 6/14 – 6/21 以查看最新的漏斗。

如果您选择的日期范围包括漏斗步骤更新,则在相关步骤上会显示警告:

在漏斗仪表板上显示警告,指示在所选日期范围内名称已更改.

保护您的漏斗免受利用者的攻击

为了保持数据的清晰性,在您的服务器代码中添加某种级别的数据验证以防止利用者向您的分析服务发送无效数据是很重要的。

例如,如果您有一个包含三步的 onboarding 漏斗,您可以使用 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)

使用自定义字段

漏斗事件还允许根据自定义字段进行拆分,以支持不同段之间更轻松的比较。例如,您可以跟踪哪种起始汽车为玩家提供最佳进展,或附加不同的地图以查看某张地图是否具备更好的游戏循环。

一个下拉菜单,指示您可以在其中进行比较的三个自定义字段,以及年龄、性别、操作系统等标准细分.

有关更多信息,请参见 自定义字段

使用漏斗来发展您的游戏

跟踪的一个最重要的漏斗是 onboarding,因为许多游戏在新用户留存和参与度方面面临挑战。

下面的 Plant 的 onboarding 漏斗中,最大流失发生在步骤 2(“种植种子”)。

Plant 游戏的漏斗图表,显示在农场中(步骤 1)和种植种子(步骤 2)之间的流失率为 70%。

根据这些数据,您可以:

  • 添加上下文指示器,更好地指导用户在开始时种植种子。
  • 设计新的用户体验,要求用户在探索游戏的其余部分之前先种植种子并培育成功的植物。通过创建 积极反馈元素 或使用其他游戏设计技术,您可以改善此事件。
Plant 游戏中的游戏视图,显示在花盆上方提示播种种子的提示。
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。