Aller au contenu
Forma Roblox

Rechercher dans la formation

Module 06 · Leçon 2 sur 5

Les 60 premières secondes

Conçois un début de partie qui donne envie de rester, guide sans bloquer avec un faisceau et un indice minuté, et prépare la mesure de ce moment clé.

  • ⏱️ 30 min
  • 📝 Quiz de 6 questions
  • 🔄 Vérifié le 24 octobre 2026
Sur cette page

🎯 Dans cette leçon, tu vas apprendre à…

  • Comprendre pourquoi le début de partie est décisif sur Roblox
  • Concevoir un onboarding par la pratique, sans mur de texte
  • Guider le joueur vers le premier checkpoint avec un faisceau et un indice minuté
  • Savoir comment ce moment sera mesuré au module 9

Sur Roblox, quitter un jeu prend une seconde, et des milliers d’autres jeux attendent à côté. Le début de partie est donc le moment où tu as le plus de chances… de perdre ton joueur. Dans cette leçon, tu vas repenser l’arrivée dans l’Obby des Nuages : ce que le joueur voit, ce qu’il fait, et comment l’aider sans l’ennuyer.

Pourquoi le début de partie est décisif

La documentation Roblox sur l’onboarding (l’accueil des nouveaux joueurs, aussi appelé FTUE pour first-time user experience) est très directe : les nouveaux joueurs décident généralement de leur intérêt pour un jeu en quelques minutes. La page « Design for Roblox » ajoute que, comme on rejoint et quitte les jeux très facilement, les FTUE qui amènent vite les joueurs au plaisir de jeu ont tendance à mieux marcher sur Roblox.

La page sur la rétention va plus loin. Elle conseille d’éviter un début complexe ou long, pour amener les joueurs au plaisir de jeu le plus vite possible, « idéalement en 5 minutes ou moins » après leur arrivée.

Ce que l’onboarding doit accomplir

Roblox résume le rôle de l’onboarding en trois idées :

  1. Enseigner l’essentiel : les contrôles et la core loop (leçon précédente). Le joueur doit comprendre ce qu’on attend de lui et pourquoi.
  2. Amener vite au plaisir : progression rapide, motivations sociales (collaborer, se comparer), objets ou monnaie de départ offerts.
  3. Donner envie de la suite : montrer des objectifs à court, moyen et long terme, et terminer l’onboarding par un moment de joie (récompense, animation, effet de célébration).

Concevoir un onboarding sans mur de texte

La documentation Roblox rappelle que beaucoup de jeunes joueurs ont du mal à lire des interfaces chargées de texte, et que la majorité des utilisateurs jouent sur un appareil mobile. Un pavé de règles à l’écran est donc la pire façon de commencer. Les techniques recommandées par Roblox sont visuelles et progressives.

1. Les éléments visuels

Une flèche qui rebondit, un objet qui brille, une traînée lumineuse qui mène à la destination, un panneau placé dans le champ de vision… Ces éléments sont temporaires : ils restent seulement le temps de faire passer leur message. Ils ont un autre avantage, souligné par la documentation : ils n’ont pas besoin de traduction pour être compris par un public mondial. Combinés aux remarques précédentes (jeunes joueurs, écrans de téléphone), c’est une raison de plus de préférer l’image au texte.

2. Les tutoriels contextuels

Aussi appelés tutoriels « juste à temps », ils se déclenchent pendant le jeu normal : en entrant dans une nouvelle zone, en ramassant un nouvel objet… Le joueur apprend en faisant, et on ne lui présente pas tout d’un coup. Dans l’Obby des Nuages, inutile d’expliquer la boutique au spawn : présente-la quand le joueur a assez de pièces pour acheter sa première traînée.

3. Les indices minutés

Un indice minuté n’apparaît qu’aux joueurs en difficulté, après un délai choisi. Ceux qui ont compris tout seuls ne sont jamais dérangés. La documentation prend un exemple : si la plupart des joueurs appuient sur un bouton en moins de 10 secondes pendant les playtests, on peut le mettre en évidence à 11 secondes pour aider les autres. Elle précise qu’un bon indice doit suffire en étant montré une seule fois.

Refondre le spawn de l’Obby des Nuages

Voici une checklist pour les premières secondes de notre fil rouge. Ce sont des choix de conception de la formation, appliqués à un obby à partir des conseils officiels ci-dessus (objectif visible, premier succès rapide, moment de joie, pas de mur de texte).

  • Le joueur apparaît face au premier saut. Oriente la SpawnLocation (module 1) pour que la caméra regarde le parcours, pas un mur.
  • Le premier checkpoint est visible depuis le spawn. C’est l’objectif clair et visible : le joueur sait où aller sans lire.
  • Le premier saut est facile. Il apprend le contrôle (sauter) sans risque d’échec. La difficulté viendra plus tard (leçon suivante).
  • Une pièce est placée sur le chemin du premier saut. Le joueur ramasse sa première récompense en quelques secondes, avec le message de feedback de la leçon précédente.
  • Le premier checkpoint est célébré. Un son, des particules, le message « Étape 1 atteinte ! » : c’est le moment de joie qui conclut l’onboarding.
  • Aucun menu à l’entrée. Pas d’écran de chargement maison ni de boutique qui s’ouvre toute seule. On joue d’abord.

Coder un guide vers le prochain checkpoint

Mettons en pratique la technique des éléments visuels. On va relier le personnage au prochain checkpoint par un Beam (un faisceau lumineux tendu entre deux points d’attache, les Attachments). Le guide n’apparaît que pendant les deux premières étapes : ensuite, le joueur a compris le principe et le faisceau disparaît.

On suppose ici que Etape vaut 0 tant qu’aucun checkpoint n’est atteint, et que les checkpoints sont des Parts nommées "1", "2"… dans Workspace.Checkpoints, comme dans tout le projet. Si ton jeu commence à 1, adapte le calcul de prochaine.

Crée un LocalScript nommé GuideCheckpoint dans StarterPlayer › StarterPlayerScripts et colle ce code. Dans ton projet Rojo, c’est le fichier src/StarterPlayer/StarterPlayerScripts/GuideCheckpoint.client.luau : tu peux aussi le faire écrire par Claude Code avec le prompt de l’encadré « Avec Claude Code » plus bas, puis le relire ligne par ligne avec les explications de cette section.

-- LocalScript « GuideCheckpoint » à placer dans StarterPlayer > StarterPlayerScripts
-- Affiche un faisceau entre le personnage et le prochain checkpoint,
-- seulement pendant les premières étapes (onboarding).
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")

local ETAPES_GUIDEES = 2 -- on guide vers les checkpoints 1 et 2, puis plus rien

local joueur = Players.LocalPlayer
local etape = joueur:WaitForChild("leaderstats"):WaitForChild("Etape") :: IntValue
local dossierCheckpoints = Workspace:WaitForChild("Checkpoints")

-- On garde la liste des objets créés pour pouvoir les supprimer
local elementsGuide: { Instance } = {}

local function retirerGuide()
	for _, element in elementsGuide do
		element:Destroy()
	end
	table.clear(elementsGuide)
end

local function placerGuide()
	retirerGuide()

	local prochaine = etape.Value + 1
	if prochaine > ETAPES_GUIDEES then
		return -- le joueur connaît le principe : on ne le guide plus
	end

	local personnage = joueur.Character
	local racine = personnage and personnage:FindFirstChild("HumanoidRootPart")
	-- Avec le streaming (module 10), un checkpoint lointain peut ne pas être encore chargé
	local cible = dossierCheckpoints:FindFirstChild(tostring(prochaine))
	if not (racine and cible and cible:IsA("BasePart")) then
		return
	end

	-- Un point d'attache sur le joueur, un autre sur le checkpoint
	local attacheJoueur = Instance.new("Attachment")
	attacheJoueur.Parent = racine
	local attacheCible = Instance.new("Attachment")
	attacheCible.Parent = cible

	-- Le faisceau lui-même, visible uniquement par ce joueur (créé côté client)
	local faisceau = Instance.new("Beam")
	faisceau.Attachment0 = attacheJoueur
	faisceau.Attachment1 = attacheCible
	faisceau.FaceCamera = true
	faisceau.Width0 = 0.3
	faisceau.Width1 = 0.3
	faisceau.Color = ColorSequence.new(Color3.fromRGB(255, 220, 80))
	faisceau.Parent = cible

	table.insert(elementsGuide, attacheJoueur)
	table.insert(elementsGuide, attacheCible)
	table.insert(elementsGuide, faisceau)
end

-- Nouvelle étape atteinte : on vise le checkpoint suivant (ou on arrête de guider)
etape.Changed:Connect(placerGuide)

-- Réapparition du personnage : il faut recréer l'attache sur le nouveau corps
joueur.CharacterAdded:Connect(function(personnage)
	personnage:WaitForChild("HumanoidRootPart")
	placerGuide()
end)

-- Si le checkpoint visé arrive plus tard (chargement, streaming), on réessaie
dossierCheckpoints.ChildAdded:Connect(function(enfant)
	if enfant.Name == tostring(etape.Value + 1) then
		placerGuide()
	end
end)

if joueur.Character then
	placerGuide()
end

Pourquoi un LocalScript ? Parce que chaque joueur a son propre prochain checkpoint. Créé côté client, le faisceau n’est visible que par lui (module 4) : les autres joueurs ne voient pas une forêt de rayons dorés.

Ajouter un indice minuté

Le faisceau aide tout le monde. L’indice minuté, lui, ne s’adresse qu’au joueur qui n’a toujours pas atteint le premier checkpoint après un certain temps. Crée pour lui un second LocalScript, nommé IndiceDepart, au même endroit (StarterPlayerScripts) :

-- LocalScript « IndiceDepart » à placer dans StarterPlayer > StarterPlayerScripts
-- Indice minuté : n'apparaît que si le joueur n'a pas atteint le checkpoint 1 à temps.
local Players = game:GetService("Players")

local DELAI_INDICE = 15 -- en secondes : à régler grâce à tes playtests (leçon 5)

local joueur = Players.LocalPlayer
local etape = joueur:WaitForChild("leaderstats"):WaitForChild("Etape") :: IntValue

local ecran = Instance.new("ScreenGui")
ecran.Name = "IndiceDepart"
ecran.ResetOnSpawn = false
ecran.Parent = joueur:WaitForChild("PlayerGui")

local indice = Instance.new("TextLabel")
indice.AnchorPoint = Vector2.new(0.5, 1)
indice.Position = UDim2.fromScale(0.5, 0.85)
indice.Size = UDim2.fromScale(0.6, 0.07)
indice.BackgroundTransparency = 0.3
indice.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
indice.TextColor3 = Color3.new(1, 1, 1)
indice.TextScaled = true
indice.Text = "Suis le rayon doré et saute sur le premier nuage !"
indice.Visible = false
indice.Parent = ecran

task.delay(DELAI_INDICE, function()
	-- Toujours à l'étape 0 : le joueur a besoin d'aide
	if etape.Value == 0 then
		indice.Visible = true
	end
end)

-- Dès que le joueur progresse, l'indice disparaît pour de bon
etape.Changed:Connect(function(nouvelleEtape: number)
	if nouvelleEtape >= 1 then
		ecran:Destroy()
	end
end)

L’indice est court, concret et ne bloque rien. Un joueur expérimenté qui atteint le checkpoint en cinq secondes ne le verra jamais.

Mesurer ce moment (aperçu du module 9)

Tes impressions ne suffisent pas : il faut des chiffres. Roblox propose deux outils que tu utiliseras plus tard.

  • La rétention D1 (le lendemain) : selon la documentation, elle mesure combien de joueurs reviennent dans ton jeu un jour après leur première visite (D7 et D30 : 7 et 30 jours après). Roblox relie directement ce chiffre à la core loop, à la FTUE et aux performances.
  • L’entonnoir d’onboarding (onboarding funnel) : avec AnalyticsService, ton serveur enregistre chaque étape franchie (« Arrivé », « Premier saut », « Checkpoint 1 »…). La page Funnel du tableau de bord Analytics (Creator Hub) te montre ensuite à quelle étape les joueurs décrochent. Ces événements ne s’envoient que depuis le serveur et dans un jeu publié. On construira cet entonnoir étape par étape au module 9 (Instrumenter son jeu avec AnalyticsService).

La documentation conseille de lister les étapes de ta boucle, de suivre le taux de réussite de chacune et de corriger en priorité les plus grosses chutes. Elle mentionne aussi les Experiments (tests A/B), par exemple pour comparer un dialogue plus court et une flèche de guidage. Mais attention : au moment de la rédaction (octobre 2026), Roblox prévient que les jeux de moins de 1 000 utilisateurs actifs par jour risquent d’avoir du mal à obtenir des résultats utiles avec ces tests. Pour un premier jeu, les playtests de la leçon 5 seront bien plus parlants.

Ce qu’il faut retenir

  • Les nouveaux joueurs décident « en quelques minutes » ; Roblox conseille d’amener au plaisir de jeu vite, idéalement en 5 minutes ou moins. Les 60 secondes sont notre objectif pour un obby.
  • L’onboarding enseigne l’essentiel, amène vite au plaisir et se termine par un moment de joie.
  • Trois techniques officielles : éléments visuels, tutoriels contextuels, indices minutés.
  • Guide sans bloquer : objectif visible, premier saut facile, première pièce immédiate, aucun menu à l’entrée.
  • La rétention D1 et l’entonnoir d’onboarding (module 9) diront si ton début de partie fonctionne.

Sources et pour aller plus loin

Quiz : vérifie tes acquis

6 questions · réussite à partir de 70 % · valide chaque réponse pour voir l’explication

  1. Question 1Vrai ou fauxRoblox recommande un long tutoriel détaillé au lancement du jeu pour que le joueur comprenne tout avant de jouer.
  2. Question 2QCMQu’est-ce qu’un « indice minuté » (timed hint) ?
  3. Question 3QCMQuelles pratiques améliorent le début de partie de l’Obby des Nuages ? (plusieurs réponses possibles)

    Plusieurs réponses possibles : coche toutes les bonnes.

  4. Question 4Vrai ou fauxLes « 60 secondes » de cette leçon sont une règle officielle fixée par Roblox.
  5. Question 5Trouve le bugCet indice doit s’afficher seulement si le joueur n’a toujours pas atteint le premier checkpoint après 15 secondes. Où est le bug ?
    local Players = game:GetService("Players")
    
    local DELAI_INDICE = 15
    local joueur = Players.LocalPlayer
    local etape = joueur:WaitForChild("leaderstats"):WaitForChild("Etape") :: IntValue
    
    task.delay(DELAI_INDICE, function()
    	if etape.Value > 0 then
    		print("Indice : suis le rayon doré jusqu'au premier nuage !")
    	end
    end)
  6. Question 6Améliore ce promptTu veux que Claude Code améliore le début de partie de l’Obby des Nuages. Quelle version du prompt suit le mieux cette leçon ?
    Le prompt de départ
    ajoute un tutoriel au début de mon obby

    Choisis la meilleure version de ce prompt.