CollectionService

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Dienst

CollectionService verwaltet Gruppen (Sammlungen) von Instanzen mit Tags .Tags sind Sätze von Zeichenketten, die auf Instanzen angewendet werden, die vom Server auf den Client repliziert werden.Sie werden auch serialisiert, wenn Orte gespeichert werden.

Die primäre Verwendung von CollectionService ist es, Instanzen mit spezifischen Tags zu registrieren, die Sie verwenden können, um ihr Verhalten zu erweitern.Wenn du dich dazu findest, dasselbe Skript zu vielen verschiedenen Instanzen hinzuzufügen, kann ein Skript, das CollectionService verwendet, besser sein.

Tags können durch die Methoden dieser Klasse wie AddTag() oder RemoveTag() hinzugefügt oder entfernt werden.Sie können auch direkt in Studio über den Abschnitt Tags der Eigenschaften einer Instanz verwaltet werden oder durch das integrierte Tool.

Replikation

Wenn sich Tags duplizieren, alle Tags auf einer Instanz gleichzeitig duplizieren .Daher, wenn du einen Tag auf einer Instanz vom Client festlegst, dann füge/entferne einen unterschiedlichen Tag auf derselben Instanz vom Server hinzu/entferne, werden die lokalen Tags des Clients auf der Instanz überschrieben.An StreamingEnabled Orten können Instanzen entladen werden, wenn sie den gestreamten Bereich des Clients verlassen.Wenn eine solche Instanz wieder in den gestreamten Bereich eintreibt, werden Eigenschaften und Tags vom Server wieder synchronisiert.Dies kann dazu führen, dass Änderungen, die von LocalScripts vorgenommen wurden, überschrieben/entfernt werden.

Zusammenfassung

Methoden

Ereignisse

  • Feuert, wenn ein Tag zu einer Instanz hinzugefügt wird und der hinzugefügte Tag die einzige Vorkommnis dieses Tags am Ort ist.

  • Feuert, wenn ein Tag von einer Instanz entfernt wird und der entfernte Tag an keiner Ortmehr verwendet wird.

Eigenschaften

Methoden

AddTag

()

Diese Methode wendet ein Tag auf ein Instance an, tut nichts, wenn der Tag bereits auf dieser Instanz angewendet wird.Der erfolgreiche Anbau eines Tags wird ein von GetInstanceAddedSignal() mit dem angegebenen Tag erstelltes Signal abfeuern.

Warnungen
  • Die Tags einer Instanz, die auf clientseitig hinzugefügt wurden, werden fallen gelassen, wenn der Server später ein Tag auf dieser Instanz hinzufügt oder entfernt, weil der Server alle Tags zusammen repliziert und vorherige Tags überschreibt.

  • Wenn Sie eine Instanz kennzeichnen, ist es üblich, dass einige Ressourcen verwendet werden, um dem Tag seine Funktionalität zu geben, zum Beispiel Ereignisverbindungen oder Tabellen.Um Speicherlecks zu verhindern, ist es eine gute Idee, diese zu löschen (verbinden Sie sich ab, stellen Sie auf nil ein usw.), wenn sie für einen Tag nicht mehr benötigt werden.Tun Sie dies, wenn Sie RemoveTag() aufrufen, Instance:Destroy() anrufen oder in einer Funktion, die mit einem von GetInstanceRemovedSignal() zurückgegebenen Signal verbunden ist.

Parameter

instance: Instance
Standardwert: ""
tag: string
Standardwert: ""

Rückgaben

()

GetAllTags

Parallel schreiben

Gibt eine Liste aller Tags in der Erlebniszurück.


Rückgaben

GetInstanceAddedSignal

Angesichts eines Tags (String) gibt diese Methode ein Signal zurück, das unter zwei Bedingungen feuert:

Subsequente Aufrufe dieser Methode mit demselben Tag geben das gleiche Objektzurück.Betrachten Sie auch, GetTagged() anzurufen, um eine Liste von Instanzen zu erhalten, die bereits einen Tag haben (und daher das Ereignis nicht abfeuern, wenn es bereits in der DataModel ist).

Siehe auch GetInstanceRemovedSignal(), das ein Ereignis zurückgibt, das unter ähnlichen Bedingungen feuert.

Parameter

tag: string

Der Tag, auf den zu achten ist.

Standardwert: ""

Rückgaben

Ein Ereignis, das abgefeuert wird, wenn du das Tag zu einer Instanz hinzufügst.

Code-Beispiele

This code sample causes any BasePart with the tag Deadly to kill any Humanoid that touches it. It does this using a common pattern with CollectionService to listen for all parts with the tag and make a connection, then disconnect the connection when the tag is removed.

Deadly Bricks using CollectionService

local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local humanoid = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
local connections = {}
local function onInstanceAdded(object)
-- Confirm 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 there is a stored connection on this object, disconnect/remove it
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

Angesichts eines Tags (String) gibt diese Methode ein Signal zurück, das unter zwei Bedingungen feuert:

Subsequente Aufrufe dieser Methode mit demselben Tag geben das gleiche Objektzurück.Das Signal ist nützlich für die Aufräumung von Ressourcen, die von Instanzen verwendet wurden, die einmal Tags hatten, wie die Trennung von Verbindungen.

Siehe auch GetInstanceAddedSignal(), das ein Ereignis zurückgibt, das unter ähnlichen Bedingungen feuert.

Parameter

tag: string

Der Tag, auf den zu achten ist.

Standardwert: ""

Rückgaben

Ein Ereignis, das abgefeuert wird, wenn du das Tag von einer Instanz entfernst.

Code-Beispiele

This code sample causes any BasePart with the tag Deadly to kill any Humanoid that touches it. It does this using a common pattern with CollectionService to listen for all parts with the tag and make a connection, then disconnect the connection when the tag is removed.

Deadly Bricks using CollectionService

local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local humanoid = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
local connections = {}
local function onInstanceAdded(object)
-- Confirm 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 there is a stored connection on this object, disconnect/remove it
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
Parallel schreiben

Diese Methode gibt eine Reihe von Instanzen mit einem bestimmten Tag zurück, die Nachkommen des DataModel sind.Das Entfernen eines Tags mit CollectionService:RemoveTag() oder Instance:RemoveTag() stellt sicher, dass diese Methode sie nicht zurückgibt.

Wenn Sie alle Instanzen mit einem Tag erkennen möchten, präsentieren beide und Zukunft, verwenden Sie diese Methode, um über Instanzen zu iterieren, während Sie auch eine Verbindung zu einem von GetInstanceAddedSignal() zurückgegebenen Signal herstellen.

Diese Methode garantiert keine Reihenfolge der zurückgegebenen Instanzen.Zusätzlich ist es möglich, dass Instanzen das angegebene Tag erhalten, aber nicht ein Nachkomme des DataModel sind, zum Beispiel ist ihr Elternteil nil ; diese Methode gibt keine solchen Instanzen zurück.

Parameter

tag: string

Das Tag, nach dem gesucht wird.

Standardwert: ""

Rückgaben

Instances

Ein Array aller Instanzen mit dem Tag.

Code-Beispiele

This code sample causes any BasePart with the tag Deadly to kill any Humanoid that touches it. It does this using a common pattern with CollectionService to listen for all parts with the tag and make a connection, then disconnect the connection when the tag is removed.

Deadly Bricks using CollectionService

local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local humanoid = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
local connections = {}
local function onInstanceAdded(object)
-- Confirm 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 there is a stored connection on this object, disconnect/remove it
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

Parallel schreiben

Angesichts einer Instance gibt diese Methode eine Liste von Zeichen zurück, die die auf die Instanz angewendeten Tags sind.

Diese Methode ist nützlich, wenn du etwas mit mehreren Instanz-Tags auf einmal machen möchtest, aber es ist ineffizient, nach der Existenz eines einzelnen Tags zu suchen.Dazu verwende HasTag(), um nach einem einzelnen Tag zu suchen.

Parameter

instance: Instance

Die Instanz, deren Tags zurückgegeben werden sollen.

Standardwert: ""

Rückgaben

Ein Array von Zeichenketten, die die Tags sind, die auf die angegebene Instanz angewendet werden.

Code-Beispiele

This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.

Using Tags and CollectionService

local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")
local object = Workspace.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

Parallel schreiben

Diese Methode gibt zurück, ob ein bestimmtes Instance einen Tag hat.

Per Ausweitung werden alle Tags, die durch einen Anruf bei GetTags() auf einer Instanz zurückgegeben werden, mit dieser Methode true zurückkehren, wenn sie mit dieser Methode verwendet werden.

Parameter

instance: Instance

Die Instanz, die auf die Präsenz eines Tags überprüft.

Standardwert: ""
tag: string

Der Tag, auf den zu überprüfen.

Standardwert: ""

Rückgaben

Ob die Instanz das Tag hat.

Code-Beispiele

This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.

Using Tags and CollectionService

local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")
local object = Workspace.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

()

Diese Methode entfernt ein Tag von einer Instanz. Die erfolgreiche Entfernung eines Tags feuert ein Signal ab, das von GetInstanceRemovedSignal() mit dem angegebenen Tag erstellt wurde.

Wenn ein Tag entfernt wird, ist es üblich, dass einige Ressourcen verwendet werden, um dem Tag seine Funktionalität zu geben, zum Beispiel Verbindungen zu Ereignissen oder Tabellen.Um Speicherlecks zu verhindern, ist es eine gute Idee, diese zu löschen (verbinden Sie sich ab, stellen Sie auf nil ein usw.), wenn sie für einen Tag nicht mehr benötigt werden.

Parameter

instance: Instance

Die Instanz, von der der Tag entfernt werden soll.

Standardwert: ""
tag: string

Der Tag, der aus der Instanz entfernt werden muss.

Standardwert: ""

Rückgaben

()

Code-Beispiele

This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.

Using Tags and CollectionService

local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")
local object = Workspace.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")

Ereignisse

TagAdded

Dieses Ereignis wird ausgelöst, wenn ein Tag zu einer Instanz hinzugefügt wird und der hinzugefügte Tag die einzige Vorkommnis dieses Tags am Ort ist.

Parameter

tag: string

TagRemoved

Dieses Ereignis wird ausgelöst, wenn ein Tag von einer Instanz entfernt wird und der entfernte Tag an keiner Ortmehr verwendet wird.

Parameter

tag: string