← Tous les guides
Guide 4

Crée ton premier tower defense

Des ennemis marchent le long d’un chemin vers ta base, et une tour tire sur le plus proche.

Gratuit60 minutes · Débutant · Roblox Studio
1
Étape 1 / 8

Prépare le lieu

  1. Ouvre Roblox Studio, clique sur New Experience et choisis le modèle Baseplate.
  2. Dans Explorer, passe la souris sur Workspace, clique sur + et ajoute un Folder. Nomme-le Path.
  3. Ajoute un deuxième Folder à Workspace et nomme-le Enemies. Laisse-le vide. Les ennemis y apparaîtront pendant le jeu.

Plus de détails

  • Le modèle Baseplate se trouve dans la liste des modèles de l’écran d’accueil.
  • Quand tu cliques sur +, écris le mot Folder pour le trouver vite. Renomme un dossier avec F2.
  • Les noms doivent être exactement Path et Enemies, avec une majuscule au début. Les scripts cherchent ces noms.
  • Sur un Mac, utilise la touche Cmd chaque fois que ce guide dit Ctrl.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

2
Étape 2 / 8

Construis le chemin

  1. Ajoute une Part. Mets Size à 6, 1, 6, active Anchored et glisse-la dans le dossier Path. Nomme-la 1.
  2. Duplique-la avec Ctrl+D et éloigne la copie d’environ 30 studs. Nomme-la 2.
  3. Recommence jusqu’à avoir 5 pièces nommées 1, 2, 3, 4 et 5. Place-les pour que le trajet ait quelques virages.
  4. Les ennemis iront de 1 à 2 puis à 3 et ainsi de suite, en ligne droite entre chaque paire.

Plus de détails

  • Pour mettre une pièce dans le dossier, tire son nom dans Explorer sur le nom Path.
  • Une copie faite avec Ctrl+D est déjà dans le dossier Path. Tu as seulement à la déplacer et à la renommer.
  • Les noms sont simplement les nombres : 1, 2, 3, 4, 5. Pas de lettres et pas d’espaces.
  • Laisse les pièces posées sur le sol. Les ennemis flottent 2 studs au-dessus d’elles.
Erreur fréquente. Sauter un numéro. Si la pièce 3 manque, les ennemis s’arrêtent à la pièce 2 et le script affiche une erreur.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

3
Étape 3 / 8

Crée l’ennemi

  1. Ajoute une Part. Mets Shape sur Ball et Size à 3, 3, 3, et mets-la en rouge. Active Anchored, désactive CanCollide et nomme-la Enemy.
  2. Passe la souris sur Enemy, clique sur + et ajoute une IntValue. Nomme-la Health et mets sa Value à 3.
  3. Glisse Enemy dans ServerStorage. C’est maintenant un modèle. Le jeu en fera des copies.

Plus de détails

  • Shape est une liste dans Properties. Clique dessus et choisis Ball.
  • CanCollide est une case à cocher dans Properties. Sans la coche, les joueurs et les autres pièces traversent l’ennemi.
  • Quand tu cliques sur +, écris IntValue pour le trouver. Clique sur le nouvel IntValue, puis change Name en Health et Value en 3 dans Properties.
  • Quand tu tires Enemy dans ServerStorage, il disparaît du Viewport. C’est normal.
Astuce. L’ennemi est Anchored parce qu’un script le déplace. Les pièces Anchored ignorent la gravité et les poussées.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

4
Étape 4 / 8

Construis la base

  1. Ajoute une grande Part au bout du chemin, à côté de la pièce 5. Active Anchored et nomme-la Base.
  2. Passe la souris sur Base, clique sur + et ajoute une IntValue. Nomme-la Health et mets sa Value à 10.
  3. Ajoute un BillboardGui à Base avec Size {0, 200}, {0, 50} et StudsOffset 0, 8, 0. Ajoute-y un TextLabel avec Size {1, 0}, {1, 0} et TextScaled activé.
  4. Ajoute un Script à Base et colle ce code.
Base > Script
local base = script.Parent
local health = base.Health
local label = base.BillboardGui.TextLabel

local function update()
	if health.Value > 0 then
		label.Text = "Base: " .. health.Value
	else
		label.Text = "Game over"
	end
end

health.Changed:Connect(update)
update()

Ce que fait chaque partie

  • Changed se lance chaque fois que la valeur de Health change.
  • La fonction update écrit le nouveau nombre sur l’étiquette au-dessus de la base.
  • Quand Health arrive à 0, l’étiquette affiche Game over et le script Waves arrête d’envoyer des ennemis.

Plus de détails

  • Une taille de 10, 10, 10 est une bonne base. N’importe quelle couleur convient.
  • Le Health de la base est un autre objet que le Health de l’ennemi. Chacun se trouve dans sa propre pièce.
  • Pour Size et StudsOffset, écris les nombres exactement comme montré, avec les parenthèses et les virgules, et appuie sur Enter.
  • Pour tester : appuie sur F5. L’étiquette au-dessus de la base affiche Base: 10.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

5
Étape 5 / 8

Envoie les vagues

  1. Passe la souris sur ServerScriptService, clique sur + et ajoute un Script. Nomme-le Waves.
  2. Supprime la ligne qui est déjà là et colle ce code.
  3. Appuie sur Play. Toutes les 3 secondes, une boule rouge apparaît à la pièce 1 et avance le long du chemin. Quand elle arrive au bout, la base perd 1 de vie.
ServerScriptService > Waves
local TweenService = game:GetService("TweenService")
local ServerStorage = game:GetService("ServerStorage")

local path = workspace:WaitForChild("Path")
local enemies = workspace:WaitForChild("Enemies")
local base = workspace:WaitForChild("Base")
local SPEED = 8

local function walk(enemy)
	for i = 2, #path:GetChildren() do
		local target = path[tostring(i)].Position + Vector3.new(0, 2, 0)
		local distance = (target - enemy.Position).Magnitude
		local info = TweenInfo.new(distance / SPEED, Enum.EasingStyle.Linear)
		local tween = TweenService:Create(enemy, info, {Position = target})
		tween:Play()
		tween.Completed:Wait()
		if not enemy.Parent then return end
	end

	base.Health.Value = math.max(0, base.Health.Value - 1)
	enemy:Destroy()
end

while base.Health.Value > 0 do
	task.wait(3)

	local enemy = ServerStorage.Enemy:Clone()
	enemy.Position = path["1"].Position + Vector3.new(0, 2, 0)
	enemy.Parent = enemies
	task.spawn(walk, enemy)
end

Ce que fait chaque partie

  • Clone fait une copie du modèle Enemy qui est dans ServerStorage.
  • La fonction walk déplace l’ennemi vers chaque pièce du chemin dans l’ordre. distance / SPEED garde la même vitesse sur les longs et les courts passages.
  • task.spawn laisse chaque ennemi marcher de son côté, pour que la boucle puisse continuer d’en envoyer de nouveaux.

Plus de détails

  • Le script s’ouvre dans un nouvel onglet. Clique dans le code, appuie sur Ctrl+A puis sur Ctrl+V pour tout remplacer.
  • Les ennemis apparaissent dans le dossier Enemies pendant que le jeu tourne. Tu peux les voir dans Explorer.
  • Sans tour pour l’instant, chaque ennemi arrive à la base. Après 10 ennemis, l’étiquette affiche Game over et plus aucun ennemi ne vient.
  • Du texte rouge dans Output à propos d’un nom manquant veut dire qu’une pièce du chemin ou un dossier a un mauvais nom.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

6
Étape 6 / 8

Construis la tour

  1. Ajoute une Part près d’un virage du chemin. Mets Size à 4, 8, 4, active Anchored et nomme-la Tower.
  2. Ajoute un Script à Tower et colle ce code.
  3. Appuie sur Play. Une fois par seconde, la tour frappe l’ennemi le plus proche à sa portée. L’ennemi clignote en blanc, et après 3 coups il disparaît.
Tower > Script
local tower = script.Parent
local enemies = workspace:WaitForChild("Enemies")
local RANGE = 25
local DAMAGE = 1

while true do
	task.wait(1)

	local target = nil
	local closest = RANGE
	for _, enemy in ipairs(enemies:GetChildren()) do
		local distance = (enemy.Position - tower.Position).Magnitude
		if distance < closest then
			target = enemy
			closest = distance
		end
	end

	if target then
		target.Health.Value -= DAMAGE
		if target.Health.Value <= 0 then
			target:Destroy()
		else
			target.Color = Color3.new(1, 1, 1)
			task.wait(0.1)
			target.Color = Color3.fromRGB(255, 60, 60)
		end
	end
end

Ce que fait chaque partie

  • La boucle mesure la distance entre la tour et chaque ennemi et retient le plus proche.
  • RANGE est la distance que la tour peut atteindre. DAMAGE est la quantité de vie qu’un coup enlève.
  • Quand Health arrive à 0, Destroy retire l’ennemi.

Plus de détails

  • Mets la tour entre 8 et 12 studs du chemin. La portée est de 25 studs dans toutes les directions.
  • Une tour met 3 secondes pour un ennemi, et un nouvel ennemi arrive toutes les 3 secondes. Une seule tour ne peut donc tenir le chemin que si les ennemis restent assez longtemps à portée.
  • L’éclair blanc dure un dixième de seconde. Regarde bien pour le voir.
  • Pour une deuxième tour, sélectionne Tower et appuie sur Ctrl+D, puis déplace la copie. Le script vient avec elle.
Astuce. Une tour marche mieux à côté d’un virage, parce que les ennemis restent plus longtemps à sa portée.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

7
Étape 7 / 8

Teste et équilibre

  1. Appuie sur F5 et regarde quelques vagues.
  2. Si aucun ennemi n’atteint jamais la base, le jeu est trop facile. Si la base perd toute sa vie vite, il est trop difficile.
  3. Équilibre-le avec trois nombres : le temps d’attente dans Waves, la valeur Health de l’ennemi et le DAMAGE de la tour.
  4. Appuie sur Shift+F5 pour arrêter. Si quelque chose ne marche pas, ouvre la fenêtre Output depuis le menu Window et lis le texte rouge.

Plus de détails

  • Change un seul nombre à la fois, puis rejoue. Sinon, tu ne sais pas quel changement a aidé.
  • Le temps d’attente est le nombre dans task.wait(3) vers la fin du script Waves. Un nombre plus petit envoie les ennemis plus vite.
  • Le Health de l’ennemi est dans ServerStorage, dans Enemy. Le DAMAGE de la tour est tout en haut du script Tower.
  • Un bon premier objectif : la base doit survivre deux minutes avec deux tours.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

8
Étape 8 / 8

Publie-le

  1. Choisis File → Publish to Roblox. Donne un nom et une courte description au jeu.
  2. Sur le site Creator Hub, ouvre ton jeu et remplis le questionnaire Maturity.
  3. Mets le jeu en Public et envoie le lien à un ami.

Plus de détails

  • La première fois que tu publies, Studio te demande un nom et une description. Clique sur Create.
  • Creator Hub est le site create.roblox.com. Connecte-toi avec le même compte et clique sur ton jeu dans la liste.
  • Roblox peut demander autre chose avant qu’un jeu puisse être public, par exemple une vérification de l’âge sur le compte. La page t’indique ce qui manque.
  • Si tu as moins de 18 ans, fais cette étape avec un parent.
Astuce. Montre le jeu à un ami et pose-lui une seule question : c’était trop facile ou trop difficile ? Ensuite change un nombre et teste de nouveau.
Cette étape ne marche pas chez moi

Vérifie d’abord ces trois choses

  • Le nom de chaque pièce et de chaque script est exactement le même que dans le guide, avec les mêmes majuscules.
  • Le script se trouve dans le bon objet. Regarde l’étiquette au-dessus de la zone de code.
  • Ouvre la fenêtre Output depuis le menu Window. Le texte rouge montre le script et la ligne qui pose problème.

Toujours bloqué ? Écris-nous →

Maintenant, modifie-le toi-même

  • Ajoute une deuxième tour avec une courte portée et DAMAGE 2.
  • Fais accélérer les vagues avec le temps. Indice : garde le temps d’attente dans une variable et rends-la un peu plus petite après chaque ennemi.
  • Donne 20 de vie à la base et fais en sorte que chaque ennemi en enlève 2.