Comment coder un double saut sur Roblox Studio ?

Bienvenue à vous dans ce court tutoriel vous apprenant comment réaliser un double saut pour vos jeux Roblox. 😲

Vous pourriez peut-être penser que cela est difficile, n’est-ce pas ? Et bien, vous avez tort ! Rien de tel qu’une mécanique de double saut pour vos jeux de parcours ou autres. 😎

Mais alors, comment s’y prendre ? 

Pour commencer, vous allez ajouter un LocalScript dans StarterCharacterScripts, qui n’est rien d’autre qu’un service qui va parenter tous ces scripts qu’il contient au joueur (son “Character“). Vous pouvez renommer votre script comme vous le souhaitez. Pour ma part, je vais le nommer “DoubleJump”.

 Passons à la partie scripts !

Nous allons commencer par déclarer nos variables :
				
					local UIS = game:GetService("UserInputService") --Ici, nous récupérerons le service 'UserInputService', ce qui nous permettra de détecter quand une touche du clavier/souris est actionnée
local char = script.Parent -- Ici nous récupérerons le 'Character' du joueur
local hum = char:WaitForChild("Humanoid") -- Ici nous récupérerons l'Humanoid du joueur 

local doubleJumpEnabled = false -- Ici, nous créons une variable 'doubleJumpEnabled' ayant pour valeur false (booléen)
				
			

Notre objectif maintenant sera de mettre en place notre “double saut”. Pour ce faire, nous souhaitons détecter quand le joueur change d’état (court, marche, saute, nage, tombe, vole, etc.). Pour cela, nous allons utiliser l’événement StateChanged, ainsi qu’une condition nous permettant de détecter si le type de mouvement réalisé par l’humanoid, afin de mettre à jour notre variable doubleJumpEnabled Pour ce faire, nous ferons :

Occupons-nous donc de cet événement..
				
					
hum.StateChanged:Connect(function(oldSate, newState) -- Quand l'état de l'humanoïde change
    if newState == Enum.HumanoidStateType.Jumping then -- Si le nouvel état est un "saut", alors
        if not doubleJumpEnabled then -- Si la variable "doubleJumpEnabled" est sur "false", alors
            wait(.2) -- On attend 0.2s
            if hum:GetState() == Enum.HumanoidStateType.Freefall then -- Si l'état de l'humanoïde est une "chute", alors
                doubleJumpEnabled = true -- On modifie notre variable "doubleJumpEnabled" sur true.
            end
        end
    elseif newState == Enum.HumanoidStateType.Landed then -- Sinon, si l'état de l'humanoïde est "Atterrissage", alors
        doubleJumpEnabled = false -- On modifie notre variable "doubleJumpEnabled" sur false.
    end
end)
				
			

Pour cette dernière partie, nous souhaitons donc permettre à notre joueur de sauter une fois sur deux, en fonction de notre variable “doubleJumpEnabled” que nous mettons à jour dans le script précédent. Pour ce faire, nous ferons :

Maintenant faisons notre Double Jump.
				
					UIS.InputBegan:Connect(function(input) -- Quand le joueur presse une touche
    if input.KeyCode == Enum.KeyCode.Space then -- Si cette touche est la barre espace alors
        if doubleJumpEnabled then -- Si la variable "doubleJumpEnabled" est sur ture
            if hum:GetState() ~= Enum.HumanoidStateType.Jumping then -- Si l'état de l'humanoid est différent que sur "sauté" alors
                hum:ChangeState(Enum.HumanoidStateType.Jumping) -- On change son état sur "saut"
                spawn(function() -- On créer un thread
                    doubleJumpEnabled = false -- on modifie la variable "doubleJumpEnabled" sur false
                end)
            end
        end
    end
end)
				
			

Voici l’ensemble de ce que vous devriez avoir :

				
					local UIS = game:GetService("UserInputService") --Ici, nous récupérerons le service 'UserInputService', ce qui nous permettra de détecter quand une touche du clavier/souris est actionnée
local char = script.Parent -- Ici nous récupérerons le 'Character' du joueur
local hum = char:WaitForChild("Humanoid") -- Ici nous récupérerons l'Humanoid du joueur 

local doubleJumpEnabled = false -- Ici, nous créons une variable 'doubleJumpEnabled' ayant pour valeur false (booléen)


hum.StateChanged:Connect(function(oldSate, newState) -- Quand l'état de l'humanoïde change
    if newState == Enum.HumanoidStateType.Jumping then -- Si le nouvel état est un "saut", alors
        if not doubleJumpEnabled then -- Si la variable "doubleJumpEnabled" est sur "false", alors
            wait(.2) -- On attend 0.2s
            if hum:GetState() == Enum.HumanoidStateType.Freefall then -- Si l'état de l'humanoïde est une "chute", alors
                doubleJumpEnabled = true -- On modifie notre variable "doubleJumpEnabled" sur true.
            end
        end
    elseif newState == Enum.HumanoidStateType.Landed then -- Sinon, si l'état de l'humanoïde est "Atterrissage", alors
        doubleJumpEnabled = false -- On modifie notre variable "doubleJumpEnabled" sur false.
    end
end)

UIS.InputBegan:Connect(function(input) -- Quand le joueur presse une touche
    if input.KeyCode == Enum.KeyCode.Space then -- Si cette touche est la barre espace alors
        if doubleJumpEnabled then -- Si la variable "doubleJumpEnabled" est sur ture
            if hum:GetState() ~= Enum.HumanoidStateType.Jumping then -- Si l'état de l'humanoid est différent que sur "sauté" alors
                hum:ChangeState(Enum.HumanoidStateType.Jumping) -- On change son état sur "saut"
                spawn(function() -- On créer un thread
                    doubleJumpEnabled = false -- on modifie la variable "doubleJumpEnabled" sur false
                end)
            end
        end
    end
end)
				
			

🎉 Félicitations ! Vous venez de créer votre système de double saut sur Roblox Studio !

Avez-vous des problèmes ? Ou quelque chose que vous n’avez pas compris ? Rejoignez notre Discord !