CollectionService
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
CollectionService gère les groupes (collections) d'instances avec balises . Les balises sont des ensembles de chaînes appliquées aux objets qui se répliquent du serveur au client. Ils sont également sérialisés lorsque les lieux sont enregistrés.
L'utilisation principale de CollectionService est de enregistrer des instances avec des balises spécifiques que vous pouvez utiliser pour étendre leur comportement. Si vous trouvez que vous ajoutez le même script à beaucoup d'objets différents, peut-être qu'un script qui utilise CollectionService serait mieux.
Les balises peuvent être ajoutées ou supprimées via les méthodes de cette classe, telles que AddTag() ou RemoveTag() . Ils peuvent également être gérés directement dans Studio via la section Tags des propriétés d'une instance, ou via l'outil 1> Éditeur de balises intégré1>.
Réplication
Lorsque les tags se répliquent, tous les tags sur un objet se répliquent en même temps . Par conséquent, si vous définissez un tag sur un objet du client, alors ajoutez/suppr
Résumé
Méthodes
Applique une étiquette à un Instance .
Renvoie un signal qui se déclenche lorsqu'une étiquette donnée est ajoutée à un objet.
Renvoie un signal qui se déclenche lorsqu'une balise donnée est retirée d'une instance.
Renvoie une tableau d'objets dans le jeu avec un tag donné.
Obtient un tableau de tous les tags appliqués à un objet donné.
Vérifiez si un objet a une étiquette donnée.
Supprime une étiquette d'une instance.
Évènements
Feuille quand une étiquette est ajoutée à un objet et que l'étiquette ajoutée est la seule occurrence de cette étiquette dans l'emplacement.
Feuille quand une étiquette est retirée d'un objet et que la balise supprimée n'est plus utilisée n'importe où dans le emplacement.
Propriétés
Méthodes
AddTag
Ajouter une balise s'appliquera à une Instance, et ne fera rien si la balise est déjà appliquée à l'instance. Ajouter avec succès une balise générera un signal créé par CollectionService:GetInstanceAddedSignal() avec le tag donné.
Avertissement : Lors de l'étiquetage d'une instance, il est courant que certaines ressources soient utilisées pour donner la fonctionnalité de la balise, par exemple, des connexions d'événement ou des tables. Pour éviter les fuites de mémoire, il est une bonne idée de les nettoyer (d
Paramètres
Retours
GetInstanceAddedSignal
GetInstanceAdded est donné un tag (une chaîne) et renvoie un signal qui se déclenche sous deux conditions :
- La balise est attribuée à une instance dans le DataModel (jeu) en utilisant CollectionService:AddTag() ou Instance:AddTag().
- Une instance avec le tag donné est ajoutée en tant que descendant du DataModel, par exemple en définissant Instance.Parent ou similaire.
Les appels suivants à cette méthode avec le même tag retournent le même objet de signal. Considérez également d'appeler CollectionService:GetTagged() pour obtenir une liste d'objets qui ont déjà un tag (et donc ne déclenchent pas l'événement si ils sont déjà dans le DataModel ).
Voir aussi CollectionService:GetInstanceRemovedSignal(), qui renvoie un événement qui se déclenche sous des conditions similaires.
Paramètres
La balise à surveiller.
Retours
Événement qui se déclenche lorsque vous ajoutez la balise à une instance.
Échantillons de code
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if human then
human.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
-- This table maps BaseParts with the tag to their Touched connections
local connections = {}
local function onInstanceAdded(object)
-- Remember that any tag can be applied to any object, so there's no
-- guarantee that the object with this tag is a BasePart.
if object:IsA("BasePart") then
connections[object] = object.Touched:Connect(onDeadlyPartTouched)
end
end
local function onInstanceRemoved(object)
-- If we made a connection on this object, disconnect it (prevent memory leaks)
if connections[object] then
connections[object]:Disconnect()
connections[object] = nil
end
end
-- Listen for this tag being applied to objects
CollectionService:GetInstanceAddedSignal(tag):Connect(onInstanceAdded)
CollectionService:GetInstanceRemovedSignal(tag):Connect(onInstanceRemoved)
-- Also detect any objects that already have the tag
for _, object in pairs(CollectionService:GetTagged(tag)) do
onInstanceAdded(object)
end
GetInstanceRemovedSignal
GetInstanceRemoved est donné une étiquette (une chaîne) et renvoie un signal qui se déclenche sous deux conditions :
- La balise est supprimée d'une instance dans le DataModel (jeu) en utilisant CollectionService:RemoveTag() ou Instance:RemoveTag().
- Une instance avec le tag donné est supprimée en tant que descendant du DataModel, par exemple en définissant Instance.Parent ou similaire.
Les appels suivants à cette méthode avec le même tag retournent le même objet de signal. Le signal est utile pour nettoyer les ressources utilisées par les objets qui avaient autrefois des balises, tels que la déconnexion des connexions.
Voir aussi CollectionService:GetInstanceAddedSignal(), qui renvoie un événement qui se déclenche sous des conditions similaires.
Paramètres
La balise à surveiller.
Retours
Événement qui se déclenche lorsque vous enlevez la balise d'une instance.
Échantillons de code
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if human then
human.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
-- This table maps BaseParts with the tag to their Touched connections
local connections = {}
local function onInstanceAdded(object)
-- Remember that any tag can be applied to any object, so there's no
-- guarantee that the object with this tag is a BasePart.
if object:IsA("BasePart") then
connections[object] = object.Touched:Connect(onDeadlyPartTouched)
end
end
local function onInstanceRemoved(object)
-- If we made a connection on this object, disconnect it (prevent memory leaks)
if connections[object] then
connections[object]:Disconnect()
connections[object] = nil
end
end
-- Listen for this tag being applied to objects
CollectionService:GetInstanceAddedSignal(tag):Connect(onInstanceAdded)
CollectionService:GetInstanceRemovedSignal(tag):Connect(onInstanceRemoved)
-- Also detect any objects that already have the tag
for _, object in pairs(CollectionService:GetTagged(tag)) do
onInstanceAdded(object)
end
GetTagged
GetTagged renvoie un tableau d'objets avec un tag donné qui sont les descendants du DataModel ( game ). Ces tags ont été ajoutés en utilisant CollectionService:AddTag() , et en supprimant un tag
Si vous voulez détecter tous les objets avec une balise, à la fois les objets actuels et futurs, utilisez cette méthode pour itérer sur les objets tout en établissant une connexion à un signal retourné par CollectionService.GetInstanceAddedSignal.
Cette méthode ne garantit pas que les objets renvoyés aient le tag donné, mais il est également possible que les objets puissent avoir le tag donné, mais ne sont pas la descendant du DataModel , c'est-à-dire son parent est zéro. Cette méthode ne retournera pas de tels objets.
Paramètres
La balise pour rechercher.
Retours
Une tableau de toutes les instances avec le tag.
Échantillons de code
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if human then
human.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
-- This table maps BaseParts with the tag to their Touched connections
local connections = {}
local function onInstanceAdded(object)
-- Remember that any tag can be applied to any object, so there's no
-- guarantee that the object with this tag is a BasePart.
if object:IsA("BasePart") then
connections[object] = object.Touched:Connect(onDeadlyPartTouched)
end
end
local function onInstanceRemoved(object)
-- If we made a connection on this object, disconnect it (prevent memory leaks)
if connections[object] then
connections[object]:Disconnect()
connections[object] = nil
end
end
-- Listen for this tag being applied to objects
CollectionService:GetInstanceAddedSignal(tag):Connect(onInstanceAdded)
CollectionService:GetInstanceRemovedSignal(tag):Connect(onInstanceRemoved)
-- Also detect any objects that already have the tag
for _, object in pairs(CollectionService:GetTagged(tag)) do
onInstanceAdded(object)
end
GetTags
GetTags est donné une instance et renvoie un tableau de chaînes, qui sont les balises appliquées à l'objet donné.
local CollectionService = game:GetService("CollectionService")local object = workspace.Modellocal tags = CollectionService:GetTags(object)print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
Cette méthode est utile lorsque vous voulez faire quelque chose avec plusieurs balises à la fois sur un objet. Cependant, il serait inefficace d'utiliser cette méthode pour vérifier l'existence d'une seule balise. Pour cela, utilisez CollectionService:HasTag() pour vérifier l'existence d'une seule balise.
Paramètres
L'objet dont les balises doivent être retournées.
Retours
Un tableau de chaînes qui sont les balises appliquées à l'objet donné.
Échantillons de code
local CollectionService = game:GetService("CollectionService")
local object = script.Parent.Part
-- Add a tag
CollectionService:AddTag(object, "Deadly")
-- Query for a tag
if CollectionService:HasTag(object, "Deadly") then
print(object:GetFullName() .. " is deadly")
end
-- List tags on an object
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
-- Remove a tag
CollectionService:RemoveTag(object, "Deadly")
HasTag
HasTag renvoie si un objet donné a une étiquette.
- L'utilisation de CollectionService:AddTag() pour ajouter le tag entraînera le retour de cette méthode avec true.
- L'utilisation de CollectionService:RemoveTag() pour supprimer le tag entraînera la restitution de ce méthode par false.
Par extension, toutes les balises renvoyées par un appel à CollectionService:GetTags() sur un objet seront renvoyées vraies lorsqu'elles sont utilisées avec cette méthode.
Paramètres
L'instance pour vérifier la présence d'une balise.
La balise pour vérifier.
Retours
Whether l'instance a le tag.
Échantillons de code
local CollectionService = game:GetService("CollectionService")
local object = script.Parent.Part
-- Add a tag
CollectionService:AddTag(object, "Deadly")
-- Query for a tag
if CollectionService:HasTag(object, "Deadly") then
print(object:GetFullName() .. " is deadly")
end
-- List tags on an object
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
-- Remove a tag
CollectionService:RemoveTag(object, "Deadly")
RemoveTag
RemoveTag enlèvera une balise d'une instance. Cette méthode ne lancera pas d'erreur si l'objet n'avait pas de balise en premier emplacement. Le succès de la suppression d'une balise annulera le signal créé par CollectionService:GetInstanceRemovedSignal() avec le tag donné.
Lors de la suppression d'une balise, il est courant que certaines ressources soient utilisées pour donner la fonctionnalité de la balise, par exemple des connexions d'événements ou des tables. Pour éviter les fuites de mémoire, il est une bonne idée de les nettoyer (désactiver, mettre à zéro, etc) lorsqu'elle n'est plus nécessaire pour une balise.
Paramètres
L'instance à partir de laquelle supprimer le tag.
La balise à enlever de l'instance.
Retours
Échantillons de code
local CollectionService = game:GetService("CollectionService")
local object = script.Parent.Part
-- Add a tag
CollectionService:AddTag(object, "Deadly")
-- Query for a tag
if CollectionService:HasTag(object, "Deadly") then
print(object:GetFullName() .. " is deadly")
end
-- List tags on an object
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
-- Remove a tag
CollectionService:RemoveTag(object, "Deadly")
Évènements
TagAdded
Cet événement se déclenche lorsqu'une balise est ajoutée à un objet et que la balise ajoutée est la seule occurrence de cette balise dans l'emplacement.
Paramètres
TagRemoved
Cet événement se déclenche lorsqu'une étiquette est retirée d'un objet et que la balise supprimée n'est plus utilisée n'importe où dans le emplacement.