Scripting Roblox pour Debutants : Apprendre la Programmation Luau
Une introduction pratique au scripting Luau dans Roblox Studio — de votre premiere variable a votre premier script de jeu fonctionnel, sans aucune experience de codage requise.
Le scripting Roblox est ce qui transforme une scene statique en un jeu jouable. Chaque porte qui s'ouvre, chaque piece qui se collecte, chaque classement qui se met a jour — tout fonctionne grace a Luau, le langage de programmation integre a Roblox Studio. Si vous n'avez jamais ecrit une seule ligne de code, ce guide vous accompagnera de zero jusqu'a l'ecriture de vrais scripts de jeu fonctionnels.
Luau est base sur Lua mais inclut des fonctionnalites modernes comme la verification de types et des optimisations de performance concues specifiquement pour Roblox. C'est l'un des langages de programmation les plus accessibles aux debutants, et tout ce dont vous avez besoin pour l'ecrire et l'executer est deja dans Studio — aucun editeur de code ni installation supplementaire requis.
Configurer votre environnement de scripting
Ouvrez Roblox Studio et creez un nouveau projet Baseplate. Assurez-vous de voir le panneau Explorer a droite et le panneau Output en bas — ouvrez-les depuis l'onglet View si necessaire. L'Explorer est l'endroit ou vous creez et organisez vos scripts. L'Output est l'endroit ou vous lisez les instructions print et les messages d'erreur — vos principaux outils de debogage en tant que debutant.
Pour creer votre premier script, faites un clic droit sur ServerScriptService dans l'Explorer, selectionnez Insert Object et choisissez Script. Un nouveau script s'ouvre avec `print("Hello world!")`. Appuyez sur Play et verifiez le panneau Output — vous devriez voir le message affiche. Voila, c'est votre premier script reussi.
Les variables : stocker des informations
Les variables sont des conteneurs nommes qui stockent des donnees. En Luau, vous en creez une avec le mot-cle `local` : `local playerName = "Steve"` cree une variable texte, `local coins = 100` cree un nombre, et `local isAlive = true` cree un booleen. Utilisez toujours `local` — cela limite la portee de la variable a son bloc et evite les conflits. Utilisez des noms descriptifs comme `playerHealth` au lieu de `x` pour que votre code reste lisible.
Les types de donnees principaux de Luau sont `string` pour le texte, `number` pour les entiers et les decimaux, `boolean` pour vrai/faux, `nil` pour l'absence de valeur et `table` pour les collections. Vous ne declarez pas les types — Luau les infere automatiquement. Concatenez les chaines avec `..` comme `"Bonjour, " .. playerName`, convertissez entre les types avec `tostring()` et `tonumber()`, et utilisez les chaines avec backtick et accolades pour l'interpolation.
Les fonctions : blocs de code reutilisables
Une fonction est un bloc de code nomme qui s'execute quand vous l'appelez. La structure est `local function giveCoins(player, amount)` suivie du corps et de `end`. Les mots entre parentheses sont les parametres — les entrees que la fonction recoit. Appelez-la avec `giveCoins(somePlayer, 50)`. Les fonctions peuvent aussi retourner des valeurs : `local damage = calculateDamage(50, 20)` capture le resultat retourne.
Habituez-vous tot a ecrire de petites fonctions. Chaque systeme de jeu — combat, inventaire, boutiques, classements — est organise en fonctions. Si un bloc de code fait une chose specifique, encapsulez-le dans une fonction et donnez-lui un nom clair.
If/Else : prendre des decisions
L'instruction `if` evalue une condition et execute le code uniquement quand elle est vraie. La syntaxe est `if coins >= 100 then` suivie de votre code, optionnellement `elseif` pour des conditions supplementaires, `else` pour une alternative par defaut, et `end` pour fermer. Les operateurs de comparaison incluent `==` pour l'egalite, `~=` pour l'inegalite, `>`, `<`, `>=` et `<=`. Combinez les conditions avec `and`, `or` et `not` — par exemple, `if isAlive and coins > 0 then` ne s'execute que quand les deux sont vraies.
Une erreur frequente chez les debutants est d'utiliser `=` au lieu de `==` pour la comparaison. Un seul `=` assigne une valeur. Le double `==` compare deux valeurs. Si votre script se comporte de maniere inattendue, verifiez cela en premier.
Les boucles : repeter des actions
La boucle `for` s'execute un nombre defini de fois. Ecrivez `for i = 1, 10 do` suivi du code et `end` pour executer dix fois. Ajoutez une valeur de pas — `for i = 10, 1, -1 do` compte a rebours. La boucle `while` s'execute tant qu'une condition est vraie mais necessite `task.wait()` a l'interieur pour eviter de figer le jeu.
La boucle `for` generique parcourt les collections. Utilisez `for index, value in ipairs(myTable) do` pour les listes ordonnees, ou `for key, value in pairs(myDictionary) do` pour les dictionnaires cle-valeur. C'est ainsi que vous traitez les inventaires, les listes de joueurs et les donnees de classement.
Les tables : organiser les donnees
Les tables sont la structure de donnees la plus polyvalente de Luau — tableaux, dictionnaires, ou les deux. Creez un tableau avec `local fruits = {"Apple", "Banana", "Cherry"}` et accedez aux elements avec `fruits[1]` (Luau commence a 1, pas a 0). Creez un dictionnaire avec `local playerData = {coins = 100, level = 5}` et accedez aux valeurs avec `playerData.coins`. Presque chaque systeme de jeu stocke des donnees dans des tables.
Les evenements : reagir au monde du jeu
Les evenements sont la colonne vertebrale du scripting Roblox. Au lieu de verifier constamment si quelque chose s'est produit, vous connectez une fonction a un evenement et Roblox l'appelle automatiquement quand il se declenche. L'evenement le plus courant pour les debutants est `Touched` — connectez-le avec `part.Touched:Connect(function(hit) end)` ou `hit` est la piece en collision. Les autres essentiels incluent `PlayerAdded` (se declenche quand un joueur rejoint), `PlayerRemoving` (se declenche quand un joueur quitte), `CharacterAdded` (se declenche quand un personnage apparait) et `Changed` (se declenche quand une propriete change). Stockez les connexions dans des variables et appelez `connection:Disconnect()` quand elles ne sont plus necessaires pour eviter les fuites de memoire.
Server Scripts vs. Local Scripts
Les Server Scripts s'executent sur le serveur Roblox et controlent la logique de jeu faisant autorite — attribution de monnaie, sauvegarde de donnees, gestion des manches. Placez-les dans ServerScriptService. Les Local Scripts s'executent sur l'appareil de chaque joueur pour les taches specifiques au client — camera, saisie, interface. Placez-les dans StarterPlayerScripts, StarterCharacterScripts ou StarterGui.
La regle d'or : ne faites jamais confiance au client. Toute logique qui affecte le gameplay doit se passer sur le serveur. Le client envoie des requetes via les RemoteEvents dans ReplicatedStorage — envoyez depuis le client avec `remoteEvent:FireServer(data)`, ecoutez sur le serveur avec `remoteEvent.OnServerEvent:Connect(function(player, data) end)`. Le serveur valide et execute.
Votre premier script de jeu : un Kill Brick
Inserez une Part dans Workspace et colorez-la en rouge. Faites un clic droit dessus dans l'Explorer, inserez un Script, et remplacez le code par defaut. Ecrivez `local killPart = script.Parent` pour referencer la piece. Definissez `local function onTouched(hit)` et a l'interieur ecrivez `local humanoid = hit.Parent:FindFirstChild("Humanoid")` suivi de `if humanoid then humanoid.Health = 0 end`. Connectez avec `killPart.Touched:Connect(onTouched)`.
Appuyez sur Play et marchez sur la piece rouge. Votre personnage meurt et reapparait. Voila un script de jeu complet en sept lignes — chaque obby Roblox utilise exactement ce modele pour les blocs de danger.
Votre deuxieme script : un systeme de collecte de pieces
Creez un cylindre jaune (Part) et inserez un Script. Ecrivez `local coin = script.Parent` et `local debounce = false`. Dans la fonction `onTouched`, verifiez `if debounce then return end`, definissez `debounce = true`, verifiez qu'un Humanoid existe, puis masquez la piece avec `coin.Transparency = 1` et `coin.CanCollide = false`. Apres `task.wait(5)`, restaurez-la et reinitialisez le debounce. Le modele debounce apparait dans presque chaque script Touched — sans lui, l'evenement se declenche des dizaines de fois par seconde pendant que les pieces se chevauchent, causant des collectes en double. Maitrisez le debounce des le debut.
Votre troisieme script : une porte qui s'ouvre
Creez une Part haute et fine pour faire une porte. Stockez `local door = script.Parent` et `local originalPosition = door.Position`. Au toucher, deplacez-la vers le haut avec `door.Position = originalPosition + Vector3.new(0, 10, 0)`, attendez avec `task.wait(3)`, puis reinitialisez. Cela introduit `Vector3` — le type de donnees pour les positions 3D ou y represente le haut dans Roblox. Pour un mouvement plus fluide, utilisez TweenService : obtenez-le avec `game:GetService("TweenService")`, creez un TweenInfo pour la duree, et appelez `tweenService:Create(door, tweenInfo, {Position = targetPosition}):Play()`. Les Tweens animent n'importe quelle propriete dans le temps et rendent les interactions plus soignees.
Services Roblox essentiels
Services que vous utiliserez constamment en tant que scripteur :
- Players — acceder aux joueurs connectes, detecter les arrivees et les departs.
- ReplicatedStorage — conteneur partage pour les scripts serveur et client.
- TweenService — animer les proprietes de maniere fluide dans le temps.
- UserInputService — detecter les entrees clavier, souris et tactiles cote client.
- Debris — detruire automatiquement les objets apres un delai avec Debris:AddItem.
- DataStoreService — sauvegarder et charger les donnees persistantes des joueurs entre les sessions.
Accedez a n'importe quel service avec `game:GetService("ServiceName")` et stockez la reference en haut de votre script. Consultez le guide des outils de scripting pour plus de ressources sur l'utilisation de l'API Roblox complete.
Erreurs courantes et messages d'erreur
Placer un LocalScript dans ServerScriptService. Les LocalScripts ne s'executent que dans les conteneurs client — StarterPlayerScripts, StarterCharacterScripts ou sous une GUI dans StarterGui. Si votre code client ne fait rien, verifiez d'abord son emplacement.
Oublier de verifier nil. Si `FindFirstChild` retourne `nil` et que vous accedez a une propriete dessus, votre script plante avec "attempt to index nil". Enveloppez toujours les recherches dans une verification if avant d'utiliser le resultat.
Utiliser wait() au lieu de task.wait(). L'ancien `wait()` est imprecis et obsolete. Utilisez `task.wait(seconds)` pour les delais, `task.spawn()` pour les threads, et `task.delay()` pour les appels differes.
Quand des erreurs apparaissent dans le panneau Output, lisez-les attentivement — elles incluent le nom du script, le numero de ligne et la description. L'erreur "expected 'end'" signifie un bloc non ferme. Comptez vos paires `if/then/end` et `function/end` — chaque mot-cle d'ouverture necessite un `end` correspondant.
Sauvegarder les donnees des joueurs
DataStoreService sauvegarde la progression des joueurs entre les sessions. Obtenez un store avec `game:GetService("DataStoreService"):GetDataStore("PlayerData")`. Chargez a la connexion avec `pcall(function() return dataStore:GetAsync("Player_" .. player.UserId) end)` et sauvegardez au depart avec `SetAsync`. Enveloppez toujours les appels de data store dans `pcall` pour intercepter les erreurs reseau qui feraient autrement planter votre script. Sauvegardez lors de `PlayerRemoving` et envisagez une sauvegarde automatique sur minuterie en secours. Les data stores necessitent un jeu publie — activez l'acces API dans Game Settings pour les tests en Studio. La perte de donnees est le moyen le plus rapide de perdre definitivement des joueurs.
Prochaines etapes
Competences a apprendre apres avoir maitrise les bases :
- ModuleScripts — bibliotheques de code partagees qui gardent les projets organises.
- Programmation orientee objet — structurer le code autour d'objets avec des methodes.
- Programmation d'interface — construire des menus interactifs et des elements HUD.
- Raycasting — detecter la ligne de visee, les trajectoires de balles et les verifications de sol.
- Optimisation des performances — ecrire des scripts qui s'adaptent au nombre de joueurs.
Les performances comptent des le premier jour. A mesure que les scripts grandissent, les mauvaises habitudes s'accumulent. Lisez notre guide sur les performances de jeu pour comprendre comment les choix de scripting affectent la frequence d'images, la memoire et le trafic reseau.
La meilleure facon d'apprendre, c'est de construire. Choisissez un petit projet — un collecteur de pieces, un obby avec un classement, un puzzle de portes — et construisez-le de zero. Quand vous etes bloque, lisez le panneau Output, consultez la documentation Roblox et iterez. Le scripting Roblox est l'un des points d'entree les plus gratifiants en programmation car la boucle de retour est immediate : ecrivez du code, appuyez sur Play, voyez le resultat.
Questions Fréquentes
Quel langage de programmation Roblox utilise-t-il ?
Roblox utilise Luau, un langage de programmation derive de Lua. Luau a ete developpe par Roblox et inclut des fonctionnalites supplementaires comme la verification de types optionnelle, de meilleures performances et des messages d'erreur ameliores. Si vous voyez des references a "Roblox Lua", on parle de Luau. Tout le scripting dans Roblox Studio se fait en Luau.
Combien de temps faut-il pour apprendre le scripting Roblox ?
Vous pouvez ecrire des scripts de base comme des kill bricks et des collecteurs de pieces des votre premier jour. Comprendre les concepts fondamentaux comme les variables, les fonctions, les evenements et les instructions if/else prend une a deux semaines de pratique reguliere. Construire des systemes de jeu complets comme la sauvegarde de donnees, la gestion d'inventaire et le gameplay base sur des manches prend generalement un a trois mois. La regularite de la pratique compte plus que le nombre total d'heures.
Dois-je connaitre Lua avant d'apprendre le scripting Roblox ?
Non. Luau est suffisamment accessible aux debutants pour etre votre premier langage de programmation. Vous n'avez besoin d'aucune experience prealable avec Lua ou tout autre langage. Roblox Studio inclut un editeur de code integre, un affichage des erreurs et des outils de test qui vous permettent d'apprendre en pratiquant. Commencez par les bases de ce guide et construisez de petits projets pour renforcer chaque concept.
Quelle est la difference entre un Script et un LocalScript dans Roblox ?
Un Script s'execute sur le serveur et controle la logique de jeu faisant autorite partagee entre tous les joueurs, comme l'attribution d'objets, la gestion des manches et la sauvegarde des donnees. Un LocalScript s'execute sur l'appareil d'un joueur individuel et gere les taches specifiques au client comme les controles de camera, les entrees utilisateur et les mises a jour de l'interface. Ils communiquent via les RemoteEvents et RemoteFunctions stockes dans ReplicatedStorage.
Pourquoi mon script Roblox ne fonctionne-t-il pas ?
Verifiez le panneau Output dans Studio pour les messages d'erreur en rouge — ils vous indiquent le nom du script, le numero de ligne et ce qui s'est mal passe. Les problemes les plus courants sont : le script est dans le mauvais conteneur (les LocalScripts ne s'executent pas dans ServerScriptService), une variable est nil car FindFirstChild n'a pas trouve l'objet, un mot-cle end manquant qui casse la syntaxe, ou l'utilisation d'un simple signe egal pour la comparaison au lieu du double egal. Corrigez les erreurs une par une en commencant par la premiere listee.