ROBLOX - initiation LUA

Roblox Lua – Créer un sol et des blocs piégés qui tombent

Un script complet pour créer un sol géant et des blocs qui tombent du ciel, détruits au contact du joueur. Idéal pour découvrir Instance.new, Vector3, boucles et événements Touched.
Public : 11 → 18 ans Bon tremplin vers la prog 3D / moteurs de jeu

1) Ce que fait le script

Le script d’origine est composé de plusieurs parties :

  • Création d’un bloc simple (pour découvrir Instance.new("Part")).
  • Création d’un grand sol blanc ancré, pour que tout tombe dessus.
  • Une fonction makePart() qui crée des cubes de 5×5×5, qui tombent.
  • Un événement Touched qui détecte la collision avec un Humanoid (le personnage Roblox).
  • Une boucle infinie while true do qui génère un nouveau bloc régulièrement.

Dans cette version “cours”, on va :

  • Nettoyer et mieux organiser le code.
  • Ajouter des commentaires clairs.
  • Expliquer chaque idée pour que même un débutant en Roblox Studio puisse suivre.

2) Script complet, organisé et commenté

Voici une version réorganisée du script, avec des noms plus clairs et quelques améliorations mineures (par exemple, position de spawn aléatoire). Tu peux coller ce script dans un Script placé dans ServerScriptService dans Roblox Studio.

--[[
  Script Roblox : sol + blocs piégés qui tombent
  - Crée un grand sol blanc
  - Fait tomber des blocs noirs / blancs
  - Quand un bloc touche un Humanoid, il est détruit
]]

-------------------------------
-- 1. Création du sol
-------------------------------

local ground = Instance.new("Part")
ground.Name = "Ground"

-- Taille : X, Y, Z (en studs)
ground.Size = Vector3.new(1000, 1, 1000)

-- Position au centre (0,0,0)
ground.Position = Vector3.new(0, 0, 0)

-- Le sol ne doit pas bouger : on l'ancre
ground.Anchored = true

-- Couleur blanche (R,G,B entre 0 et 1)
ground.Color = Color3.new(1, 1, 1)

-- On le place dans l'espace de jeu (Workspace)
ground.Parent = workspace


-------------------------------
-- 2. Variables globales
-------------------------------

-- Compteur de blocs créés (pour alterner les couleurs)
local count = 0


-------------------------------
-- 3. Fonction qui crée un bloc
-------------------------------

local function makePart()
    -- Position aléatoire sur X/Z pour que les blocs ne tombent pas tous au même endroit
    local randX = math.random(-50, 50)
    local randZ = math.random(-50, 50)

    -- Création d'un nouveau bloc
    local part = Instance.new("Part")
    part.Name = "FallingBlock"
    part.Size = Vector3.new(5, 5, 5)

    -- On place le bloc en hauteur (Y = 20) au-dessus du sol
    part.Position = Vector3.new(randX, 20, randZ)

    -- On le laisse tomber (pas ancré)
    part.Anchored = false

    -- On le met dans l'espace de jeu
    part.Parent = workspace

    -- Couleur alternée : un coup noir, un coup blanc
    if count % 2 == 0 then
        part.Color = Color3.new(0, 0, 0) -- noir
    else
        part.Color = Color3.new(1, 1, 1) -- blanc
    end

    -- Quand le bloc touche quelque chose
    part.Touched:Connect(function(hit)
        -- On cherche un Humanoid dans l'objet touché (personnage)
        local humanoid = hit.Parent:FindFirstChild("Humanoid")

        if humanoid ~= nil then
            -- Si tu veux vraiment KO le joueur :
            -- humanoid.Health = 0

            print("YOU DIE !!") -- message côté serveur
            part:Destroy()      -- on supprime le bloc après le contact
        end
    end)

    -- On incrémente le compteur
    count = count + 1
end


-------------------------------
-- 4. Boucle principale
-------------------------------

while true do
    -- Crée un nouveau bloc
    makePart()

    -- Attendre 1 seconde avant de créer le suivant
    task.wait(1)
end
Remarque : si task.wait ne fonctionne pas dans ta version, tu peux utiliser wait(1), mais task.wait() est plus moderne et plus précis.

3) Décryptage étape par étape

a) Instance.new("Part") : fabriquer un bloc

Instance.new("Part") crée un nouvel objet 3D dans le jeu. C’est comme “ajouter un cube” par script au lieu de le placer à la main.

  • Size → la taille du bloc en X, Y, Z.
  • Position → sa position dans l’espace 3D.
  • Anchored = true → l’objet ne bouge pas (pas de gravité).
  • Anchored = false → l’objet tombe, glisse, etc.
  • Parent = workspace → le bloc est vraiment ajouté dans la scène.

b) Le sol : un énorme Part ancré

Le “sol” n’est rien d’autre qu’un Part très plat, très large, ancré, et placé en (0,0,0). Tous les blocs qui tombent finissent dessus.

c) La fonction makePart()

makePart() est une fonction (comme un “bloc personnalisé” en Scratch) qui s’occupe de tout le travail de création d’un bloc :

  • Choisir une position aléatoire.
  • Créer le bloc, lui donner sa taille, sa couleur, sa position.
  • Connecter l’événement Touched.
  • Incrémenter le compteur count.

d) L’événement Touched

Quand le bloc touche quelque chose, Roblox appelle la fonction passée à :Connect(function(hit) ... end). On regarde alors si ce qu’on a touché contient un Humanoid :

  • Si oui → c’est probablement un personnage.
  • On peut alors modifier sa vie, afficher un message, détruire le bloc, etc.

e) La boucle while true do

La dernière partie :

while true do
    makePart()
    task.wait(1)
end

signifie : pour toujours, on crée un bloc, on attend 1 seconde, on recommence. C’est ce qui donne l’effet de “pluie” de blocs.

QCM – As-tu bien compris ce script Roblox ?

Coche une réponse par question, puis clique sur “Vérifier mes réponses”.

  1. 1. Que fait Instance.new("Part") ?


  2. 2. Pourquoi met-on ground.Anchored = true pour le sol ?


  3. 3. À quoi sert la variable count dans ce script ?


  4. 4. Que se passe-t-il dans la fonction passée à part.Touched:Connect(function(hit) ... end) ?


  5. 5. Que signifie la boucle while true do ... end dans ce script ?


Idées d’exercices / variantes

  • Niveau 1 : changer la taille des blocs, leur couleur, la fréquence de spawn.
  • Niveau 2 : faire apparaître les blocs seulement au-dessus d’une zone précise.
  • Niveau 3 : ajouter un compteur de “blocs évités” ou “blocs détruits”.
  • Niveau avancé : créer plusieurs types de blocs : certains ralentissent le joueur, d’autres le repoussent, etc.

Commentaires

Posts les plus consultés de ce blog

Basthon.fr

mBot2 - programmation mBlock/python

Mario Kart 2D