Roblox et LUA

Module complet : Découvrir la programmation sur Roblox (Lua + Roblox Studio)

Ce module s’appuie sur une série de 3 tutoriels vidéo en français. L’idée n’est pas seulement de “recopier du code”, mais de comprendre en profondeur ce que l’on fait : scripts, fonctions, variables, événements, boucles, TeamService, etc. Même si tu pars de zéro, tu dois pouvoir t’en sortir si tu suis les explications et les exercices pas à pas.


Vidéos de référence (à suivre dans l’ordre) :

- Épisode 1 : Introduction
Découverte de Roblox Studio, des scripts, et des bases de la programmation Lua.
https://www.youtube.com/watch?v=dF7akgc3PIQ

- Épisode 2 : Les fonctions
Programmation d’une brique qui réagit au contact d’un personnage.
Introduction très importante aux fonctions, au script “analyze”, à la portée des variables (locales/globales) et à la valeur de retour d’une fonction.

https://www.youtube.com/watch?v=8heqcR5Bxk8

- Épisode 3 : Création d’un jeu
On commence à assembler “un vrai jeu” : ajout du service Teams, évènements (FireServer / FireAllClients), tables, waitForChild, boucles for et while, ordre d’exécution des scripts, etc.
https://www.youtube.com/watch?v=GXCtU3zEEIU


Objectifs pédagogiques du module

  • Comprendre ce qu’est un script Roblox (Script / LocalScript) et comment il s’exécute.
  • Savoir ce qu’est une fonction en Lua et pourquoi on en a besoin.
  • Comprendre la portée des variables (locales / globales) et éviter les bugs classiques.
  • Utiliser des événements (comme Touched) pour réagir aux actions des joueurs.
  • Utiliser des boucles (for, while) et wait() pour créer des comportements dans le temps.
  • Manipuler TeamService et comprendre la différence client / serveur (RemoteEvent, FireServer / FireClient).
  • Comprendre pourquoi on utilise WaitForChild et ce que cela évite comme erreurs.
  • Structurer un projet de jeu complet : ordre des scripts, organisation du code, lisibilité.

0) Rappel express : Roblox Studio et Lua, c’est quoi ?

  • Roblox Studio : l’éditeur où tu construis le monde (objets 3D, lumières, décors) et où tu écris les scripts.
  • Lua : le langage de programmation utilisé dans les scripts Roblox.
  • Script : un fichier de code qui contient des instructions exécutées par Roblox.
  • LocalScript : script exécuté sur le client (le joueur), utilisé pour la caméra, l’interface, certaines entrées clavier, etc.

Tu peux voir ça comme :
Les objets = les pièces du jeu.
Les scripts = les cerveaux qui disent quoi faire.
Lua = le langage dans lequel tu parles à ces cerveaux.


1) Épisode 1 – Introduction (lecture du monde + premiers scripts)

a) Explorer l’interface

  • Explorer : liste tous les objets de ton jeu (Workspace, Players, ReplicatedStorage, etc.). C’est comme l’arborescence de dossiers.
  • Propriétés : te montre les réglages de l’objet sélectionné (Couleur, Taille, Anchored, etc.).
  • Play / Stop : démarre / arrête la simulation. C’est là que les scripts s’exécutent vraiment.

b) Créer ton premier script

Exemple ultra simple :

print("Bonjour Roblox !")

print affiche un message dans la fenêtre Output.
– Ça sert à débugger : voir ce qui se passe dans ton code.

Mini-exercices Épisode 1 :

  • Créer un Script dans Workspace qui affiche "Début du jeu" quand tu presses Play.
  • Changer la couleur et la taille d’une Part dans l’onglet Propriétés, puis observer le résultat en 3D.
  • Ajouter un deuxième Script qui affiche ton pseudo dans l’Output.

2) Épisode 2 – Fonctions, événements, portée des variables

a) C’est quoi une fonction (en mode ultra simple) ?

Une fonction, c’est une machine à laquelle tu donnes un nom. Tu peux :

  • l’appeler quand tu veux;
  • lui donner des infos (arguments);
  • récupérer un résultat (valeur de retour).

Exemple simple en Lua :

function addition(a, b)
    local resultat = a + b
    return resultat
end

local x = addition(3, 5)
print(x)  -- affiche 8

function : on déclare une nouvelle fonction.
a, b : les “entrées” de la fonction.
return : renvoie le résultat à l’endroit où la fonction a été appelée.

b) Portée des variables : locales vs globales

Variable locale : définie avec local, visible uniquement dans le bloc où elle est déclarée.
Variable globale : sans local, visible (et modifiable) partout… ce qui peut créer des bugs “magiques”.

local compteur = 0   -- variable locale au script

function incrementer()
    compteur = compteur + 1
    print("Compteur = ", compteur)
end

En règle générale : toujours utiliser local sauf si tu sais très bien pourquoi tu fais autrement.

c) Exemple typique : une brique qui réagit au contact du joueur

On attache un script à une brique, et on utilise l’événement Touched :

local brique = script.Parent  -- la Part qui porte le script

local function quand_touche(part_touchee)
    print("Quelque chose a touché la brique")
end

brique.Touched:Connect(quand_touche)

script.Parent : objet sur lequel le script est posé.
Touched : événement déclenché lorsqu’un autre objet touche la brique.
:Connect : “abonne” ta fonction à l’événement.

Mini-exercices Épisode 2 :

  • Modifier la fonction quand_touche pour que la brique change de couleur lorsqu’on la touche.
  • Faire en sorte que la brique se détruise (brique:Destroy()) après le contact.
  • Créer une fonction qui prend un nombre de points en entrée, l’ajoute à une variable score, et affiche le nouveau score avec print.

3) Épisode 3 – Construire un vrai jeu : Teams, tables, boucles & co

a) TeamService : gérer les équipes

Le TeamService permet de créer plusieurs équipes (Rouge, Bleu, etc.). Tu peux :

  • Définir des équipes dans Teams.
  • Assigner des joueurs à une équipe via un script.
  • Changer la couleur des spawnpoints en fonction de l’équipe.

b) Tables : des “listes” de valeurs

local joueurs = { "Alice", "Bob", "Charlie" }

for index, nom in ipairs(joueurs) do
    print("Joueur", index, ":", nom)
end

Une table en Lua = un peu comme une liste ou un dictionnaire : tu peux stocker plusieurs valeurs dedans.

c) Boucles for, while, wait()

  • for : répéter un nombre de fois précis.
  • while : répéter “tant que” une condition est vraie.
  • wait() : faire une pause (en secondes) entre deux tours de boucle.
-- Faire clignoter une Part 10 fois
local bloc = script.Parent

for i = 1, 10 do
    bloc.Transparency = 0
    wait(0.2)
    bloc.Transparency = 0.5
    wait(0.2)
end

d) WaitForChild : attendre que l’objet soit prêt

Quand le jeu démarre, certains objets (“enfants”) ne sont pas encore créés / chargés au moment où le script s’exécute. WaitForChild sert à attendre l’objet au lieu d’avoir une erreur.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local MonRemoteEvent = ReplicatedStorage:WaitForChild("MonRemoteEvent")

Sans WaitForChild, si MonRemoteEvent n’est pas encore créé, tu obtiens une erreur. Avec lui, le script attend.

e) Client / serveur, RemoteEvent, FireServer

Dans Roblox, il y a :

  • Le serveur : autorité principale, gère le monde partagé entre tous les joueurs.
  • Le client : ce que voit chaque joueur sur son PC (caméra, interface…).

Pour faire parler le client et le serveur, on utilise des RemoteEvents :

  • RemoteEvent:FireServer(...) : le client envoie une info au serveur.
  • RemoteEvent:FireAllClients(...) ou FireClient : le serveur envoie une info aux clients.

Mini-exercices Épisode 3 :

  • Créer 2 équipes dans Teams (Rouge et Bleu) et assigner les joueurs à une équipe au hasard au début de la partie.
  • Faire une boucle while true do dans un Script qui affiche toutes les 5 secondes "La partie est en cours..." dans l’Output.
  • Utiliser WaitForChild pour récupérer un RemoteEvent dans ReplicatedStorage et afficher un message “Remote prêt !” une fois qu’il est trouvé.

4) Plan de travail conseillé pour l’élève

  1. Regarder l’épisode 1 en entier une fois, sans rien faire, juste pour voir.
  2. Deuxième visionnage : mettre pause régulièrement, reproduire les manipulations dans Roblox Studio, faire les mini-exercices Épisode 1.
  3. Passer à l’épisode 2 : prendre le temps de bien comprendre les fonctions, la portée des variables, faire tous les mini-exercices.
  4. Passer à l’épisode 3 : expérimenter avec TeamService, RemoteEvents, boucles, WaitForChild. Ajouter au moins une idée personnelle (un texte, un effet visuel, un comportement d’ennemi…).
  5. Terminer par le QCM ci-dessous pour vérifier que tu as compris la logique globale.

5) Super QCM Roblox Studio & Lua

Choisis la (ou les) bonne(s) réponse(s). Correction en bas.

  1. À quoi sert principalement la fonction print() dans un script Roblox ?
    A. Afficher du texte dans la fenêtre Output.
    B. Changer la couleur d’un objet.
    C. Lancer une nouvelle partie.
    D. Fermer Roblox Studio.
  2. Une fonction en Lua est :
    A. Un type spécial de boucle.
    B. Un bloc de code réutilisable, avec éventuellement des entrées et une sortie.
    C. Un objet graphique dans le jeu.
    D. Un autre nom pour “variable”.
  3. Quelle syntaxe représente une variable locale correcte ?
    A. score = 0
    B. local score = 0
    C. var score = 0
    D. int score = 0
  4. L’événement Touched est déclenché quand :
    A. Le joueur appuie sur la touche “T”.
    B. Une Part entre en contact avec une autre Part.
    C. Le script est lancé pour la première fois.
    D. Le jeu se ferme.
  5. WaitForChild("MonRemote") sert à :
    A. Créer un enfant nommé "MonRemote".
    B. Attendre que l’objet enfant "MonRemote" existe avant de continuer.
    C. Effacer tous les enfants d’un objet.
    D. Renommer un RemoteEvent.
  6. Dans une boucle, la ligne wait(0.5) :
    A. Bloque le script pour toujours.
    B. Met en pause le script pendant environ 0,5 seconde avant de continuer.
    C. Efface toutes les variables locales.
    D. Redémarre le jeu.
  7. Le TeamService est utilisé pour :
    A. Gérer les équipes de joueurs (Rouge, Bleu, etc.).
    B. Changer la météo du jeu.
    C. Gérer les musiques d’ambiance.
    D. Créer des blocs physiques.
  8. RemoteEvent:FireServer() est appelé depuis :
    A. Un Script côté serveur.
    B. Un LocalScript côté client.
    C. La fenêtre Output.
    D. Le panneau Propriétés.
  9. Quelle structure de données en Lua permet de stocker une liste de noms de joueurs ?
    A. local joueurs = { "Alice", "Bob" }
    B. local joueurs = "Alice, Bob"
    C. local joueurs = [Alice, Bob]
    D. local joueurs = (Alice, Bob)
  10. Quelle phrase décrit le mieux la portée d’une variable local dans un script Roblox ?
    A. Elle est visible partout, dans tous les scripts du jeu.
    B. Elle est visible dans tout le projet, même dans d’autres jeux.
    C. Elle est visible uniquement dans le bloc (fonction / script) où elle est déclarée.
    D. Elle n’est jamais visible.

Correction :
1) A  – 2) B  – 3) B  – 4) B  – 5) B  – 6) B  – 7) A  – 8) B  – 9) A  – 10) C

Commentaires

Posts les plus consultés de ce blog

Basthon.fr

mBot2 - programmation mBlock/python

Mario Kart 2D