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"))