Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Le défi des blocs

Tu vas créer un petit jeu Roblox dans lequel plusieurs blocs sont placés dans un dossier.

Chaque bloc possède une couleur et peut réagir lorsque le joueur clique dessus.

Au fur et à mesure du tutoriel, tu vas apprendre à :

  • récupérer un objet dans Roblox ;
  • parcourir plusieurs objets ;
  • utiliser des variables ;
  • utiliser des conditions ;
  • réagir à un événement ;
  • modifier un objet ;
  • déplacer un objet ;
  • utiliser un Vector3 ;
  • créer une animation avec TweenService.

Le jeu commencera très simplement, puis tu vas progressivement le transformer.

La règle du jeu

Au départ, il y a trois blocs :

          PART01       PART02       PART03
           ROUGE        VERT         BLEU
             ↓            ↓            ↓
          [    ]       [    ]       [    ]

Le joueur doit cliquer sur les blocs pour les faire bouger.

Mais attention : c’est toi, le programmeur, qui vas décider de leurs règles !

Étape 1 : Comprendre le jeu avant de coder

But

Avant d’écrire une seule ligne de code, observe le jeu.

Tu dois identifier :

  • les objets ;
  • leurs noms ;
  • leurs propriétés ;
  • les actions que le joueur pourra effectuer.

Concepts clés

  • Objet
  • Propriété

Explications

Dans Roblox, presque tout ce que tu vois est un objet.

Une Part est un objet.

Elle possède des propriétés :

Nom
Couleur
Position
Taille
Anchored
...

On peut comparer un objet Roblox à une boîte qui contient des informations.

Par exemple :

Part01
 ├── Name = "Part01"
 ├── Color = rouge
 ├── Size = ...
 ├── Position = ...
 └── Anchored = true

Le programme pourra modifier ces informations.

À toi de jouer !

Ouvre Roblox Studio.

Dans Workspace, crée un dossier nommé :

FolderTest

À l’intérieur, crée trois Part :

FolderTest
│
├── Part01
├── Part02
└── Part03

Place-les à différents endroits dans la scène.

Test

Lance le jeu et vérifie que tu vois bien les trois blocs.

Questions

1. Une Part est-elle un objet Roblox ?

  • a) Oui
  • b) Non

2. Où se trouvent les trois Parts ?

  • a) Dans ServerStorage
  • b) Dans ReplicatedStorage
  • c) Dans Workspace

3. À quoi sert FolderTest ?

a) À ranger les Parts
b) À déplacer les Parts
c) À créer un joueur

Documentation Roblox

Roblox Creator Documentation – Instances

Roblox Creator Documentation – Folder

Roblox Creator Documentation – ClickDetector


Étape 3 : Lire un Folder

But

Tu vas apprendre à récupérer un objet et à utiliser ses propriétés.

Concepts clés

  • Variable
  • WaitForChild()

Explications

Une variable est comme une boîte portant une étiquette.

Nous allons créer une boîte appelée :

folderTest

et y ranger notre dossier Roblox.

Code Lua

Crée un Script dans ServerScriptService.

-- Récupère le dossier FolderKilyan dans Workspace
local folderTest = workspace:WaitForChild("FolderTest")

-- Affiche le nom et le type de l'objet
print("Folder test :", folderTest.Name, folderTest.ClassName)

Que fait le programme ?

Cette ligne :

local folderTest = workspace:WaitForChild("FolderTest")

signifie :

« Cherche FolderTest dans Workspace et place-le dans la variable folderTest. »

Puis :

folderTest.Name

récupère son nom.

Et :

folderTest.ClassName

récupère son type.

À toi de jouer !

Lance le jeu.

Regarde la fenêtre Output (Sortie)

Tu devrais voir quelque chose comme :

Folder test : FolderTest Folder

Modification

Remplace :

print("Folder test :", folderTest.Name, folderTest.ClassName)

par :

print("Mon dossier s'appelle :", folderTest.Name)

Observe le résultat.

Questions

1. Que contient la variable folderTest ?

  • a) Une Part
  • b) Un folder nommé FolderTest
  • c) Le joueur

2. À quoi sert local ?

a) À créer une variable
b) À créer une Part
c) À détecter un clic

Documentation Roblox

Roblox Creator Documentation – WaitForChild


Étape 4 : Lire toutes les Parts du Folder

But

Jusqu’à maintenant, nous savons récupérer un dossier (Folder).

Maintenant, nous voulons parcourir tous les objets qu’il contient.

Concepts clés

  • Boucle for
  • GetChildren()

Explications

Imagine que le programme ouvre la boîte FolderTest et regarde chaque objet l’un après l’autre.

FolderTest
     ↓
  Part01
     ↓
  Part02
     ↓
  Part03

C’est exactement le rôle de la boucle for.

Code Lua

local folderTest = workspace:WaitForChild("FolderTest")

-- Parcourt tous les objets directement contenus dans le Folder
for i, part in ipairs(folderTest:GetChildren()) do
	
	-- Affiche le nom et le type de chaque objet
	print("Part :", part.Name, part.ClassName)
	
end

Explication

Cette partie :

folderTest:GetChildren()

demande :

« Donne-moi tous les enfants de FolderTest. »

La boucle :

for i, part in ipairs(...)

prend ensuite chaque objet un par un.

part représente l’objet actuellement étudié.

À toi de jouer !

Lance le jeu.

Tu dois obtenir :

Part : Part01 Part
Part : Part02 Part
Part : Part03 Part

Expérience

Ajoute une quatrième Part :

Part04

Sans modifier le script.

Relance le jeu.

Que se passe-t-il ?

Le programme doit automatiquement détecter Part04.

C’est la puissance des boucles !

Questions

1. Combien de fois la boucle s’exécute-t-elle avec 3 Parts ?

  • a) 1
  • b) 2
  • c) 3

2. Que contient la variable part pendant la boucle ?

  • a) Le joueur
  • b) L’objet actuellement parcouru
  • c) Le Folder

Documentation Roblox

Roblox Creator Documentation – GetChildren

Roblox Creator Documentation – Lua for loops


Étape 5 : Vérifier que l’objet est bien une Part

But

Tous les objets d’un Folder ne sont pas forcément des Parts.

Nous allons apprendre à vérifier le type d’un objet avant de le modifier.

Concept clé

  • Condition if

Code Lua

local folderTest = workspace:WaitForChild("FolderTest")

for _, part in ipairs(folderTest:GetChildren()) do
	
	-- Vérifie si l'objet est bien une pièce physique
	if part:IsA("BasePart") then
		
		print(part.Name, part.ClassName)
		
		-- Change la couleur de la Part en rouge
		part.Color = Color3.fromRGB(255, 0, 0)
		
	end
	
end

Explications

La condition :

if part:IsA("BasePart") then

signifie :

« Est-ce que cet objet est une Part physique ? »

Si la réponse est oui, le programme exécute le code entre :

then

et

end

À toi de jouer !

Ajoute un objet différent dans le Folder, par exemple un Model.

Lance le jeu.

Le programme ne devrait pas essayer de lui appliquer une couleur.

Modification

Change :

Color3.fromRGB(255, 0, 0)

par :

Color3.fromRGB(0, 255, 0)

Que se passe-t-il ?

Questions

1. À quoi sert if ?

  • a) À répéter
  • b) À poser une question au programme
  • c) À créer une variable

2. Que vérifie IsA() ?

  • a) Le nom
  • b) La couleur
  • c) Le type d’objet

Documentation Roblox

Roblox Creator Documentation – IsA


Étape 6 : Donner une couleur différente à chaque Part

But

Tu vas maintenant utiliser plusieurs conditions.

Concepts clés

  • if
  • elseif
  • else

Code Lua

local folderTest = workspace:WaitForChild("FolderTest")

for _, part in ipairs(folderTest:GetChildren()) do
	
	-- Vérifie que l'objet est bien une Part
	if part:IsA("BasePart") then
		
		-- Part01 devient rouge
		if part.Name == "Part01" then
			part.Color = Color3.fromRGB(255, 0, 0)
		
		-- Part02 devient verte
		elseif part.Name == "Part02" then
			part.Color = Color3.fromRGB(0, 255, 0)
		
		-- Toutes les autres Parts deviennent bleues
		else
			part.Color = Color3.fromRGB(0, 0, 255)
		end
		
	end
end

Explications

Le programme pose plusieurs questions :

Est-ce Part01 ?
     ↓
    oui → rouge

    non
     ↓
Est-ce Part02 ?
     ↓
    oui → vert

    non
     ↓
    bleu

Le else signifie :

« Si aucune des conditions précédentes n’est vraie. »

À toi de jouer !

Lance le jeu.

Tu dois obtenir :

Part01 → ROUGE

Part02 → VERT

Part03 → BLEU

Expérience

Ajoute :

Part04
Part05

Elles doivent automatiquement devenir bleues.

Puis crée une condition pour Part04.

Quelle couleur veux-tu lui donner ?

Questions

Si part.Name vaut "Part01", quelle condition est vraie ?

  • a) part.Name == "Part02"
  • b) part.Name == "Part01"
  • c) part.Name == "Part03"

Documentation Roblox

Roblox Creator Documentation – Conditional statements


Étape 7 : Réagir au clic du joueur

But

Jusqu’à maintenant, le programme s’exécute automatiquement.

Nous allons maintenant attendre une action du joueur.

Concepts clés

  • Événement
  • Fonction

Explications

Un événement signifie :

« Quelque chose vient de se produire. »

Par exemple :

Le joueur clique
       ↓
événement MouseClick
       ↓
le programme réagit

Nous allons utiliser le ClickDetector.

Rajoute un ClickDetector à chaque part

Code Lua

local folderTest = workspace:WaitForChild("FolderKTest")

for _, part in ipairs(folderTest:GetChildren()) do
	
	if part:IsA("BasePart") then
		
		-- Recherche le ClickDetector placé dans la Part
		local clickDetector = part:FindFirstChildOfClass("ClickDetector")
		
		if clickDetector then
			
			-- Attend que le joueur clique sur la Part
			clickDetector.MouseClick:Connect(function(player)
				
				-- Affiche le nom du joueur et de la Part
				print(player.Name .. " a cliqué sur " .. part.Name)
				
			end)
		end
	end
end

Explication de function

Cette partie :

function(player)

crée une petite fonction.

Elle sera exécutée plus tard, lorsque le joueur cliquera.

C’est comme dire :

« Quand le clic arrivera, fais ce qui se trouve dans cette fonction. »

À toi de jouer !

Lance le jeu.

Clique sur les Parts.

Dans Output, tu dois voir :

Patrick a cliqué sur Part01
Patrick a cliqué sur Part02

Le nom dépend évidemment du joueur.

Modification

Ajoute :

print("Bravo !")

dans la fonction.

Question

Quand la fonction est-elle exécutée ?

  • a) Au lancement du jeu
  • b) Quand le joueur clique
  • c) Quand le joueur quitte

Documentation Roblox

Roblox Creator Documentation – Events

Roblox Creator Documentation – ClickDetector.MouseClick


Étape 8 : Faire bouger une Part avec un vecteur

But

Tu vas maintenant faire agir la Part lorsqu’elle est cliquée.

C’est ici que nous faisons le lien avec les mathématiques.

Concepts clés

  • Vector3
  • Vitesse

Explications

Un Vector3 contient trois valeurs :

X
Y
Z

Par exemple :

Vector3.new(50, 0, 0)

signifie :

X = 50
Y = 0
Z = 0

On demande donc à la Part de se déplacer selon l’axe X.

Code Lua

local folderTest = workspace:WaitForChild("FolderTest")

for _, part in ipairs(folderTest:GetChildren()) do
	
	if part:IsA("BasePart") then
		
		-- Recherche le ClickDetector
		local clickDetector = part:FindFirstChildOfClass("ClickDetector")
		
		if clickDetector then
			
			-- Action réalisée lorsque le joueur clique
			clickDetector.MouseClick:Connect(function(player)
				
				print(player.Name .. " a cliqué sur " .. part.Name)
				
				-- Autorise la Part à être déplacée par la physique
				part.Anchored = false
				
				-- Crée un vecteur de vitesse
				local velocityVector = Vector3.new(50, 0, 0)
				
				-- Applique le vecteur à la Part
				part.AssemblyLinearVelocity = velocityVector
				
			end)
		end
	end
end

Que représente le vecteur ?

Vector3.new(50, 0, 0)

On peut le représenter mathématiquement :v=(50;0;0)\vec{v}=(50;0;0)

La Part part dans la direction positive de X.

À toi de jouer !

Clique sur une Part.

Elle doit partir vers la droite.

Expériences

Essaie successivement :

Vector3.new(-50, 0, 0)

Puis :

Vector3.new(0, 50, 0)

Puis :

Vector3.new(0, 0, 50)

Observe les directions.

Puis essaie :

Vector3.new(30, 0, 40)

Que se passe-t-il ?

Tu viens de créer un déplacement oblique.

Question

Que signifie :

Vector3.new(0, 50, 0)
  • a) Aller vers X
  • b) Aller vers Y
  • c) Aller vers Z

Pour aller plus loin

Demande-toi :

Pourquoi Vector3 est-il intéressant pour représenter un vecteur mathématique ?

Tu peux maintenant commencer à introduire :

Vecteur mathématique
        ↓
Direction
Sens
Longueur

        ↓

Vector3 Roblox
(X, Y, Z)

Documentation Roblox

Roblox Creator Documentation – Vector3

Roblox Creator Documentation – AssemblyLinearVelocity


Étape 9 : Faire monter la Part avec TweenService

But

Jusqu’à maintenant, la Part était lancée avec une vitesse.

Maintenant, nous allons créer une animation contrôlée.

Concepts clés

  • Service
  • Tween

Explications

TweenService permet de modifier progressivement une propriété.

Par exemple :

Position initiale
       ↓
       ↓
       ↓
Position finale

Au lieu de déplacer brutalement la Part, Roblox crée une animation.

Code Lua

local folderTest = workspace:WaitForChild("FolderKilyan")

-- Récupère le service qui permet de créer des animations
local tweenService = game:GetService("TweenService")

-- Définit la durée et le type de l'animation
local tweenInfo = TweenInfo.new(
	1,
	Enum.EasingStyle.Linear,
	Enum.EasingDirection.Out,
	0,
	false,
	0
)

for _, part in ipairs(folderTest:GetChildren()) do
	
	if part:IsA("BasePart") then
		
		-- Recherche le ClickDetector
		local clickDetector = part:FindFirstChildOfClass("ClickDetector")
		
		if clickDetector then
			
			clickDetector.MouseClick:Connect(function(player)
				
				print(player.Name .. " a cliqué sur " .. part.Name)
				
				-- Vecteur de déplacement
				local moveVector = CFrame.new(0, 10, 0)
				
				-- Création de l'animation
				local tween = tweenService:Create(
					part,
					tweenInfo,
					{
						CFrame = part.CFrame * moveVector
					}
				)
				
				-- Lance l'animation
				tween:Play()
				
			end)
		end
	end
end

Que signifie le déplacement ?

CFrame.new(0, 10, 0)

correspond à :

X = 0
Y = 10
Z = 0

La Part monte donc de 10 studs.

À toi de jouer !

Clique sur une Part.

Elle doit monter progressivement.

Modification 1

Essaie :

CFrame.new(10, 0, 0)

La Part se déplace horizontalement.

Modification 2

Essaie :

CFrame.new(10, 10, 0)

La Part se déplace à la fois :

  • sur X ;
  • sur Y.

Tu viens de construire un déplacement composé de deux directions.

Question

Quelle instruction démarre réellement l’animation ?

  • a) tweenInfo
  • b) tween:Play()
  • c) CFrame.new()

Documentation Roblox

Roblox Creator Documentation – TweenService

Roblox Creator Documentation – TweenInfo


Étape 10 : Construire la règle du jeu

Nous avons maintenant suffisamment de programmation pour créer une vraie règle.

But

Tu vas combiner plusieurs concepts.

Règle proposée

Chaque couleur correspond à une action :

ROUGE → se déplace à droite

VERT → monte

BLEU → se déplace en diagonale

Code

local folderTest = workspace:WaitForChild("FolderKilyan")

for _, part in ipairs(folderTest:GetChildren()) do
	
	if part:IsA("BasePart") then
		
		-- Détermine la couleur de la Part
		if part.Name == "Part01" then
			part.Color = Color3.fromRGB(255, 0, 0)
			
		elseif part.Name == "Part02" then
			part.Color = Color3.fromRGB(0, 255, 0)
			
		else
			part.Color = Color3.fromRGB(0, 0, 255)
		end
		
		-- Recherche le ClickDetector
		local clickDetector = part:FindFirstChildOfClass("ClickDetector")
		
		if clickDetector then
			
			clickDetector.MouseClick:Connect(function(player)
				
				print(player.Name .. " a cliqué sur " .. part.Name)
				
				-- Part rouge
				if part.Name == "Part01" then
					
					part.Anchored = false
					part.AssemblyLinearVelocity = Vector3.new(50, 0, 0)
				
				-- Part verte
				elseif part.Name == "Part02" then
					
					part.Anchored = false
					part.AssemblyLinearVelocity = Vector3.new(0, 50, 0)
				
				-- Part bleue
				else
					
					part.Anchored = false
					part.AssemblyLinearVelocity = Vector3.new(30, 0, 40)
					
				end
				
			end)
		end
	end
end

Le jeu possède maintenant une règle

                JOUEUR
                   |
                 clique
                   ↓
              Quelle Part ?
              /     |     \
          ROUGE    VERT    BLEU
            ↓        ↓       ↓
          → X       ↑ Y    ↗ X+Z

Étape 11 : Défi mathématique — prédire le déplacement

Maintenant, c’est à ton tour de réfléchir avant d’exécuter le programme.

Le code indique :

local moveVector = Vector3.new(20, 0, 30)

Demande-toi :

Dans quelle direction la Part va-t-elle partir ?

Dessine le vecteur sur une feuille.

Puis teste dans Roblox.

Défi 1

Quel vecteur faut-il utiliser pour aller :

10 à droite et 20 vers l’avant ?

Réponse :

Vector3.new(10, 0, 20)

Défi 2

Quel vecteur faut-il utiliser pour aller :

20 à gauche ?

Vector3.new(-20, 0, 0)

Défi 3

Quel vecteur permet de monter de 15 studs ?

Vector3.new(0, 15, 0)

Défi 4

Construis un déplacement :

X = -20
Y = 10
Z = 30

Solution :

Vector3.new(-20, 10, 30)

Tu viens de manipuler un vecteur dans l’espace.


Étape 12 : Le défi final

Maintenant, tu deviens le programmeur du jeu.

Tu dois créer tes propres règles.

Défi 1 : Ajouter une quatrième Part

Ajoute :

Part04

Quelle action doit-elle réaliser ?

Par exemple :

Vector3.new(-50, 20, 0)

Défi 2 : Ajouter une nouvelle couleur

Modifie :

elseif part.Name == "Part02" then

pour créer une nouvelle règle.

Défi 3 : Créer une zone d’arrivée

Construis une zone appelée :

Goal

Le joueur doit réussir à faire arriver une Part dans cette zone.

Tu vas alors pouvoir introduire une nouvelle notion :

Position
+
Distance
+
Collision
+
Condition de victoire

Script final

Voici une version propre regroupant les principaux éléments étudiés :

--==================================================
-- LE DEFI DES BLOCS
--==================================================

-- Récupère le dossier qui contient toutes les Parts
local folderTest = workspace:WaitForChild("FolderKilyan")


--==================================================
-- PARCOURS DES PARTS
--==================================================

for _, part in ipairs(folderTest:GetChildren()) do
	
	-- Vérifie que l'objet est bien une pièce physique
	if part:IsA("BasePart") then
		
		
		--==================================================
		-- ATTRIBUTION DES COULEURS
		--==================================================
		
		if part.Name == "Part01" then
			
			part.Color = Color3.fromRGB(255, 0, 0)
			
		elseif part.Name == "Part02" then
			
			part.Color = Color3.fromRGB(0, 255, 0)
			
		else
			
			part.Color = Color3.fromRGB(0, 0, 255)
			
		end
		
		
		--==================================================
		-- RECHERCHE DU CLICKDETECTOR
		--==================================================
		
		local clickDetector = part:FindFirstChildOfClass("ClickDetector")
		
		
		-- Vérifie qu'un ClickDetector existe
		if clickDetector then
			
			
			--==================================================
			-- EVENEMENT : LE JOUEUR CLIQUE
			--==================================================
			
			clickDetector.MouseClick:Connect(function(player)
				
				print(player.Name .. " a cliqué sur " .. part.Name)
				
				
				--==================================================
				-- REGLES DU JEU
				--==================================================
				
				if part.Name == "Part01" then
					
					-- Part01 part vers la droite
					part.Anchored = false
					part.AssemblyLinearVelocity =
						Vector3.new(50, 0, 0)
					
					
				elseif part.Name == "Part02" then
					
					-- Part02 part vers le haut
					part.Anchored = false
					part.AssemblyLinearVelocity =
						Vector3.new(0, 50, 0)
					
					
				else
					
					-- Les autres Parts partent en diagonale
					part.Anchored = false
					part.AssemblyLinearVelocity =
						Vector3.new(30, 0, 40)
					
				end
				
			end)
		end
	end
end

Ce que tu as appris

À la fin du tutoriel, tu as utilisé de nombreuses notions fondamentales :

NotionExemple dans le jeu
VariablefolderTest
Objetpart
Propriétépart.Color
Conditionif part.Name == ...
elseautre Part
Bouclefor _, part
Fonctionfunction(player)
ÉvénementMouseClick
ServiceGetService()
Vector3Vector3.new(50,0,0)
PhysiqueAssemblyLinearVelocity
AnimationTweenService
OrganisationFolder

Et surtout, tu as découvert une idée importante :

PROGRAMME

        ↓

OBSERVER
        ↓
DÉCIDER
        ↓
AGIR

C’est cette structure qui permet de transformer progressivement quelques lignes de Lua en un véritable jeu.


Pour aller beaucoup plus loin

Maintenant, mets-toi à la place du joueur.

Au début, tu ne connais pas le jeu :

« Je clique sur une Part. Que va-t-il se passer ? »

Puis tu deviens joueur expérimenté :

« La Part rouge part dans la direction X. »

Puis programmeur :

« Si je remplace Vector3.new(50,0,0) par Vector3.new(20,0,40), je change la direction du déplacement. »

Puis concepteur de jeu :

« Je vais créer une zone d’arrivée et donner des points lorsque la Part atteint sa cible. »

Tu peux alors faire évoluer le projet avec :

  1. un score ;
  2. des vies ;
  3. plusieurs niveaux ;
  4. des obstacles ;
  5. des zones interdites ;
  6. des portes ;
  7. des téléporteurs ;
  8. des vecteurs à calculer ;
  9. des angles à déterminer ;
  10. un véritable défi de géométrie dans l’espace.

Cela permettrait de faire évoluer le même projet de la sixième à la troisième, en introduisant progressivement programmation, coordonnées, déplacements, vecteurs, angles, distances et géométrie 3D.

Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Courir sinon perdre

Ce script crée un piège basé sur le temps : le joueur doit traverser une zone rapidement, sinon il meurt !

Le script utilise deux parts : part (visible, solide) et hidebox (une zone invisible qui sert à détecter le joueur, comme un capteur).

hidebox.CanCollide = false veut dire que cette zone est traversable : le joueur ne la voit pas et ne se cogne pas dessus, elle sert juste à « sentir » sa présence.

Quand le joueur entre dans la zone (Touched), le script note l’heure exacte grâce à tick() et la stocke dans le tableau lethalDuration, avec le personnage comme « étiquette ».

Quand le joueur sort de la zone (TouchEnded), le script calcule le temps passé dedans : tick() - lethalDuration[character].

Si ce temps est supérieur à DELTATIME (3 secondes), c’est que le joueur a été trop lent à traverser : sa vie est mise à 0 (humanoid.Health = 0), donc il meurt.

Si le joueur traverse en moins de 3 secondes, rien ne se passe : il a réussi l’épreuve !

En résumé : c’est un chronomètre invisible qui punit les joueurs trop lents à traverser une zone, un peu comme dans un jeu de plateforme où il faut courir avant qu’un mur ou un piège ne se referme.

QCM pour collégiens

1. À quoi sert la hidebox dans ce script ?
A. À bloquer physiquement le joueur
B. À détecter le passage du joueur sans être visible ni solide
C. À afficher un message au joueur
D. À téléporter le joueur

2. Que fait tick() dans ce script ?
A. Il compte le nombre de joueurs
B. Il donne l’heure exacte au moment où il est appelé
C. Il déclenche une explosion
D. Il redémarre le script

3. Quand se déclenche TouchEnded ?
A. Quand le joueur entre dans la zone
B. Quand le joueur sort de la zone
C. Quand le joueur meurt
D. Quand le jeu commence

4. Que se passe-t-il si le joueur reste plus de 3 secondes dans la hidebox ?
A. Il gagne des points
B. Il est téléporté au départ
C. Sa vie tombe à 0 et il meurt
D. Rien, il continue de jouer normalement

5. Pourquoi utilise-t-on character comme clé dans le tableau lethalDuration ?
A. Pour donner un nom au joueur
B. Pour retenir l’heure d’entrée de CHAQUE joueur individuellement
C. Pour compter les vies du joueur
D. Pour changer la couleur du personnage

6. Que représente la variable DELTATIME ?
A. La vitesse du joueur
B. Le temps maximum autorisé pour traverser la zone
C. Le nombre de joueurs dans la partie
D. La taille de la hidebox

local part = script.Parent
local hidebox = part:FindFirstChild("Hidebox")

local DELTATIME = 3

part.Anchored = true
part.CanCollide = true
part.CanTouch = true
hidebox.Anchored = true
hidebox.CanCollide = false
hidebox.CanTouch = true

local lethalDuration= {} -- [character] = true pendant le cooldown

hidebox.Touched:Connect(function(plr)
	local character = plr.Parent
	local humanoid = character and character:FindFirstChild("Humanoid")
	if not humanoid  then return end
	
	lethalDuration[character] = tick()

end)

hidebox.TouchEnded:Connect(function(plr)
	local character = plr.Parent
	local humanoid = character and character:FindFirstChild("Humanoid")
	if not humanoid  then return end
	if tick() - lethalDuration[character] > DELTATIME then
		humanoid.Health = 0
	end
	
end)
Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Des obstacles mobiles qui poussent le joueur hors de la plateforme

Tu vas apprendre à créer des obstacles en mouvement qui rendent un parcours plus difficile.

Le principe est simple :

  • le joueur avance sur une plateforme ;
  • des obstacles se déplacent ou tournent en permanence ;
  • lorsqu’ils touchent le joueur, ils peuvent le pousser ;
  • le joueur risque alors de tomber dans le vide et de devoir recommencer.

Ce type de mécanisme est très utilisé dans les jeux d’obstacles (Obby) sur Roblox.

Découvrir TweenService

Pour animer les obstacles, nous utiliserons TweenService.

TweenService permet de modifier progressivement :

  • une position ;
  • une rotation ;
  • une taille ;
  • une couleur ;
  • une transparence.

Au lieu de déplacer brutalement un objet, Roblox crée une animation fluide.

Cela donne des mouvements beaucoup plus agréables à regarder.

Crée un part avec son script :

Saisie ce code dans le script pour un déplacement latéral :

local part = script.Parent

local TweenService = game:GetService("TweenService")

local tweenInfo = TweenInfo.new(
	3,
	Enum.EasingStyle.Linear,
	Enum.EasingDirection.InOut,
	-1,
	true
)	

local tween = TweenService:Create(part, tweenInfo, {CFrame = part.CFrame * CFrame.new(-120, 0, 0)})
tween:Play()

Un exemple de code pour une rotation :

local part = script.Parent

local TweenService = game:GetService("TweenService")

local tweenInfo = TweenInfo.new(
	3,
	Enum.EasingStyle.Linear,
	Enum.EasingDirection.InOut,
	-1,
	true
)	

local tween = TweenService:Create(part, tweenInfo, {CFrame = part.CFrame * CFrame.Angles(0, math.rad(180), 0)})	

tween:Play()

Le TweenService est un outil de Roblox qui permet de créer facilement des animations.

Au lieu de déplacer ou modifier un objet d’un seul coup, TweenService fait la transition progressivement pour obtenir un mouvement fluide.

Par exemple, si tu veux déplacer un bloc d’un côté à l’autre de la plateforme :

  • sans TweenService, le bloc se téléporte instantanément ;
  • avec TweenService, le bloc glisse doucement jusqu’à sa nouvelle position.

Lorsque tu crées une animation avec TweenService, tu dois utiliser un objet appelé TweenInfo.

On peut considérer TweenInfo comme la fiche de réglages de l’animation.

C’est lui qui indique :

  • combien de temps dure l’animation ;
  • comment elle accélère ou ralentit ;
  • combien de fois elle se répète ;
  • si elle fait un aller-retour.

Comprendre les paramètres de TweenInfo

Lorsque tu crées une animation avec TweenService, tu dois utiliser un objet appelé TweenInfo.

On peut considérer TweenInfo comme la fiche de réglages de l’animation.

C’est lui qui indique :

  • combien de temps dure l’animation ;
  • comment elle accélère ou ralentit ;
  • combien de fois elle se répète ;
  • si elle fait un aller-retour.

La durée (Time)

La durée indique combien de temps l’animation va prendre pour atteindre sa destination.

Par exemple :

0,5 seconde
1 seconde
3 secondes
5 secondes

Effet visuel

Durée courte :

■ ---------> ■
Très rapide

Durée longue :

■ ---------> ■
Déplacement lent

2. Le style d’animation (EasingStyle)

Le style détermine la manière dont l’objet se déplace pendant l’animation.

Ce n’est pas seulement le point de départ et d’arrivée qui comptent, mais aussi la façon dont il se déplace entre les deux.

Linear

Vitesse constante.

→ → → → →

L’objet avance toujours à la même vitesse.

Quad

Démarre doucement puis accélère.

→  →   →    →

Très utilisé pour les portes, les plateformes et les effets.

Bounce

L’objet rebondit à la fin.



Comme une balle qui touche le sol.

Elastic

L’objet dépasse légèrement sa cible puis revient.

----->|
|<--
|

Comme un élastique.

Sine

Mouvement très doux et naturel.

Souvent utilisé pour les interfaces graphiques.

3. La direction du mouvement (EasingDirection)

La direction indique à quel moment l’accélération ou le ralentissement se produit.

In

L’animation commence lentement puis accélère.

→   →    →     →

Comme une voiture qui démarre.

Out

L’animation démarre vite puis ralentit.

→     →    →   →

Comme une voiture qui freine.

InOut

L’animation :

  • démarre doucement ;
  • accélère ;
  • ralentit avant l’arrivée.
→  →   →→→   →  →

C’est souvent le résultat le plus naturel.

4. Nombre de répétitions (RepeatCount)

Ce paramètre indique combien de fois l’animation recommence.

Valeur 0

Départ → Arrivée

Une seule fois.

Valeur 3

Départ → Arrivée
Départ → Arrivée
Départ → Arrivée
Départ → Arrivée

L’animation joue 4 fois au total :

  • la première exécution ;
  • puis 3 répétitions.

Valeur -1

L’animation ne s’arrête jamais.

Très utile pour :

  • les obstacles ;
  • les plateformes mobiles ;
  • les ventilateurs.

5. Inverser l’animation (Reverses)

Ce paramètre indique si l’objet doit revenir à son point de départ après avoir atteint sa destination.

false

A ------> B

L’objet reste à l’arrivée.

true

A ------> B
A <------ B

L’objet effectue un aller-retour.

Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Faire descendre une image avec TweenService

Dans ce tutoriel, tu vas apprendre à déplacer une image vers le bas sur une interface du joueur en utilisant TweenService dans Roblox Studio.

Les animations sont très utiles pour rendre un jeu plus agréable et plus vivant. Par exemple, tu peux faire apparaître un panneau d’information, faire glisser un bouton ou afficher une récompense avec une animation fluide.

Pour réaliser cela, nous allons utiliser un LocalScript et le service TweenService

Dans Roblox, les éléments affichés à l’écran du joueur sont appelés des interfaces graphiques ou GUI.

Une interface est généralement composée de plusieurs objets :

  • ScreenGui : le conteneur principal affiché à l’écran.
  • Frame : une fenêtre ou une zone de l’interface.
  • ImageLabel : un objet qui affiche une image.
  • TextLabel : un objet qui affiche du texte.
  • Button : un bouton sur lequel le joueur peut cliquer.

Exemple :

Pour positionner ta fenêtre (Frame) au milieu de l’écran :

Crée un LocalScript

Les interfaces appartiennent à chaque joueur.

Si tu modifies l’interface avec un script serveur classique (Script), cela peut entraîner des problèmes car le serveur gère tous les joueurs.

Un LocalScript s’exécute uniquement sur l’ordinateur du joueur :

  • il est plus rapide ;
  • il permet de gérer l’interface personnelle du joueur ;
  • il évite d’envoyer des informations inutiles au serveur.

C’est donc le meilleur choix pour animer une interface graphique.

Tu pourrais déplacer une image en modifiant sa position directement :

image.Position = UDim2.new(0,0,0.5,0)

Mais l’image apparaîtrait immédiatement à sa nouvelle position.

Avec TweenService, Roblox crée automatiquement une animation fluide entre la position de départ et la position d’arrivée.

Les avantages sont nombreux :

  • animation plus agréable ;
  • code plus simple ;
  • contrôle de la durée ;
  • possibilité d’ajouter différents effets de mouvement.
-- récupérer le service TweenService
local TweenService = game:GetService("TweenService")
-- récupérer l' du joueur
local screen = script.Parent
-- récupérer l'image
local image = screen.Frame.ImageLabel
-- créer l'animation
local tweenInfo = TweenInfo.new(3, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true)
-- définir l'objectif de l'animation
local objectif = {Position = UDim2.new(image.Position.X.Scale,0 , 0.8, 0)}
-- lancer l'animation
local tween = TweenService:Create(image, tweenInfo, objectif)
tween:Play()

Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Découverte mon premier jeu ROBLOX

Plusieurs exemples de scripts LUA pour changer la couleur d’un part, mourir à petit feu, devenir tout petit, glisser, voler, se téléporter, grandir, sauter plus, courir plus, crée un menu, crée une arme fatale.

Crée un Folder à ton nom pour mettre toutes tes créations :


Changer la couleur d’un part

local part = script.Parent

part.Touched:Connect(function(hit)
	part.BrickColor = BrickColor.random()
	part.Material = Enum.Material.Neon	
end)

Un part mortel :

local part = script.Parent
part.Touched:Connect(function(hit)
	-- Récupération du joueur
	local character = hit.Parent
	local humanoid  = character and character:FindFirstChildOfClass("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end
	humanoid:TakeDamage(10)
end)

Rendre tout petit le joueur :

local part = script.Parent

part.Touched:Connect(function(hit)
	-- Récupération du joueur
	local character = hit.Parent
	local humanoid  = character and character:FindFirstChildOfClass("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end

	humanoid.BodyHeightScale.Value = 0.4
	humanoid.BodyWidthScale.Value = 0.4
	humanoid.BodyDepthScale.Value = 0.4
	humanoid.HeadScale.Value = 0.4

end)

Faire glisser un part avec un clickDetector :

local part = script.Parent

local clickDetector = part.ClickDetector

clickDetector.MouseClick:Connect(function(player)
	part.Anchored = false
	part.AssemblyLinearVelocity = Vector3.new(0, 0, 50)
end)

Part pour voler avec un clickDetector :

local AntiGravity = require(game.ReplicatedStorage.AntiGravity)
local part = script.Parent 

local clickDetector = part.ClickDetector
clickDetector.MouseClick:Connect(function(player)
	part.Anchored = false
	AntiGravity.Start(part)
	part.AssemblyLinearVelocity = Vector3.new(0, 10, 10) 
end)

Téléportation d’un point A à un point B :

Voici l’explication du code, ligne par ligne :

Les variables de départ

local teleports = script.Parent
local teleportA = teleports.TeleportA
local teleportB = teleports.TeleportB

On récupère deux objets dans le jeu Roblox : la plateforme A (celle sur laquelle on va marcher) et la plateforme B (celle où on va arriver). Ces deux plateformes sont des enfants du script dans l’arbre du jeu.

L’événement Touched

teleportA.Touched:Connect(function(hit)

Touched est un événement Roblox : il se déclenche automatiquement dès que quelque chose touche la plateforme A. Le paramètre hit contient la pièce (la partie du corps) qui l’a touchée.

La vérification du joueur

local character = hit.Parent
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if not humanoid or humanoid.Health <= 0 then return end

On remonte d’un niveau pour trouver le personnage entier (hit.Parent), puis on cherche s’il contient un Humanoid (ce qui prouve que c’est bien un joueur, pas un mur ou une balle). Si rien de valide n’est trouvé, ou si le joueur est mort (Health <= 0), on arrête tout avec return.

La téléportation

local offset = Vector3.new(0, 2, 0)
character:PivotTo(CFrame.new(teleportB.Position + offset))

Vector3.new(0, 2, 0) crée un décalage de 2 unités vers le haut pour que le joueur atterrisse au-dessus de la plateforme B et pas à l’intérieur. PivotTo est la fonction qui déplace instantanément tout le personnage à une nouvelle position — c’est ça la téléportation !

Le code complet de la téléportation

-- Configuration
local teleports = script.Parent
local teleportA = teleports.TeleportA
local teleportB = teleports.TeleportB

teleportA.Touched:Connect(function(hit)
	-- Récupération du joueur
	local character = hit.Parent
	local humanoid  = character and character:FindFirstChildOfClass("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end
	
	-- Décalage légert vers le haut pour poser le joueur sur la plateforme
	local offset = Vector3.new(0, 2, 0)
	character:PivotTo(CFrame.new(teleportB.Position + offset))

end)

Grandir, Sauter, Courir plus vite :

local UserInputService = game:GetService("UserInputService")

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local humanoid = player.Character and player.Character:FindFirstChildOfClass("Humanoid")

local function onKeyPress(input, gameProcessed)
	if not humanoid then return end

	if input.KeyCode == Enum.KeyCode.F and not gameProcessed then
		humanoid.JumpHeight += 8
	end

	if input.KeyCode == Enum.KeyCode.G and not gameProcessed then
		humanoid.JumpHeight -= 8
	end

	print(input.KeyCode)
	if input.KeyCode == Enum.KeyCode.X and not gameProcessed then
		humanoid.WalkSpeed += 10
	end

	if input.KeyCode == Enum.KeyCode.Z and not gameProcessed then
		humanoid.WalkSpeed -= 10
	end

end

-- Connecter la fonction à l'événement InputBegan
UserInputService.InputBegan:Connect(onKeyPress)print("Hello world!")

Touches du clavier :

  • F sauter plus haut
  • G sauter moins haut
  • X courir plus vite
  • W courir moins vite
  • A grandir
  • E plus petit

Menu disponible pour le joueur :

local screenGui = script.Parent
local open = screenGui.OpenButton
local screen = screenGui.Screen
local close = screen.CloseButton
local scaleUpPlayer = screen.ScaleUpPlayerButton
local scaleDownPlayer = screen.ScaleDownPlayerButton
local runSlowerPlayer = screen.RunSlowerPlayerButton
local runFasterPlayer = screen.RunFasterPlayerButton
local jumpUpPlayer = screen.JumpUpPlayerButton
local jumpDownPlayer = screen.JumpDownPlayerButton

local replicatedStorage = game:GetService("ReplicatedStorage")
local runScalePlayer = replicatedStorage:WaitForChild("RunScalePlayer")

local runScalePlayer = replicatedStorage:WaitForChild("RunScalePlayer")
local HumanoidFinder = require(replicatedStorage.HumanoidFinder)
local StarterPlayer = game:GetService("StarterPlayer")

local humanoid, character = HumanoidFinder.GetLocal()

screen.Visible = false

open.MouseButton1Click:Connect(function()
	screen.Visible = not screen.Visible
	open.Visible = not open.Visible
end)

close.MouseButton1Click:Connect(function()
	screen.Visible = not screen.Visible
	open.Visible = not open.Visible	
end)

scaleUpPlayer.MouseButton1Click:Connect(function()
	runScalePlayer:FireServer(0.5)
end)

scaleDownPlayer.MouseButton1Click:Connect(function()
	runScalePlayer:FireServer(-0.5)
end)
		
runSlowerPlayer.MouseButton1Click:Connect(function()
	humanoid.WalkSpeed -= 10
end)

runFasterPlayer.MouseButton1Click:Connect(function()
	humanoid.WalkSpeed += 10
end)

jumpUpPlayer.MouseButton1Click:Connect(function()
	humanoid.JumpHeight += 8
end)

jumpDownPlayer.MouseButton1Click:Connect(function()
	humanoid.JumpHeight -= 8
end)

Créer une arme fatale :

Créer un objet Tool puis un part renommer Handle :

Pour réduire à l’impuissance vos adversaires :

local part = script.Parent

part.Touched:Connect(function(hit)
	if not hit then return end 
	-- Récupération du joueur
	local character = hit.Parent
	local humanoid  = character and character:FindFirstChildOfClass("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end

	humanoid:TakeDamage(10)

end)
Catégories
ROBLOX ROBLOX-NIVEAU01

ROBLOX suggestions

Des suggestions pour débuter en ROBLOX LUA :

  • créer un commentaire dans ton code,
  • rechercher une ressource,
  • détecter un click d’une souris, déplacer un part,
  • pousser un objet,
  • synchroniser avec le moteur ROBLOX,
  • tester l’appartenance d’un objet à une classe,
  • tester si la collision vient d’un joueur,
  • modifier la santé du joueur,
  • modifier vitesse du joueur,
  • détecter une collision du joueur avec un objet Roblox,
  • détecter une fin de collision avec le joueur,
  • réduire la santé du joueur,
  • comment coder un ClickDetector,
  • comment coder un Prompt,
  • créé un système de message RemoteEvent,
  • ajouter dans l’inventaire,
  • créer un tableau de score,
  • comment intercepter une erreur,
  • rotation d’un objet,
  • intercepter une touche de clavier

Commentaire d’une ligne :

--print("instruction en commentaire")

Commentaire de plusieurs instructions :

--[[
print("instruction en commentaire")
print("instruction en commentaire")
--]]

Recherche d’une ressource dans un script :

-- recherche d'un objet sous la même arborescence que le script
local btOpenMenu = script.Parent.OpenButton

-- recherche d'un part sous workspace
local myPart = workspace.part

local myPart = workspace:WaitForChild("part")

-- recherche de plusieurs part sous un folder
local myParts = workspace.Folder:GetChildren()

-- recherche des joueurs et du joueur local dans un localScript
local players = game:GetService("Players")
local player = players.LocalPlayer

-- récupération de tous les parts dans le workspace
for _, part in ipairs(myParts ) do

end

Comment détecter un click de la souris sur un bouton :

btOpenMenu.MouseButton1Click:Connect(function()

end)

Comment déplacer un objet Roblox :

myPart.Position += Vector3.new(10,0,0)

Déplacer un objet x fois :

for i = 1, 50 do
   maPart.Position += Vector3.new(5,0,0)
   wait(1)
end

Déplacer un objet Roblox tout le temps :

while true do
    maPart.Position += Vector3.new(0.05,0,0)
    wait(0.01)
end

Déplacer un objet jusqu’à une position :

while maPart.Position.X<60 do
   maPart.Position += Vector3.new(5,0,0)
   wait(0.01)
end

Pouser un objet :

part.AssemblyLinearVelocity = Vector3.new(0, 0, 100)

Synchroniser le déplacement avec le moteur de Roblox :

game:GetService("RunService").Heartbeat:Connect(function()
    maPart.Position += Vector3.new(0.05,0,0)
end)

Comment tester l’appartenance d’un objet à une classe :

if otherPart:IsA("Part") then
	print("Part : ",otherPart.Name)

Comment tester si la collision vient d’un joueur :

part.Touched:Connect(function(hit)
    -- 1. Remonte jusqu'au Model parent (le Character)
    local character = hit:FindFirstAncestorOfClass("Model")
    if not character then return end

    -- 2. Cherche le Humanoid dans le Character
    local humanoid = character:FindFirstChildOfClass("Humanoid")
    if not humanoid or humanoid.Health <= 0 then return end

    -- 3. Retrouve le Player depuis le Character
    local player = game:GetService("Players"):GetPlayerFromCharacter(character)
    if not player then return end

    print("Joueur touché :", player.Name)
end)

Comment modifier la santé du joueur :

local humanoid = otherPart.Parent and otherPart.Parent:FindFirstChild("Humanoid")
if not humanoid then return end

humanoid.Health = 0

Maximum de santé :

humanoid.MaxHealth

Comment modifier vitesse du joueur :

local humanoid = otherPart.Parent and otherPart.Parent:FindFirstChild("Humanoid")
if not humanoid then return end

humanoid.WalkSpeed = 20

Comment détecter une collision du joueur avec un objet Roblox :

maPart.Touched:Connect(function(otherPart)

    local humanoid = otherPart.Parent and otherPart.Parent:FindFirstChild("Humanoid")
    if not humanoid then return end

Comment détecter une fin de collision avec le joueur :

maPart.TouchEnded:Connect(function(otherPart)

    local humanoid = otherPart.Parent and  
                 otherPart.Parent:FindFirstChild("Humanoid")
    if not humanoid then return end

end)

Santé du joueur à 100 au départ du jeu :

print(humanoid.Health)

Réduire la santé du joueur :

humanoid.Health = humanoid.Health – 5
ou
humanoid:TakeDamage((5))

Le joueur meurt quand sa santé est à zéro :

humanoid.Health = 0

Comment coder un ClickDetector sur le part :

local clickDetector = script.Parent.ClickDetector

clickDetector.MouseClick:Connect(function()
print(« touché »)
end)

Comment coder un Prompt :

maPart.ProximityPrompt.Triggered:Connect(function(otherPart)
print(‘activé’)
end)

Créé un système de message RemoteEvent

Sous ReplicatedStorage crée un RemoteEvent

Dans un localScript :

local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")

remoteEvent:FireServer(param1, param2, ...)

Puis dans un script serveur :

local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEvent")

remoteEvent .OnServerEvent:Connect(function(player, param1, param2, ...)

end)

Ajouter dans l’inventaire :

item.Parent = player.Backpack

Créer un tableau de score :

Insérer un script leaderstats sous ServerScriptService :

local players = game:GetService("Players")

players.PlayerAdded:Connect(function(player)

	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player
	-- Exemple de valeurs du tableau
	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
	coins.Value = 0
end)

Puis pour modifier le score dans un script serveur :

local player =
               game:GetService("Players"):
               GetPlayerFromCharacter(otherPart.Parent)
if not player then return end	
	
player:WaitForChild("leaderstats").Coins.Value += 1

Comment intercepter une erreur par exemple sur « jouer un son » :

	local success, err = pcall(function()
		sound:Play()
	end)
	if not success then
		warn("Erreur lors de la lecture du son :", err)
	end

Rotation d’un objet :

local mypart = script.Parent

mypart.Touched:Connect(function(hit)
	mypart:PivotTo(mypart:GetPivot() *
                       CFrame.Angles(math.rad(90), 0, 0))
end)

Intercepter une touche de clavier :

Dans un LocalScript sous StarterPlayer StarterPlayerScripts

local UserInputService = game:GetService("UserInputService")

print("clavier bbb")
-- Connecte l'événement
UserInputService.InputBegan:Connect(function(input, gameProcessed)
	if input.KeyCode ~= Enum.KeyCode.Unknown then
		print("Clavier", input.KeyCode)

		if input.KeyCode == Enum.KeyCode.X and not gameProcessed then
			print("Appui X")
		end

	end

end)
Catégories
ROBLOX ROBLOX-NIVEAU01

Découverte ROBLOX

Connexion ou Inscription sur ROBLOX

Utilise cette icone dans la barre des tâches dans le bas de ton écran pour lancer ROBLOX STUDIO :

Si tu as déjà un compte ROBLOX tu peux saisir ton identifiant :

Si tu n’as pas de compte alors clic sur le lien Vous n’avez pas de compte ? S’inscrire :

Ouvrir un projet ROBLOX

Dans ROBLOX STUDIO choisis d’ouvrir le modèle Baseplate :

Manipulations simples avec la souris.

Tourner la roulette de la souris :

Appuie sur la molette de la souris et fais glisser la souris :

Maintenant clic sur le bouton droit et fais glisser la souris :

Clic sur l’objet sur la fenêtre le « SpawnLocation ». Cet objet matérialise le départ de ton joueur.

Avec les quatre outils suivants qui sont dans ta barre d’outils :

Tu peux :

  • Sélectionner
  • Déplacer
  • Modifier la taille
  • Effectuer une rotation

Essaye de déplacer l’objet :

Sur la partie droite de l’écran, tu retrouves les propriétés de l’objet dont sa position sur les trois axes x, y ,z :

Pour commencer à découvrir les concepts importants pour le développement sur Roblox: tu vas créer un jeu qui lance des projectiles sur des plates-formes flottantes.

Pour l’instant, tu as créé un projet avec le modèle Baseplate, qui comprend deux objets par défaut qui sont importants pour presque toutes les expériences sur la plateforme ROBLOX :

  • Emplacement d’apparition – Un objet SpawnLocation est l’endroit où les personnages des joueurs apparaissent dans l’espace 3D lorsqu’ils rejoignent une expérience, ainsi que l’endroit où ils réapparaissent lorsque leur santé atteint zéro.
  • Plaque de base – Une plaque de base est un sol avec une texture de grille 4×4.

Ce modèle est un excellent point de départ pour créer ta première expérience, car il fournit un monde neutre avec une technologie d’éclairage haute fidélité et un sol que tu peux utiliser pour positionner et orienter des objets 3D.

Tu peux le tester en utilisant l’outil Jouer :

Tu peux manipuler ton joueur avec les touches de clavier de déplacement, la barre d’espace pour sauter, ou lui donner une direction par un clic droit puis un glissé de la souris dans la direction souhaitée.

Manipule ton joueur puis arrête ton jeu :

Création d’un premier jeu

Pour te familiariser avec les objets 3D de ROBLOX, tu vas utiliser un pack d’éléments comprenant les objets 3D suivants qui créent le jeu de base pour ta première expérience :

Dans la boîtes à outil dans la partie gauche de l’écran, tape dans la zone de recherche : catapult :

Tu peux constater la mise en place de trois objets dans ton jeu :

Une catapulte à gauche et deux cibles en haut et à droite.

Sur la partie de droite dans Explorateur, tu retrouves la description des objets :

Pour jouer au jeu, il faut monter sur la catapulte, saisir les balles, viser les cibles puis tirer. Tu remarques que l’escalier pour atteindre la catapulte est à l’opposé du point de départ :

Tu vas utiliser l’outil déplacer pour mettre le point de départ devant l’escalier :

Lance ton jeu pour voir le résultat, tu peux constater que tu es devant l’escalier mais tu lui tournes le dos :

Arrête ton jeu et viens orienter ton joueur face à l’escalier par l’outil Rotation :

Utilise le cercle en vert pour orienter ton joueur face à l’escalier (180°). Dans les propriétés du SpawnLocation, tu retrouves la rotation de 180° :

Monte l’escalier :

Avec le clic gauche de la souris, tu peux diriger la catapulte :

Vas vers les boules, tu peux en appuyant sur la touche E placer les boules dans la catapulte. Mais pour l’instant ce mécanisme ne fonctionne pas :

Tu peux également déclencher par E le lancement mais pour l’instant le mécanisme ne fonctionne pas :

Arrête ton jeu pour le modifier pour permettre son fonctionnement :

Pour l’instant tu as interagi qu’avec des objets du service Workspace de ton modèle de données.

Il est important de garder à l’esprit l’emplacement d’exécution des scripts, sinon vos objets risquent de ne pas se comporter comme vous le souhaitez.

Pour garantir le fonctionnement de la catapulte, tu vas déplacer les objets des dossiers ReplicatedStorage et ServerScriptService dans leurs services de conteneur respectifs de ROBLOX.

ReplicatedStorage contient des objets disponibles à la fois pour le serveur et les différents joueurs connectés, notamment pour suivre le nombre de projectiles lancés par un joueur avant d’afficher l’interface utilisateur.

ServerScriptService contient des ressources liées aux scripts qui sont uniquement destinées à être utilisées par le serveur, pour la logique du jeu : qui positionne les projectiles sur la catapulte, lance des projectiles dans une direction particulière et réinitialise la catapulte à sa position de départ.

Sélectionne tous les objets sous introToStudioCatapult / RelicatedStorage :

Puis par un clic droit demander à couper :

Puis dans Explorateur sélectionne le répertoire ReplicatedStorage:

Puis colle les éléments coupés précédemment :

Tu obtiens ce résultat :

Réalise la même opération avec IntroToStudioCatapult ServerScriptService .

Couper :

Coller :

Lance ton jeu et maintenant tu dois pouvoir lancer les boulets :

Tu peux rapprocher les cibles !!!

Sauvegarde ton jeu dans ton répertoire :

Puis publie ton jeu :