Collisions

Sur cette page tu trouveras comment faire:

  • Une collision depuis un script local Joueur
  • Une collision avec un script Serveur, pour un type d’objet

Script Local Joueur

Il s’agit de la version la plus simple d’un tel script, par contre elle Ć  un inconvenient majeur:

La collision Ć©tant gĆ©rĆ©e par le joueur, a moins de la signaler au serveur, les autres joueurs ne la verront pas, ni ses consĆ©quences.  Regarde la fiche Variable Serveur pour plus de dĆ©tails sur comment gerer Ƨa!

local humanoid = script.Parent:WaitForChild("Humanoid") --recupère le corps du joueur pour tester ce qui est touché
local CS = game:GetService("CollectionService") --liste des objets taggƩ du jeu
Ā 
humanoid.Touched:Connect(function(hit) --si on touche un objet
Ā  Ā  if CS:HasTag(hit,"TAG OBJET") then --si il a le tag qu'on veut
--Ici on met tous le code qui doit se faire quand on touche l'objet!
Ā 
Ā  Ā  end
end)

Script Serveur (pas souvent utilisƩ, juste pour montrer)

Cette version est un peu plus compliquƩ car elle est gƩrƩ par le serveur. Il doit donc detecter pour chaque objet si ce dernier est touchƩ.

Par contre cela veut dire qu’on a pas Ć  s’embetter avec l’envoi des infos! Le serveur sait dĆ©jĆ  qu’il y a eu collision vu que c’est lui qui gĆØre!

local CollectionService = game:GetService("CollectionService") -- liste de tous les objets en jeu
local players = game:GetService("Players") -- liste de tous les joueurs en jeu
local control = false -- empĆØche la fonction de point de se lancer plusieurs fois
local function ObjetTouchee(objet,other) -- la fonction de collision, objet c'est notre objet touchƩ, et other c'est ce qu'il l'a touchƩ
    local player = players:GetPlayerFromCharacter(other.Parent) -- on essai de récuperer les infos "joueur" de ce qui a touché la pièce
    if player and control == false then -- si c'est bien un joueur, et que la fonction ne s'était pas déjà lancée
Ā  Ā  Ā  Ā  control = true --on active control pour empecher la fonction de se relancer avant d'avoir fini le reste
Ā  Ā  Ā  Ā  -- ICI ON MET LE CODE QU'ON VEUT FAIRE QUAND ON TOUCHE. augmenter un score, ouvrir une porte etc...
Ā  Ā  Ā  Ā  wait(0.1) -- on attends un peu, pour que tous le code ais le temps de se finir proprement
        control = false -- on désactive le control pour que la prochaine collision puisse avoir lieu
Ā  Ā  end
end
-- constament en train de tourner pour vƩrifier si un objet est touchƩ
for _, object in pairs(CollectionService:GetTagged("TAG OBJET")) do
Ā  Ā  if object:IsA("BasePart") then -- si on touche un objet de base (et pas un sous-morceau)
        object.Touched:Connect(function(otherPart)ObjetTouchee(object,otherPart) --lancer la fonction de collision écrite au dessus
Ā  Ā  Ā  Ā  end)end
end
Retour en haut