Tutoriel · Bases du scripting

Comment faire un jeu sur Roblox Studio, étape par étape

Tu peux faire un jeu Roblox avec seulement Roblox Studio, qui est gratuit, et un compte Roblox. Ce guide construit un court parcours de pièces à partir du modèle Baseplate : des plateformes à sauter, de la lave qui te fait réapparaître, des pièces dans la liste des joueurs et un pad d'arrivée qui donne une victoire, le tout géré par deux scripts serveur. Ensuite, il publie le jeu et l'ouvre aux joueurs, en suivant les règles actuelles de Roblox sur qui peut y jouer.

Mis à jour le 26 octobre 202622 min de lecture

En bref

Pour faire un jeu sur Roblox Studio, ouvre Studio, choisis le modèle Baseplate, construis ton niveau avec des Parts (coche Anchored pour qu'elles restent en place), et ajoute des Scripts dans ServerScriptService pour les règles, comme un dossier leaderstats pour les pièces. Appuie sur Play (F5) pour le tester. Puis choisis File > Publish pour l'enregistrer sur ton compte. Il reste privé jusqu'à ce que tu le publies pour le public (release) depuis le même menu et que tu répondes à la question sur le contenu soumis à restriction d'âge.

  • Garde les règles du jeu dans des Scripts serveur. Un changement fait par un LocalScript n'est vu que par ce joueur, et tout ce qui est sur l'appareil d'un joueur peut être modifié par un tricheur.
  • L'ouverture au public demande un compte en règle d'au moins 2 jours et une vérification de l'âge. Si tu réponds No à la question sur le contenu soumis à restriction d'âge, Roblox marque le jeu Content May Vary et l'ouvre aux utilisateurs de 16 ans et plus avec âge vérifié. Atteindre tous les âges a des conditions en plus.
  • Studio tourne sur Windows et Mac. La page de configuration de Roblox ne liste aucune version pour téléphone ou tablette.
Sur cette page
  1. Ce que tu construis
  2. 1. Installer Studio
  3. 2. Construire le parcours
  4. 3. Script PlayerStats
  5. 4. Script CourseService
  6. Règles serveur
  7. 5. Tester
  8. 6. Publier
  9. 7. Rendre public
  10. Avec des amis
  11. La suite
  12. Erreurs courantes
  13. Avec RoCode
  14. Questions fréquentes
  15. Sources et lectures

Ce que tu vas construire

Illustration animéeLe parcours terminé dans une partie en cours : trois pièces sur un parcours, puis le Finish donne une victoire et renvoie le joueur au départ.

Le jeu est un court parcours. Les joueurs partent de la SpawnLocation, sautent entre des plateformes au-dessus d'un sol de lave, ramassent des pièces et touchent un pad vert d'arrivée. Le Finish ne donne une victoire qu'à un joueur qui a ramassé au moins 3 pièces depuis sa dernière apparition ou sa dernière arrivée, puis le renvoie au départ. Coins et Wins s'affichent dans la liste des joueurs, et chaque règle tourne sur le serveur.

Les éléments du parcours de pièces
ÉlémentOù il se trouveCe qu'il fait
SpawnLocationDirectement dans Workspace (il est fourni avec le modèle Baseplate)Là où les joueurs apparaissent quand ils arrivent et quand ils réapparaissent. Le Finish renvoie les joueurs ici.
Folder CourseWorkspaceContient tout le niveau, pour que le script trouve tout au même endroit.
Folder Lava et ses partsDans CourseChaque part qu'il contient fait réapparaître le joueur qui la touche.
Folder Coins et ses partsDans CourseChaque pièce donne 1 Coin au premier joueur qui la touche, se cache, et revient après 10 secondes.
Part FinishDans CourseDonne une victoire à un joueur qui a ramassé 3 pièces sur ce parcours, puis le renvoie au départ.
Script PlayerStatsServerScriptServiceDonne à chaque joueur une statistique Coins et une statistique Wins dans la liste des joueurs.
Script CourseServiceServerScriptServiceGère la lave, les pièces et le Finish. Le seul endroit où Coins et Wins changent.
L'Explorer quand le parcours est fini. Ajoute autant de plateformes, de parts de lave et de pièces que tu veux. Seuls les noms Course, Lava, Coins et Finish sont imposés.
Workspace
  Baseplate Part
  SpawnLocation SpawnLocation
  Course Folder new
    Platform Part new
    Lava Folder new
      Lava Part new
    Coins Folder new
      Coin Part new
    Finish Part new
ServerScriptService
  PlayerStats Script new
  CourseService Script new

Tu construis tout dans Workspace à la main à l'étape 2. Les deux scripts vont dans ServerScriptService. Roblox n'envoie jamais aux joueurs les scripts de ce conteneur, donc personne ne peut les lire ni les modifier depuis son propre appareil.

Étape 1 : installer Studio et ouvrir une Baseplate

  1. Télécharge Roblox Studio depuis le Creator Hub de Roblox et lance l'installateur (RobloxStudio.exe sur Windows, RobloxStudio.dmg sur Mac). Studio est une application gratuite pour Windows et Mac.
  2. Quand il s'ouvre, connecte-toi avec ton compte Roblox. Si tu n'en as pas, crée-en un d'abord sur roblox.com.
  3. Dans la section Open a Template, choisis Baseplate. Il commence avec seulement deux objets : une SpawnLocation, où les personnages apparaissent et réapparaissent, et la Baseplate, un sol avec une texture en grille de 4 sur 4 alignée sur les studs, l'unité de longueur de Roblox.
  4. Ouvre trois fenêtres que tu vas utiliser tout le temps. Explorer liste chaque objet de ton jeu, et Properties modifie l'objet sélectionné ; les deux s'ouvrent depuis le menu Window ou l'onglet Home. Output montre les erreurs de tes scripts, et s'ouvre depuis le menu Window ou l'onglet Script.

Étape 2 : construire le parcours

  1. Dans l'Explorer, survole Workspace, clique sur le bouton + (ou appuie sur Ctrl+I, Cmd+I sur Mac) et insère un Folder. Renomme-le Course.
  2. Survole Course, clique sur +, et insère deux autres Folders dedans. Nomme-les Lava et Coins.
  3. Construis le sol de lave. Clique sur Part dans l'onglet Home ou Model pour insérer un bloc, puis utilise l'outil Scale pour l'étirer en une grande dalle plate qui passera sous tout le parcours, avec beaucoup de marge de chaque côté. Dans Properties, règle sa Color sur rouge et son Material sur Neon, coche Anchored, et glisse-la dans le dossier Lava. Maintenant, un joueur qui tombe n'importe où atterrit dans la lave, pas sur la Baseplate.
  4. Construis les plateformes. Insère d'autres parts de la même façon et utilise les outils Move et Scale pour les placer au-dessus de la lave, chacune à quelques studs au-dessus, avec des écarts à sauter entre elles. Dans Properties, vérifie que Anchored est coché sur chacune, et glisse-les dans Course.
  5. Construis les pièces. Maintiens la petite flèche du bouton Part et choisis Cylinder. Fais-le petit et jaune, coche Anchored, et décoche CanCollide pour que les joueurs passent à travers au lieu de buter dedans. Mets-le dans le dossier Coins, puis appuie sur Ctrl+D (Cmd+D sur Mac) pour le dupliquer jusqu'à en avoir au moins 3, et répartis-les au-dessus des plateformes le long du parcours.
  6. Construis l'arrivée. Insère une dernière part au-dessus de la lave, tout au bout, assez grande pour atterrir dessus, colore-la en vert, coche Anchored, nomme-la exactement Finish, et glisse-la directement dans Course, pas dans l'un des dossiers.
  7. Déplace la SpawnLocation sur la lave au début du parcours, à côté de ta première plateforme, pour qu'elle soit posée sur la dalle. Garde-la directement dans Workspace, pas dans Course : CourseService la cherche là pour renvoyer les joueurs au départ.

Les noms comptent

CourseService trouve le parcours par son nom : un dossier appelé Course directement dans Workspace, les dossiers Lava et Coins dedans, et une part appelée Finish dedans. Écris-les exactement, avec les mêmes majuscules. Les noms des parts de lave et des pièces n'ont pas d'importance : chaque part directement dans Lava est de la lave, et chaque part directement dans Coins est une pièce.

Étape 3 : ajouter Coins et Wins à la liste des joueurs

Dans l'Explorer, survole ServerScriptService, clique sur +, insère un Script et nomme-le PlayerStats. Remplace tout son contenu par ceci :

Script dans ServerScriptService nommé PlayerStats
-- Script dans ServerScriptService, nommé PlayerStats.
-- Donne à chaque joueur une statistique Coins et Wins. Un dossier nommé leaderstats dans le
-- joueur fait afficher ces valeurs par Roblox dans la liste des joueurs, en haut à droite.

local Players = game:GetService("Players")

local function onPlayerAdded(player: Player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats" -- doit s'écrire exactement comme ça

	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Value = 0
	coins.Parent = leaderstats

	local wins = Instance.new("IntValue")
	wins.Name = "Wins"
	wins.Value = 0
	wins.Parent = leaderstats

	leaderstats.Parent = player
end

Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do -- ceux qui sont arrivés avant que cette ligne s'exécute
	onPlayerAdded(player)
end

Le dossier doit s'appeler leaderstats, tout en minuscules. Roblox lit chaque valeur qu'il contient et l'affiche dans la liste des joueurs, avec le nom de la valeur comme titre de colonne.

Chaque joueur reçoit un Folder nommé leaderstats avec deux objets IntValue dedans. Une IntValue contient un nombre entier, et c'est tout ce dont un compteur de pièces a besoin. La boucle à la fin prépare tout joueur arrivé avant que la ligne PlayerAdded s'exécute, pour que personne ne soit oublié.

Le guide du classement (en anglais) construit le même dossier plus en détail, puis ajoute la sauvegarde et un top 10 global.

Étape 4 : faire marcher la lave, les pièces et l'arrivée

Insère un deuxième Script dans ServerScriptService, nomme-le CourseService et colle ceci dedans. C'est le seul endroit où Coins et Wins changent. Les deux réglages en haut sont les nombres que tu es censé modifier.

Script dans ServerScriptService nommé CourseService
-- Script dans ServerScriptService, nommé CourseService.
-- Gère le parcours sur le serveur, pour que tous les joueurs voient la même chose et que personne
-- ne puisse se donner des pièces : les parts de lave font réapparaître les joueurs, les pièces
-- donnent 1 Coin et reviennent, et le pad Finish donne une victoire à qui a assez de pièces sur ce parcours.

local Players = game:GetService("Players")

local COINS_TO_FINISH = 3 -- pièces à ramasser sur un parcours avant que le Finish compte
local COIN_RESPAWN_SECONDS = 10

local course = workspace:WaitForChild("Course")
local lavaFolder = course:WaitForChild("Lava")
local coinFolder = course:WaitForChild("Coins")
local finish = course:WaitForChild("Finish") :: BasePart
local spawnLocation = workspace:FindFirstChildOfClass("SpawnLocation")
if not spawnLocation then
	warn("CourseService: no SpawnLocation directly in Workspace, so the Finish cannot send players back")
end

-- Pièces ramassées sur ce parcours : depuis la dernière apparition du joueur ou sa dernière arrivée
local runCoins: { [Player]: number } = {}

-- Trouve le joueur dont le personnage a touché une part, ou nil pour tout le reste
local function playerFromHit(otherPart: BasePart): Player?
	local character = otherPart:FindFirstAncestorOfClass("Model")
	return if character then Players:GetPlayerFromCharacter(character) else nil
end

local function addStat(player: Player, statName: string, amount: number)
	local leaderstats = player:FindFirstChild("leaderstats")
	local stat = leaderstats and leaderstats:FindFirstChild(statName)
	if stat and stat:IsA("IntValue") then
		stat.Value += amount
	end
end

-- Lave : toute part du dossier Lava fait réapparaître le joueur qui la touche
for _, lava in lavaFolder:GetChildren() do
	if lava:IsA("BasePart") then
		lava.Touched:Connect(function(otherPart: BasePart)
			local character = otherPart:FindFirstAncestorOfClass("Model")
			local humanoid = character and character:FindFirstChildOfClass("Humanoid")
			if humanoid and humanoid.Health > 0 then
				humanoid.Health = 0
			end
		end)
	end
end

-- Pièces : le premier joueur qui touche une pièce la prend, puis elle se cache jusqu'à sa réapparition
for _, coin in coinFolder:GetChildren() do
	if coin:IsA("BasePart") then
		local shownTransparency = coin.Transparency
		local taken = false
		coin.Touched:Connect(function(otherPart: BasePart)
			local player = playerFromHit(otherPart)
			if not player or taken then
				return -- pas un joueur, ou cette pièce a déjà été prise
			end
			taken = true
			coin.Transparency = 1
			addStat(player, "Coins", 1)
			runCoins[player] = (runCoins[player] or 0) + 1
			task.delay(COIN_RESPAWN_SECONDS, function()
				coin.Transparency = shownTransparency
				taken = false
			end)
		end)
	end
end

-- Finish : une victoire pour les joueurs qui ont fait le parcours, puis retour au départ
finish.Touched:Connect(function(otherPart: BasePart)
	local player = playerFromHit(otherPart)
	if not player or (runCoins[player] or 0) < COINS_TO_FINISH then
		return
	end
	runCoins[player] = 0 -- d'abord, pour que retoucher le pad ne compte pas deux fois
	addStat(player, "Wins", 1)
	local character = player.Character
	if character and spawnLocation then
		character:PivotTo(spawnLocation.CFrame + Vector3.new(0, 4, 0))
		player:SetAttribute("MovementCheckSkip", true) -- pour un script de vérification de vitesse, si tu en ajoutes un
	end
end)

-- Un nouveau personnage (après une réapparition ou une chute) commence un nouveau parcours
local function onPlayerAdded(player: Player)
	runCoins[player] = 0
	player.CharacterAdded:Connect(function()
		runCoins[player] = 0
	end)
end

Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do -- ceux qui sont arrivés pendant que ce script attendait Course
	onPlayerAdded(player)
end

Players.PlayerRemoving:Connect(function(player: Player)
	runCoins[player] = nil
end)

CourseService parcourt les dossiers Lava et Coins une seule fois, au démarrage du jeu. Construis chaque part de lave et chaque pièce dans Studio avant d'appuyer sur Play : une part qu'un autre script ajoute pendant la partie n'est pas branchée.

Ce que fait chaque partie de CourseService
Partie du scriptCodeCe qu'elle fait
RéglagesCOINS_TO_FINISH, COIN_RESPAWN_SECONDSCombien de pièces un joueur doit ramasser sur un parcours avant que le Finish compte (3), et combien de temps une pièce prise reste cachée (10 secondes).
Trouver le parcoursWaitForChild, FindFirstChildOfClass("SpawnLocation")Attend Course, Lava, Coins et Finish par leur nom, et trouve la SpawnLocation directement dans Workspace vers laquelle le Finish renvoie les joueurs. S'il n'y en a pas, il affiche un avertissement dans l'Output.
Qui l'a touchéplayerFromHitLa part qui touche peut être un pied, une main ou la poignée d'un chapeau. FindFirstAncestorOfClass("Model") remonte jusqu'au modèle du personnage, et GetPlayerFromCharacter le transforme en joueur, ou en nil pour tout ce qui n'est pas le personnage d'un joueur.
Lavehumanoid.Health = 0Fait réapparaître tout personnage qui touche une part du dossier Lava.
Piècestaken, Transparency = 1, task.delayLe premier joueur qui touche une pièce reçoit 1 Coin. La pièce devient invisible et ignore les contacts jusqu'à son retour après COIN_RESPAWN_SECONDS. Comme c'est le serveur qui la cache, elle disparaît pour tous les joueurs.
Ce parcoursrunCoinsCompte les pièces que chaque joueur a ramassées depuis sa dernière apparition ou sa dernière arrivée. Le nombre de Coins dans la liste des joueurs continue de grimper ; ce compteur repart de 0 à chaque réapparition et à chaque victoire.
FinishrunCoins[player] < COINS_TO_FINISHIgnore un joueur qui a moins de 3 pièces sur ce parcours. Sinon, il remet d'abord son compteur à 0, pour que rester sur le pad ne paie pas deux fois, ajoute 1 victoire, et déplace le personnage 4 studs au-dessus de la SpawnLocation.
Nouveau parcoursCharacterAdded, GetPlayers()Chaque nouveau personnage commence un nouveau parcours. La boucle couvre les joueurs arrivés pendant que le script attendait encore Course.
NettoyagePlayerRemovingOublie un joueur qui part.

La lave met Health à 0, comme le tutoriel de lave de Roblox. Un nouveau personnage a par défaut un ForceField pendant 10 secondes après être apparu sur une SpawnLocation, et Humanoid:TakeDamage ne fait rien tant qu'il en est protégé. Régler Health directement ignore les ForceFields, donc la lave marche même juste après une réapparition.

Le Finish déplace le personnage avec character:PivotTo(...), que la référence de Roblox présente comme la façon principale de déplacer un modèle depuis un script. Régler plutôt la position de la root part du personnage éloigne cette seule part du reste du corps.

La ligne MovementCheckSkip ne fait rien toute seule. Elle est là pour la vérification de vitesse côté serveur du guide du sprint (en anglais) : si tu ajoutes cette vérification plus tard, la téléportation du Finish n'est pas signalée comme un excès de vitesse.

Pourquoi les règles tournent sur le serveur

Chaque règle de ce parcours est dans CourseService, un Script serveur, exprès. Si un LocalScript ajoutait la pièce, la nouvelle valeur de Coins n'existerait que sur l'appareil de ce joueur : le serveur et les autres joueurs ne la verraient jamais. Et tout ce qui est sur l'appareil d'un joueur peut être modifié. Le guide de sécurité de Roblox dit qu'un tricheur a un contrôle total sur son état local et son trafic réseau, donc c'est le serveur qui doit prendre chaque décision qui compte.

Ce qu'un tricheur peut essayer sur ce parcours
Un tricheur essaie deRésultatPourquoi
Changer ses Coins ou ses Wins sur son propre appareilLui seul le voitLes vraies valeurs sont sur le serveur, et seul CourseService les modifie.
Se téléporter directement sur le FinishPas de victoireLe Finish demande 3 pièces ramassées sur ce parcours. La page de Roblox sur la conception défensive prend exactement ce cas d'obby, un tricheur qui se téléporte à la fin pour réclamer des récompenses, et recommande des points de passage que le serveur vérifie avant de récompenser.
Toucher les pièces ou le Finish de loinPossibleLe guide de sécurité de Roblox dit que les tricheurs peuvent déclencher des événements Touched à n'importe quelle distance et fréquence. Chaque pièce ne paie quand même qu'une fois, à celui qui la touche en premier, puis se cache 10 secondes pour tout le monde.
Voler ou se téléporter vers chaque pièce, puis vers le FinishPossibleL'appareil de chaque joueur contrôle son propre personnage, et Roblox liste la téléportation et le vol parmi ce qu'un client peut en faire.
Ignorer la lavePossibleLe même appareil décide si les contacts de son personnage se déclenchent ou non. Pour un premier jeu, c'est acceptable.

La règle des pièces arrête donc la triche la plus simple, un saut direct à la fin, et pas beaucoup plus. C'est normal pour un premier jeu. Les étapes suivantes sont une vérification côté serveur qu'un personnage est vraiment près d'une pièce ou du Finish avant de payer, comme le guide de sécurité de Roblox vérifie la distance d'un joueur à une boutique ; des points de passage à atteindre dans l'ordre, comme dans le guide des points de passage d'obby ; et une vérification des déplacements comme celle du guide du sprint. Ce qui est répliqué et ce qui ne l'est pas explique plus en détail la séparation entre client et serveur (guides en anglais).

Étape 5 : tester

  1. Vérifie que Test est sélectionné dans le menu du mode de test, puis appuie sur Play (F5). Ton nom apparaît dans la liste des joueurs avec Coins 0 et Wins 0.
  2. Marche dans une pièce. Coins passe à 1 et la pièce disparaît. Attends 10 secondes et elle revient. Marche dedans de nouveau : Coins monte à 2.
  3. Touche la lave. Ton personnage tombe K.-O. et réapparaît sur la SpawnLocation après 5 secondes, le temps de réapparition par défaut de Roblox. Coins dans la liste des joueurs ne change pas, mais ton compteur pour ce parcours repart de 0.
  4. Touche le Finish avec moins de 3 pièces sur ce parcours : rien ne se passe. Ramasse 3 pièces, puis touche-le : Wins passe à 1 et tu retombes sur la SpawnLocation.
  5. Appuie sur Stop (Maj+F5). Choisis Server & Clients dans le menu, règle 2 clients et appuie sur Play (ou F7). Prends une pièce dans une fenêtre client et regarde l'autre : la pièce a disparu là aussi, parce que le serveur l'a cachée pour tout le monde.

Garde la fenêtre Output ouverte tout le temps. Ces deux scripts n'affichent rien quand ils marchent, donc tout avertissement ou toute erreur rouge de PlayerStats ou CourseService est un vrai problème. Vois les erreurs courantes.

Étape 6 : publier ton jeu

  1. Ouvre le menu File et choisis Publish. La fenêtre Game details s'ouvre.
  2. Tape un Name, choisis un Genre (le Subgenre est facultatif) et écris une courte Description de ce que font les joueurs. Tu peux aussi envoyer une icône et une miniature ici. Vérifie d'abord leurs tailles avec le vérificateur gratuit de taille de miniature et d'icône (en anglais).
  3. Clique sur Save. Roblox publie le jeu dans le cloud et le relie à ton compte, pour que tu puisses l'ouvrir depuis n'importe quel ordinateur.
  4. Le jeu est maintenant publié mais privé. Seuls toi, les personnes avec un accès Edit et les membres de groupe avec les bons rôles peuvent y jouer.
  5. Tu veux des avis avant de l'ouvrir au public ? Choisis File > Invite early testers et choisis jusqu'à 10 amis d'âge proche. Si tu n'as pas encore fait de vérification de l'âge, Roblox te demande d'en faire une d'abord. Les testeurs voient un filigrane qui leur dit que le jeu est un aperçu.

À partir de maintenant, sauvegarder sur Roblox depuis le menu File garde une version de ton jeu dans le cloud. C'est File > Publish qui change la version que reçoivent les joueurs. De temps en temps, joue à la copie publiée depuis Roblox, en dehors de Studio, pour vérifier qu'elle correspond à ce que tu as testé.

Étape 7 : l'ouvrir au public (rendre ton jeu public)

L'ouverture au public (release) est la façon de rendre ton jeu public, pour que d'autres personnes que toi et tes collaborateurs puissent y jouer. Avant de commencer, vérifie les conditions : ton compte doit être en règle et avoir au moins 2 jours, et il te faut une vérification de l'âge, par estimation faciale de l'âge ou par pièce d'identité.

  1. Ouvre le menu File et choisis de nouveau Publish. La fenêtre Publish s'ouvre.
  2. Clique sur Continue. (Le bouton Invite à côté invite plutôt des testeurs.)
  3. Réponds à la première question du questionnaire Maturity & Compliance de Roblox : ton jeu contient-il du contenu soumis à restriction d'âge ? Réponds selon ce que ton jeu contient vraiment. Si tu réponds Yes, tu remplis tout le questionnaire.
  4. Clique sur Publish.
Qui peut jouer après l'ouverture au public
Ce que tu faisLabelQui peut jouer
Répondre NoContent May VaryLes utilisateurs de 16 ans et plus avec âge vérifié. Tu peux remplir tout le questionnaire plus tard sur le Creator Hub pour toucher un public plus large.
Répondre Yes, puis remplir le questionnaireSelon tes réponsesLes utilisateurs de 16 ans et plus avec âge vérifié, ou de 18 ans et plus avec âge vérifié, selon ce que contient le jeu.
Remplir les conditions pour tous les âgesMinimal, Mild ou Moderate (9+), d'après le questionnaire completTous les âges. En plus des étapes ci-dessus, tu vérifies ton compte (estimation faciale de l'âge si tu as moins de 18 ans, pièce d'identité si tu as 18 ans ou plus), tu actives la vérification en 2 étapes, tu gardes un abonnement Roblox Plus ou Premium pendant 2 mois consécutifs ou tu paies des frais uniques remboursables, et le jeu passe l'évaluation de Roblox pour une ouverture à tous les âges.

Pour ne laisser entrer que tes amis, ouvre le Creator Dashboard, sélectionne le jeu, va dans Publish settings > Manage Audience, clique sur Manage access, active Friends dans l'onglet Public et clique sur Save Changes. Avec Friends activé, seuls tes amis et les personnes de l'onglet Playtest peuvent jouer.

Les mêmes conditions s'appliquent à chaque action d'ouverture au public : la première ouverture, l'ouverture d'une nouvelle version d'un jeu déjà public, l'ouverture vers un autre jeu avec Publish As, et le changement de qui peut jouer.

Le faire avec des amis

Les outils de collaboration de Studio te permettent, à toi et à un ami, de modifier le même jeu en même temps. Pour un jeu qui t'appartient :

  1. Avec le jeu ouvert dans Studio, clique sur Collaborate à droite de la barre mezzanine, la barre dont le côté gauche contient le bouton Play.
  2. Cherche ton ami, sélectionne-le, choisis Edit dans le menu des autorisations et clique sur Save. Pour un jeu qui t'appartient, seuls tes amis Roblox peuvent avoir l'accès Edit.
  3. Ton ami ouvre le jeu depuis le Creator Dashboard, et vous travaillez tous les deux dans le même jeu en même temps.

Pour collaborer avec d'autres créateurs, tu fais d'abord une vérification de l'âge, par pièce d'identité ou estimation faciale de l'âge. Ensuite, par défaut, Studio ne te laisse collaborer qu'avec des créateurs de tranches d'âge compatibles. Tu peux utiliser Team Create seul sans vérification de l'âge. Pendant une session de collaboration, Studio sauvegarde le jeu dans le cloud toutes les quatre minutes.

En faire un vrai jeu

Le parcours est une boucle complète : jouer, ramasser, arriver, gagner. Chacun de ces guides (en anglais, sauf le premier) ajoute un système par-dessus.

  • Tu débutes avec les scripts ? Scripter sur Roblox quand on débute couvre les variables, les fonctions, les événements et les boucles, les pièces dont CourseService est fait.
  • Sauvegarde Coins et Wins entre les sessions avec l'étape 3 du guide du classement. Son script de sauvegarde remplace un script Coins et Wins comme PlayerStats, donc supprime PlayerStats quand tu l'ajoutes. Le tutoriel DataStore explique la sauvegarde en profondeur.
  • Des points de passage dans l'ordre, avec une statistique Stage et la réapparition au dernier point de passage : le guide des points de passage d'obby. Son script crée son propre dossier leaderstats, donc copie les lignes Coins et Wins de PlayerStats dans ce dossier et supprime PlayerStats. Deux scripts qui créent chacun leaderstats donnent deux dossiers à chaque joueur, et Coins et Wins peuvent arrêter de changer.
  • Dépenser les Coins dans une boutique. Elle utilise la valeur Coins des leaderstats, donc saute son script Leaderstats : PlayerStats crée déjà Coins.
  • Vendre un avantage contre des Robux avec un game pass. Avant de fixer un prix, le calculateur de taxe Robux gratuit montre ce que chaque vente te rapporte après la part de Roblox, et le calculateur DevEx ce que valent ces Robux en dollars US.
  • Un écran titre avec un bouton Play : le guide du menu principal.
  • Des manches avec une intermission, des maps aléatoires et un minuteur : le guide du système de manches, qui ajoute à la même valeur Wins. Saute son script leaderstats, parce que PlayerStats crée déjà Wins.
  • Une cinématique d'intro avec des plans de caméra, des sous-titres et un bouton Skip : le guide des cinématiques.
  • Une porte vers une zone secrète qui s'ouvre avec E, avec une serrure à clé facultative : le guide des portes.
  • Des pads de téléportation entre des parties de la map, ou un menu de téléportation : le guide du téléporteur.
  • Sprinter avec Maj au clavier, sur téléphone et à la manette, avec la vérification des déplacements côté serveur : le guide du sprint. Sa vérification des déplacements lit l'attribut MovementCheckSkip que règle le Finish.
  • Un combat ou une autre boucle : donne aux joueurs une épée ou un pistolet à raycast, ou commence un nouveau jeu où les joueurs cliquent pour gagner des pièces, achètent des améliorations et font des rebirths, avec le guide du jeu de simulateur.

Erreurs courantes

Ouvre la fenêtre Output (menu Window ou onglet Script) avant d'appuyer sur Play. La plupart des problèmes sur ce parcours affichent un avertissement ou une erreur là, ou viennent d'un nom qui ne correspond pas.

Infinite yield possible on 'Workspace:WaitForChild("Course")'

CourseService a attendu 5 secondes un dossier nommé Course directement dans Workspace et ne l'a pas trouvé. Vérifie l'orthographe et le C majuscule. Le même avertissement avec Lava, Coins ou Finish veut dire que cet objet manque dans Course ou a un autre nom. Tant qu'il n'apparaît pas, rien après cette ligne ne s'exécute, donc la lave, les pièces et le Finish ne font rien.

Coins et Wins n'apparaissent pas dans la liste des joueurs

Vérifie que le nom du dossier dans PlayerStats est leaderstats, tout en minuscules, et que PlayerStats est un Script, pas un LocalScript, directement dans ServerScriptService. Si les deux sont bons, cherche une erreur rouge de PlayerStats dans l'Output.

Une erreur rouge de CourseService dès que j'appuie sur Play

Vérifie CanTouch dans Properties sur chaque part de lave, chaque pièce et le Finish. S'il est désactivé sur l'un d'eux quand tu appuies sur Play, Roblox lève une erreur quand CourseService connecte Touched à cette part, et le script s'arrête là : rien après ce point ne marche, donc les pièces suivantes, le Finish ou la remise à zéro des parcours peuvent ne jamais être branchés. Coche CanTouch sur toutes et appuie de nouveau sur Play.

Toucher une pièce ne fait rien

La pièce doit être une part directement dans le dossier Coins, pas dans un autre dossier ni un modèle à l'intérieur, parce que CourseService ne regarde que les enfants directs du dossier. Elle doit aussi y être avant que tu appuies sur Play, avec CanTouch coché (voir le point au-dessus).

Je touche le Finish et rien ne se passe

Il te faut 3 pièces ramassées sur ce parcours, depuis ta dernière apparition ou ta dernière arrivée. Toucher la lave remet ce compteur à zéro, une victoire aussi, même si le nombre de Coins dans la liste des joueurs reste. Vérifie aussi que la part s'appelle exactement Finish et se trouve directement dans Course.

Le Finish donne une victoire mais ne me renvoie pas au départ

CourseService cherche la SpawnLocation directement dans Workspace, et affiche un avertissement dans l'Output quand il n'en trouve pas. Si tu as glissé la SpawnLocation dans Course ou l'un de ses dossiers, remets-la dans Workspace dans l'Explorer et appuie de nouveau sur Play.

La lave ne me fait pas réapparaître

La part de lave doit être directement dans le dossier Lava avant que tu appuies sur Play, avec CanTouch coché. Une part de lave mise ailleurs dans Course n'est qu'une plateforme rouge.

Mes plateformes ou mes pièces tombent quand j'appuie sur Play

Elles ne sont pas ancrées. Sélectionne-les, coche Anchored dans Properties, et appuie de nouveau sur Play.

Le construire avec RoCode

Si tu préfères décrire le jeu plutôt que construire chaque élément à la main, RoCode peut le construire dans le jeu que tu as ouvert. RoCode est un agent IA indépendant pour Roblox Studio, qui n'est pas fait par Roblox : tu décris la fonctionnalité dans son chat web, et son plugin pour Studio crée les parts et les scripts dans ton Explorer, donc tu ne copies pas de code depuis une fenêtre de chat.

Tu écris

Fais un parcours de pièces : un dossier Course avec des dossiers Lava et Coins et une part Finish, des leaderstats Coins et Wins, de la lave qui fait réapparaître les joueurs, des pièces qui valent 1 et reviennent après 10 secondes, et une arrivée qui donne une victoire seulement après 3 pièces sur ce parcours.

RoCode fait
  • Peut d'abord chercher dans ton jeu du code leaderstats ou DataStore existant, pour compléter ce que tu as au lieu d'ajouter un deuxième classement
  • Crée le dossier et les parts dans Workspace et les Scripts dans ServerScriptService
  • Vérifie dans Studio que chaque script qu'il a écrit compile avec Check Script. C'est une vérification de compilation, pas une vérification de types ni un test en jeu
  • Pose un point d'annulation avant et après chaque lot de modifications, donc Ctrl+Z revient en arrière un lot à la fois

Le construire dans Studio

Avec le plugin 3.9 ou plus récent, RoCode peut lancer un court test et lire les erreurs, et avec le plugin 3.9.11 ou plus récent contrôler un personnage de test pour vérifier que le jeu marche, mais il ne vérifie que ce qu'il a choisi de tester, donc joue toi-même. Construire un jeu entier avec RoCode marche comme ça, un système par prompt. Comment RoCode se connecte à Studio.

Questions fréquentes

Peut-on faire un jeu Roblox gratuitement ?

Oui. Studio est gratuit, et construire et publier ne demandent qu'un compte Roblox. L'ouverture au public demande aussi un compte en règle d'au moins 2 jours et une vérification de l'âge. Certains extras coûtent des Robux, comme les frais remboursables qui sont l'une des façons d'atteindre tous les âges.

Peut-on faire un jeu Roblox sur téléphone, iPad ou Chromebook ?

La page de configuration de Roblox ne liste Studio que pour Windows et Mac, donc il te faut l'un de ces ordinateurs pour construire un jeu.

Comment rendre mon jeu Roblox public ?

Ouvre-le au public. Dans Studio, choisis File > Publish, clique sur Continue, réponds à la question sur le contenu soumis à restriction d'âge, puis clique sur Publish. Il te faut un compte en règle d'au moins 2 jours et une vérification de l'âge. Si tu réponds No, Roblox ouvre le jeu aux utilisateurs de 16 ans et plus avec âge vérifié. Atteindre tous les âges a des conditions en plus, listées à l'étape 7.

Pourquoi mes amis ne peuvent pas jouer à mon jeu ?

Les nouveaux jeux sont privés : seuls toi, les personnes avec un accès Edit et les membres de groupe avec les bons rôles peuvent y entrer. Ouvre-le au public avec File > Publish, ce qui demande une vérification de l'âge et la question sur le contenu soumis à restriction d'âge, ou invite jusqu'à 10 amis d'âge proche comme testeurs avec File > Invite early testers.

Pourquoi mon jeu est-il marqué 16+ ?

En général parce que tu as répondu No à la question sur le contenu soumis à restriction d'âge en l'ouvrant au public. Roblox donne alors au jeu le label Content May Vary et l'ouvre aux utilisateurs de 16 ans et plus avec âge vérifié. Une réponse Yes avec le questionnaire complet donne aussi 16+, ou 18+, selon ce que contient le jeu. Atteindre tous les âges demande la vérification du compte, la vérification en 2 étapes, un abonnement Roblox Plus ou Premium pendant 2 mois consécutifs ou des frais uniques remboursables, une évaluation du jeu et le questionnaire complet.

Comment faire un jeu avec des amis ?

Clique sur Collaborate dans Studio et donne l'accès Edit à un ami. Pour collaborer avec d'autres créateurs, tu fais d'abord une vérification de l'âge, et ensuite Studio ne te laisse collaborer par défaut qu'avec des créateurs de tranches d'âge compatibles. Vous pouvez alors travailler tous les deux dans le même jeu en même temps.

Faut-il savoir scripter ?

Pas pour ce guide : tu colles deux scripts, et les tableaux expliquent ce que fait chaque partie. Pour les modifier avec assurance, commence par scripter sur Roblox quand on débute.

Sources et lectures

Comment le code a été vérifié : chaque script de cette page passe le vérificateur de types strict de Luau avec les définitions de l'API Roblox (luau-lsp, 26 octobre 2026). Une vérification de types repère les API mal écrites et les mauvais types, pas la logique du jeu : teste dans Studio avant de publier.

Essaie RoCode sur ton propre jeu.

Des crédits gratuits chaque jour, sans carte. Installe le plugin, décris la fonctionnalité et vérifie ce qui arrive dans Studio.