Mouvements Personnalisés Roblox : Wall Running, Escalade et Physique VectorForce

2026-09-29 • Équipe d'Ingénierie Physique Roblox DopaBrain • DopaBrain Engineering

Featured DopaBrain Interactive Tools

Le wall running, les glissades et l'escalade de rebords dynamisent les jeux d'action. Utiliser l'Humanoid classique mène souvent à des accrochages disgracieux et des pertes d'élan.

En exploitant les contraintes physiques modernes de Luau (`LinearVelocity` et `VectorForce`) avec des Raycasts directionnels, vous créez des sensations de plateforme AAA sur mobile, PC et console.

1. Neutraliser les États Humanoid pour un Parkour Fluide

Conception de la machine à états de déplacement :

2. Raycasts Directionnels et Vecteurs Normaux de Surface

Détection des murs et calcul de la trajectoire :

3. Contraintes Physiques : LinearVelocity & VectorForce

Remplacer les anciens BodyMovers par les contraintes modernes :

ReplicatedStorage.Controllers.WallRunController
-- Contrôleur client de Wall Running
local RunService = game:GetService("RunService")
local WallRun = {}
WallRun.__index = WallRun

function WallRun.new(character)
    local self = setmetatable({}, WallRun)
    self.Char = character
    self.RootPart = character:WaitForChild("HumanoidRootPart")
    self.Humanoid = character:WaitForChild("Humanoid")
    
    local att = Instance.new("Attachment", self.RootPart)
    local lv = Instance.new("LinearVelocity")
    lv.Attachment0 = att
    lv.MaxForce = 15000
    lv.RelativeTo = Enum.ActuatorRelativeTo.World
    lv.Enabled = false
    lv.Parent = self.RootPart
    
    self.Attachment = att
    self.LinearVelocity = lv
    self.IsRunning = false
    return self
end

function WallRun:CheckWall(side)
    local rightVec = self.RootPart.CFrame.RightVector
    local rayDir = (side == "Left" and -rightVec or rightVec) * 3.5
    local params = RaycastParams.new()
    params.FilterDescendantsInstances = {self.Char}
    params.FilterType = Enum.RaycastFilterType.Exclude
    return workspace:Raycast(self.RootPart.Position, rayDir, params)
end

function WallRun:Start(hitNormal, forwardDir)
    self.IsRunning = true
    self.LinearVelocity.VectorVelocity = forwardDir * 32 + Vector3.new(0, 4, 0)
    self.LinearVelocity.Enabled = true
    self.Humanoid:ChangeState(Enum.HumanoidStateType.Physics)
end

function WallRun:Stop()
    self.IsRunning = false
    self.LinearVelocity.Enabled = false
    self.Humanoid:ChangeState(Enum.HumanoidStateType.Freefall)
end

return WallRun

4. Détection des Rebords et Rétablissement (Mantle)

Attraper les corniches et franchir les obstacles avec fluidité :

5. Commandes Mobiles et Sécurité Côté Serveur

Ergonomie sur écran tactile et rempart contre les tricheries :

Frequently Asked Questions

Pourquoi privilégier LinearVelocity face à BodyVelocity ?

BodyVelocity est obsolète. LinearVelocity s'intègre au nouveau solveur de contraintes physiques de Roblox, offrant une stabilité nettement supérieure.

Comment empêcher le personnage de glisser vers le bas pendant la course sur mur ?

En exerçant une force verticale avec VectorForce compensant la gravité, puis en l'atténuant progressivement après quelques secondes.

Comment calcule-t-on le vecteur d'avancement le long du mur ?

En réalisant le produit vectoriel entre la normale de la surface renvoyée par le Raycast et le vecteur mondial vertical (0, 1, 0).

Comment le serveur empêche-t-il les tricheries de vol ?

Le serveur vérifie la présence de murs physiques réels à proximité du joueur et bride les déplacements anormaux.

Explore More Interactive Tests & Guides

Discover personalized cognitive assessments, stress evaluations, and game psychology tools on DopaBrain.

Go to Portal Hub