Catégories
Jeu vidéo ROBLOX

Chemins invisibles

Dans ce tutoriel sur Roblox, tu vas pouvoir apprendre à créer un parcours de plateformes dynamique et dangereux. Le principe est simple : plusieurs chemins sont proposés au joueur pour atteindre la sortie du niveau. Mais attention, les différents chemins ne restent pas visibles éternellement ! Grâce à un script en Lua, certains chemins disparaissent régulièrement au fil du temps. Le joueur doit donc observer, réfléchir rapidement et changer de direction avant de tomber dans le vide.

Création de la structure des différents chemins

Dans un premier temps, créer une structure de différents chemins composés de plateformes.

Créer un Folder principal nommé PathsFinding puis des sous Folder qui représenteront tes différents chemins possibles Path01, Path02 … puis sous les différents chemins créer tes plateformes, puis un Script :

Programmation de l’animation des différents chemins

Saisie ce code dans ton script, ce script en Lua pour Roblox permet de créer plusieurs chemins de plateformes qui apparaissent et disparaissent automatiquement.

Au début, le programme récupère le service TweenService, utilisé pour créer des animations fluides comme les effets de disparition et d’apparition.

Les variables de configuration définissent combien de temps un chemin reste visible, le temps d’attente entre les transitions et la durée de l’animation :

  • local DISPLAY_DURATION = 3 — secondes d’affichage du chemin
  • local WAIT_TIME = 3 — secondes entre chaque transition
  • local FADE_DURATION = 0.8 — secondes pour le fade in/out

Le script récupère ensuite tous les dossiers contenant les chemins et les trie dans l’ordre (path1, path2, etc.).

Chaque plateforme est préparée : elle devient fixe (Anchored = true), invisible (Transparency = 1) et sans collision (CanCollide = false).

Les informations importantes des chemins sont stockées dans des tableaux pour rendre le script plus rapide et éviter des calculs inutiles.
La fonction fadeParts() sert à rendre les plateformes visibles ou invisibles grâce à une animation progressive appelée “fade”.
Au démarrage, seul le premier chemin apparaît et devient solide pour que le joueur puisse marcher dessus.

Ensuite, une boucle infinie fait apparaître le chemin suivant pendant que l’ancien disparaît progressivement.
Grâce à ce système, le joueur doit constamment changer de chemin pour éviter de tomber et réussir à trouver la sortie du niveau dans Roblox Studio.

local TweenService = game:GetService("TweenService")

-- Configuration
local DISPLAY_DURATION = 3    -- secondes d'affichage du chemin
local WAIT_TIME      = 3   -- secondes entre chaque transition
local FADE_DURATION    = 0.8  -- secondes pour le fade in/out
-- Récupérer tous les chemins du dossier
local pathsFinding   = script.Parent
-- trie des chemins par leur nom : path1, path2, path3, ...
local children = pathsFinding:GetChildren()
table.sort(children, function(a, b) return a.Name < b.Name end)
local maxPaths = 0
-- Cache des parts par niveau (évite GetChildren() en boucle)
local pathFinding = {}
-- Cache des données par niveau (évite GetAttribute à chaque frame)
local pathData = {}

-- Prépare les données des différents chemins
for i, path in ipairs(children) do
	if not path:IsA("Folder") then continue end
	local parts = {}
	for _, part in ipairs(path:GetChildren()) do
		if not part:IsA("BasePart") then continue end
		part.Anchored     = true
		part.CanCollide   = false
		part.Transparency = 1
		table.insert(parts, part)
	end
	maxPaths += 1
	pathFinding[maxPaths] = parts
	-- Stocke les attibuts en mémoire
	pathData[maxPaths] = {
		displayDuration 	= path:GetAttribute("DisplayDuration") 	or DISPLAY_DURATION,
		waitTime  		= path:GetAttribute("WaitTime") or WAIT_TIME,
	}
end

-- TweenInfo créé une seule fois
local tweenInfo = TweenInfo.new(FADE_DURATION, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)

-- Rend visible ou invisible tous les les parts d'un chemin
local function fadeParts(parts, targetTransparency, canCollide)
	for _, part in ipairs(parts) do
		TweenService:Create(part, tweenInfo, {
			Transparency = targetTransparency
		}):Play()
		if canCollide ~= nil then
			part.CanCollide = canCollide
		end
	end
end

-- Affiche le premier chemin au démarrage
fadeParts(pathFinding[1], 0, true)

local currentIndex = 1
while true do
	-- Attendre avant de rendre in le chemin actuel
	task.wait(pathData[currentIndex].displayDuration)
	-- Calcule l'index du prochain chemin (boucle)
	local nextIndex = (currentIndex % maxPaths) + 1
	-- Transition simultanée : fade out ancien + fade in nouveau
	fadeParts(pathFinding[nextIndex],    0, true)	
	-- Attendre avant de rendre invisible le chemin actuel
	task.wait(pathData[currentIndex].waitTime)
	fadeParts(pathFinding[currentIndex], 1, false)
	-- Attendre le temps du fadout avant de continuer
	task.wait(FADE_DURATION)
	-- Mise à jour l'index pour la prochaine itération
	currentIndex = nextIndex

end

Paramétrage de l’animation

Saisir les deux attributs sur chaque Path :

  • DisplayDuration — secondes d’affichage du chemin
  • WaitTime — secondes entre chaque transition