Eventos de funil permitem que você acompanhe o progresso do usuário através de etapas-chave de seu jogo. Isso inclui:
- Integração — Onde os usuários desistem ao começar seu jogo?
- Progressão — Onde os usuários param de avançar em seu jogo?
- Loja — Onde os usuários abandonam compras?
Assim que seu jogo começar a rastrear eventos de funil, você desbloqueia a página de Funil do painel de Análises no Creator Hub. Você pode adicionar abas ao painel para até dez funis.
Rastrear eventos de funil
Para rastrear eventos de funil, primeiro identifique os funis mais importantes em seu jogo e os segmente em etapas. Como o objetivo é entender o comportamento do jogador, essas etapas geralmente correspondem a alguma ação ou conquista.
Em um RPG, você pode ter um passo para entrar no jogo, um para escolher uma classe, outro para sair da sala inicial, e assim por diante. Normalmente, você chama LogFunnelStepEvent() ou LogOnboardingFunnelStepEvent() após um jogador completar uma etapa, mas a coisa mais importante é ser consistente sobre quando você chama esses métodos e usar nomes fáceis de interpretar.
Seu fluxo de integração é um ótimo lugar para começar a rastrear eventos de funil, pois é provavelmente onde você perde a maioria de seus usuários.
Rastrear funis únicos
Um funil único monitora eventos de conversão que ocorrem apenas uma vez por usuário.
Um exemplo comum é um funil de integração, que é crítico para entender como melhorar a retenção de novos usuários e o tempo de sessão do seu jogo. O exemplo a seguir é um funil de integração para Plant, um jogo tycoon onde novos usuários entram em uma fazenda, plantam sementes, regam plantas e mais, em ordem sequencial:
Rastreando Etapas de Integração em Plantlocal AnalyticsService = game:GetService("AnalyticsService")-- Registra o primeiro passo do FTUEAnalyticsService:LogOnboardingFunnelStepEvent(player,1, -- Número da etapa"Na Fazenda" -- Nome da etapa)-- Registra o segundo passoAnalyticsService:LogOnboardingFunnelStepEvent(player,2, -- Número da etapa"Plantar Semente" -- Nome da etapa)
Rastrear funis recorrentes
Um funil recorrente monitora eventos de conversão que ocorrem várias vezes por usuário.
Um exemplo comum é um funil de loja, que pode ajudá-lo a entender como melhorar a conversão de pagantes do seu jogo, ARPPU e receita. O exemplo a seguir é um funil de loja onde os usuários abrem a loja, visualizam um item, adicionam um item ao carrinho, e mais.
Use funnelSessionId para distinguir entre diferentes sessões do mesmo usuário em um funil recorrente, como abrir a loja várias vezes em uma única sessão.
Rastreando Etapas de Lojalocal AnalyticsService = game:GetService("AnalyticsService")local HttpService = game:GetService("HttpService")local funnelSessionId = HttpService:GenerateGUID()-- Registra quando o usuário abre a lojaAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Nome do funil usado para agrupar etapasfunnelSessionId, -- ID de sessão do funil para esta sessão única de checkout1, -- Número da etapa"Loja Aberta" -- Nome da etapa)-- Registra quando o usuário visualiza um itemAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Nome do funil usado para agrupar etapasfunnelSessionId, -- ID de sessão do funil para esta sessão única de checkout2, -- Número da etapa"Item Visualizado" -- Nome da etapa)-- Registra quando o usuário adiciona ao carrinhoAnalyticsService:LogFunnelStepEvent(player,"ArmoryCheckout", -- Nome do funil usado para agrupar etapasfunnelSessionId, -- ID de sessão do funil para esta sessão única de checkout3, -- Número da etapa"Adicionado ao Carrinho" -- Nome da etapa)
Implementar funnelSessionId
Ao implementar funis, um funnelSessionId pode ajudá-lo a rastrear seus eventos, mas pode não ser necessário em todas as instâncias. Use as seguintes diretrizes:
- Funis únicos - Você não precisa usar funnelSessionId para funis únicos porque eles ocorrem apenas uma vez por usuário.
- Funis de loja - Use funnelSessionId para distinguir entre diferentes sessões do mesmo usuário em um funil recorrente, como abrir a loja várias vezes em uma única sessão no exemplo anterior. Em casos como esse, onde o jogador pode abrir a loja várias vezes em uma única sessão, é recomendável usar um GUID como funnelSessionId.
- Upgrades de itens - Use funnelSessionId para distinguir entre diferentes caminhos de upgrade de itens, geralmente ao longo de um período mais longo do que uma única sessão de jogo. Em vez de usar um GUID como no caso do funil de loja, você pode frequentemente construir uma chave única com base no item sendo atualizado, por exemplo: <playerId>-<itemId>.
Passo inicial
Os funis começam quando o primeiro passo é registrado. Se você quiser iniciar um funil imediatamente ao entrar um jogador, registre o primeiro passo no evento PlayerAdded.
Registrando o primeiro passo no evento PlayerAdded
local AnalyticsService = game:GetService("AnalyticsService")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
AnalyticsService:LogOnboardingFunnelStepEvent(
player,
1, -- Número da etapa
"Jogador Entrou" -- Nome da etapa
)
end)
Etapas repetidas
Se um usuário repetir uma etapa em um funil, o funil só considera a primeira instância da etapa. Por exemplo, se um usuário registrar a etapa 2 de um funil duas vezes, o funil só conta a primeira instância da etapa 2. Você não precisa tomar nenhuma ação especial para lidar com funis únicos para jogadores que desconectam e reconectam, e funnelSessionId lida com funis recorrentes.
Etapas repetidas são ignoradas pelo funil, mas ainda são registradas e contribuem para o limite global de taxa.
Etapas puladas
Se por algum motivo você pular uma etapa em um funil, as etapas anteriores são automaticamente consideradas concluídas. Por exemplo, se você tiver um funil com os passos 1, 2 e 3 e registrar a etapa 3 sem registrar as etapas 1 ou 2, o funil considera as etapas 1 e 2 como concluídas.
Use filtros de funil
Roblox fornece filtros para ajudá-lo a analisar seus dados de funil. Isso inclui dados de jogadores e dados de dispositivos, e você também pode enviar dados personalizados. Em alguns casos, o status de um jogador pode mudar durante o funil, como quando o jogador muda de dispositivo de móvel para desktop.
Para evitar a contagem dupla de funis, os filtros só se aplicam ao primeiro passo do funil. Isso significa que se um jogador trocar de dispositivo durante o funil, o funil será atribuído apenas ao dispositivo que estavam usando no momento em que entraram no funil.
Da mesma forma, os funis são exibidos por coorte, o que significa que se um jogador entrar no funil em 19/06, o funil será atribuído à coorte de 19/06, mesmo que completem o funil em 20/06.
Modificar funis
Depois de fazer uma atualização em suas etapas de funil, é importante definir a faixa de datas correta para ver o funil mais recente. Se a data atual for 21/06 e você atualizou a etapa 2 de seu funil de integração em 14/06, você deve definir a faixa de datas como 14/06 – 21/06 para visualizar o funil mais recente.
Se você selecionar uma faixa de datas que inclui uma atualização de etapa de funil, um aviso será exibido na etapa relevante:

Proteja seus funis contra exploradores
Para manter seus dados limpos, é importante adicionar algum nível de validação de dados em seu código do servidor para evitar que exploradores enviem dados inválidos para o seu serviço de análise.
Por exemplo, se você tiver um funil de integração com três etapas, pode usar um RemoteEvent para que o cliente notifique o servidor quando o jogador completar cada etapa e adicionar uma verificação no servidor para garantir que o número da etapa seja válido antes de registrar o evento:
Código de evento do lado do cliente
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) -- etapa inválida
Código de evento do lado do servidor
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(`Etapa de tutorial inválida {step} recebida do cliente.`)
return
end
print(`{player.Name} completou a etapa: {step}`)
AnalyticsService:LogOnboardingFunnelStepEvent(player, step)
end
onboardingEvent.OnServerEvent:Connect(onPlayerEventFired)
Use campos personalizados
Eventos de funil também permitem a segmentação em campos personalizados para suportar comparações mais fáceis entre segmentos. Por exemplo, você pode rastrear qual carro inicial oferece aos jogadores a melhor progressão ou anexar mapas diferentes para ver se um determinado mapa tem um loop de jogo melhor do que os outros.

Para mais informações, veja campos personalizados.
Use funis para fazer seu jogo crescer
Um dos funis mais importantes a serem rastreados é o de integração, pois muitos jogos enfrentam dificuldades com a retenção e engajamento de novos usuários.
No funil de integração para Plant abaixo, a maior desistência é na etapa 2 ("Plantar Semente").

Com base nesses dados, você pode:
- Adicionar indicadores contextuais para melhor direcionar os usuários a plantar sementes ao começarem.
- Projetar uma nova experiência para usuários que exige que os usuários plantem sementes e cultivem uma planta de sucesso antes de explorar o restante do jogo. Você pode melhorar esse evento criando elementos de feedback positivo ou usando outras técnicas de design de jogos.
