Mouvement Automatiques
Sur cette page tu trouveras comment faire:
- Mouvement automatique unique
- Mouvement automatique répeté
- S’accrocher à un objet en mouvement
- Choisit sa vitesse hors du script
Script Serveur: Animation Unique
Les mouvements sont gérées par le serveur (si on faisait un Script Joueur, seul 1 seul joueur verrait le mouvement de l’objet).
Il en existe 2 types: ceux fait par animation, qui peuvent se répéter, et les autres.
On commence par un exemple d’animation simple. Ici, si on touche le bloc, il se met à tomber.
Après 90 secondes, le bloc se teleporte ensuite de nouveau à sa place.
local CollectionService = game:GetService("CollectionService") --récupère les objets du jeulocal TweenService = game:GetService("TweenService") --gestion de création d'animationlocal RunService = game:GetService("RunService") -- gestion du lecteur d'animation
-- info sur l'animation créé: Durée, Style (on touche pas celui la), la direction (et si on fait aller-retour),-- le nombre de répétition (-1 = infini), si au retour on inverse la directionlocal tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Quad, Enum.EasingDirection.In, 0, false)
local control = false
local function ObjetTouchee(objet,other) -- la fonction qui se lancer quand il y a contact if control == false then control = true local originalPosition = objet.Position --position de depart (pour le reset) local tween = TweenService:Create(objet, tweenInfo, { -- creer les frames d'animation CFrame = objet.CFrame * CFrame.new(0, -70, 0) }) tween:Play() --lire l'animation wait(10) -- Attente avant de réinitialiser tween:Cancel() --stop l'animation objet.Position = originalPosition -- Réinitialisation de la position control = false endendfor _, object in pairs(CollectionService:GetTagged("chute")) do -- pour tout objet taggé if object:IsA("BasePart") then -- si touché par un humanoid object.Touched:Connect(function(otherPart)ObjetTouchee(object,otherPart) -- lancer la fonction end)endendScript Serveur: Animation Répété
Les mouvements sont gérées par le serveur (si on faisait un Script Joueur, seul 1 seul joueur verrait le mouvement de l’objet).
Il en existe 2 types: ceux fait par animation, qui peuvent se répéter, et les autres.
Ici on a une animation répété.
local TweenService = game:GetService("TweenService") --gestion de création d'animationlocal RunService = game:GetService("RunService") -- gestion du lecteur d'animation
-- info sur l'animation créé: Durée, Style (on touche pas celui la), la direction (et si on fait aller-retour),-- le nombre de répétition (-1 = infini), si au retour on inverse la directionlocal tweenInfo = TweenInfo.new(10, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut, -1, true)
local CollectionService = game:GetService("CollectionService")
local tag = "ascenceur" --le tag de l'objet multiple
-- constament en train de tourner, verifie les objets du jeu pour savoir si on en a raté un qui aurait le bon tagfor _, object in pairs(CollectionService:GetTagged(tag)) do if object:IsA("BasePart") then local tween = TweenService:Create(object, tweenInfo, { -- creer les frames d'animation-- deplacer l'objet dans la direction Z, à vitesse -62 (il commencera donc par aller en arrière) CFrame = object.CFrame * CFrame.new(0, 0, -62)
}) tween:Play() --lire l'animation endendS’accrocher à un objet animé
Lorsque l’on utilise le mouvement pour faire des plateformes ou des ascenceurs, il faut que le joueur se déplace avec la plateforme. Sinon elle part sans nous. On a 2 méthodes
Seats
Local Player Script
Cette méthode est garantie de marcher pour tous les joueurs, sans rien d’autre que le script:
local root = script.Parent.HumanoidRootPart --recupère le corps du joueur pour tester ce qui est touchélocal CS = game:GetService("CollectionService") --liste des objets taggé du jeulocal thread -- pour lancer la glue plus tardlocal function delaglue(platform) -- fonction pour se gluer return function() -- si la fonction échoue, evite le crash local lastCframe = nil -- variable pour récuperer les infos de l'animation de l'objet auquel on veut s'attacher while true do if lastCframe == nil then -- si on n'a pas d'info sur la 1er frame de l'animation lastCframe = platform.CFrame -- enregistre la 1er frame de l'animation end local CF = platform.CFrame -- enregistre la frame actuelle de l'animation local Rel = CF * lastCframe:inverse() --calcule la différence entre frame précédente et actuelle pour calculer le mouvement lastCframe = platform.CFrame -- enregistre la frame actualle comme nouvelle "frame précedente" root.CFrame = Rel * root.CFrame -- place le joueur à la position estimé de l'animation, grace au calcul task.wait(0.001) --régule pour eviter les crashs end endendroot.Touched:Connect(function(hit) --si on touche un objet if CS:HasTag(hit,"ascenceur") then --si il a le tag qu'on veut thread = task.spawn(delaglue(hit)) -- lancer la glue endend)root.TouchEnded:Connect(function(hit) --si arrete de toucher un objet if CS:HasTag(hit,"ascenceur") then --si il a le tag qu'on veut task.cancel(thread) -- desactive la glue. Evite les bug si on retourne sur la plateforme + meilleurs performances endend)Choisir sa vitesse hors script
On peut utiliser un attribut pour décider dans Roblox la vitesse de la plateforme (ce qui rend le script plus versatile)
Consulte la fiche des attributs pour voir comment les créer et change legèrement ton code:
CFrame = object.CFrame * CFrame.new(object:GetAttribute("vitesse"))