Dans ce tutoriel, tu vas créer une plaque spéciale qui modifie la gravité lorsque le joueur marche dessus.
Grâce à cette plaque, les personnages pourront :
- sauter beaucoup plus haut ;
- retomber plus lentement ;
- atteindre des plateformes normalement inaccessibles.
Ce type de mécanisme est souvent utilisé dans les jeux de science-fiction, les parcours d’obstacles (Obby) ou les bases spatiales.
Comprendre la gravité
La gravité est la force qui attire les objets vers le sol.
Sur Terre, lorsque tu sautes :
- tu montes ;
- tu ralentis ;
- tu redescends.
Dans Roblox, la gravité agit exactement de la même manière.
Si on la diminue :
- les sauts deviennent plus grands ;
- les chutes sont plus lentes ;
- les déplacements semblent plus légers.
Solution 1 : Modifier la gravité pour tout le monde
Dans cette version, lorsqu’un joueur active la plaque, la gravité du jeu entier est modifiée.
Conséquences
- tous les joueurs sont affectés ;
- tous les sauts deviennent plus grands ;
- tous les objets physiques réagissent également à la nouvelle gravité.
Cette solution est simple à mettre en place mais peut rendre le jeu imprévisible si plusieurs joueurs jouent en même temps.
Exemple de situation
Imaginons :
- Paul marche sur la plaque ;
- la gravité est divisée par deux.
Même les autres joueurs situés à l’autre bout de la carte profiteront immédiatement de cet effet.

Créer une plaque de non gravité
Commence par construire une Part qui servira de plaque spéciale.
Tu peux lui donner :
- une couleur vive ;
- un matériau futuriste ;
- un effet lumineux.
Les joueurs comprendront ainsi qu’il s’agit d’une zone particulière du parcours.
Détecter l’entrée du joueur
Lorsque le personnage marche sur la plaque, le jeu doit détecter le contact.
Cette détection permet de savoir :
- quel joueur est entré dans la zone ;
- quand appliquer l’effet de faible gravité.
C’est le même principe que pour une zone de téléportation ou un checkpoint.
Puis un script :

-- référence au part pour le changement de gravité
local part = script.Parent
-- détection du joueur qui touche la part
part.Touched:Connect(function(hit)
local character = hit.Parent
local humanoid = character and character:FindFirstChild("Humanoid")
if not humanoid then return end
-- changement de gravité à 10 au moment de la collision
workspace.Gravity = 10
end)
Créer une plaque pour retrouver la gravité
Commence par construire une Part qui servira de plaque spéciale .
Puis un script :

-- référence de la part pour retourner la gravité à 196.2
local part = script.Parent
-- détection du joueur qui touche la part
part.Touched:Connect(function(hit)
local character = hit.Parent
local humanoid = character and character:FindFirstChild("Humanoid")
if not humanoid then return end
-- retour de la gravité à 196.2 au moment de la collision
workspace.Gravity = 196.2
end)
Solution 2 : Modifier la gravité pour un seul joueur
Dans cette version, seul le joueur qui touche la plaque bénéficie de l’effet.
Les autres joueurs continuent à jouer normalement.
Cette méthode est souvent préférable dans un jeu multijoueur car chacun peut vivre sa propre expérience.
Comment simuler une faible gravité pour un joueur ?
Comme la gravité du monde est partagée par tous, on ne peut pas simplement changer la gravité globale pour un seul joueur.
On utilise donc une autre technique :
- augmenter sa puissance de saut ;
- ralentir sa descente ;
- modifier certaines propriétés de déplacement.
Le résultat ressemble à une gravité plus faible sans affecter les autres joueurs.
Script à modifier pour la plaque de changement de gravité pour un seul joueur :
-- référence au part pour le changement de gravité
local part = script.Parent
-- détection du joueur qui touche la part
part.Touched:Connect(function(hit)
local character = hit.Parent
local hrp = character and character:WaitForChild("HumanoidRootPart")
if not hrp then return end
if hrp:FindFirstChild("GravityAttachment") then return end -- évite les doublons
-- 1. Créer une pièce jointe (Attachment) requise pour VectorForce
local attachment = Instance.new("Attachment")
attachment.Name = "GravityAttachment"
attachment.Parent = hrp
-- 2. Créer la force physique (VectorForce)
local vectorForce = Instance.new("VectorForce")
vectorForce.Name = "CustomGravityForce"
vectorForce.Attachment0 = attachment
vectorForce.ApplyAtCenterOfMass = true
vectorForce.RelativeTo = Enum.ActuatorRelativeTo.World
-- 3. Calculer la masse totale du personnage
local totalMass = 0
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") then
totalMass = totalMass + part:GetMass()
end
end
-- 4. Appliquer une force vers le haut pour réduire la gravité ressentie
-- Exemple : contrer 60% de la gravité (le joueur se sentira plus léger)
local gravityCounterFactor = 0.6
local upwardForce = totalMass * workspace.Gravity * gravityCounterFactor
vectorForce.Force = Vector3.new(0, upwardForce, 0)
vectorForce.Parent = hrp
end)
Script à modifier pour retrouver la gravité normal pour un seul joueur :
-- référence de la part pour retourner la gravité à 196.2
local part = script.Parent
-- détection du joueur qui touche la part
part.Touched:Connect(function(hit)
local character = hit.Parent
local hrp = character and character:FindFirstChild("HumanoidRootPart")
if not hrp then return end
-- Trouver et supprimer l'Attachment
local attachment = hrp:FindFirstChild("GravityAttachment")
if attachment then
attachment:Destroy()
end
-- Trouver et supprimer le VectorForce
local vectorForce = hrp:FindFirstChild("CustomGravityForce")
if vectorForce then
vectorForce:Destroy()
end
end)
