CollectionService

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Service

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

É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

void

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

instance: Instance
tag: string

Retours

void

GetAllTags

Écrire en parallèle

Retours

GetInstanceAddedSignal

GetInstanceAdded est donné un tag (une chaîne) et renvoie un signal qui se déclenche sous deux conditions :

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

tag: string

La balise à surveiller.


Retours

Événement qui se déclenche lorsque vous ajoutez la balise à une instance.

Échantillons de code

Deadly Bricks using CollectionService

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 :

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

tag: string

La balise à surveiller.


Retours

Événement qui se déclenche lorsque vous enlevez la balise d'une instance.

Échantillons de code

Deadly Bricks using CollectionService

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

Instances
Écrire en parallèle

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

tag: string

La balise pour rechercher.


Retours

Instances

Une tableau de toutes les instances avec le tag.

Échantillons de code

Deadly Bricks using CollectionService

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

Écrire en parallèle

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.Model
local 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

instance: Instance

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

Using Tags and CollectionService

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

Écrire en parallèle

HasTag renvoie si un objet donné a une étiquette.

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

instance: Instance

L'instance pour vérifier la présence d'une balise.

tag: string

La balise pour vérifier.


Retours

Whether l'instance a le tag.

Échantillons de code

Using Tags and CollectionService

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

void

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

instance: Instance

L'instance à partir de laquelle supprimer le tag.

tag: string

La balise à enlever de l'instance.


Retours

void

Échantillons de code

Using Tags and CollectionService

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

tag: string

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.

Paramètres

tag: string