CollectionService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
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
Wendet einen Tag auf ein Instance an.
Gibt eine Liste aller Tags in der Erlebniszurück.
Gibt ein Signal zurück, das abgefeuert wird, wenn ein bestimmtes Tag zu einer Instanz hinzugefügt wird.
Gibt ein Signal zurück, das abgefeuert wird, wenn ein bestimmtes Tag von einer Instanz entfernt wird.
Gibt eine Reihe von Instanzen im Spiel mit einem bestimmten Tag zurück.
Erhalte eine Liste aller Tags, die auf eine bestimmte Instanz angewendet werden.
Überprüfe, ob eine Instanz ein bestimmtes Tag hat.
Entfernt ein Tag von einer Instanz.
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
Rückgaben
GetInstanceAddedSignal
Angesichts eines Tags (String) gibt diese Methode ein Signal zurück, das unter zwei Bedingungen feuert:
Der Tag wird einer Instanz innerhalb von DataModel zugewiesen, die mit CollectionService:AddTag() oder Instance:AddTag() verwendet wird.
Eine Instanz mit dem angegebenen Tag wird als Nachkomme des DataModel hinzugefügt, zum Beispiel durch Festlegen von Instance.Parent oder ähnlichem.
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
Der Tag, auf den zu achten ist.
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.
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:
Der Tag wird aus einer Instanz innerhalb von DataModel entfernt, indem CollectionService:RemoveTag() oder Instance:RemoveTag() verwendet wird.
Eine Instanz mit dem angegebenen Tag wird als Nachkomme des DataModel entfernt, zum Beispiel durch das Entfernen von Instance.Parent oder ähnlichem.
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
Der Tag, auf den zu achten ist.
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.
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
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
Das Tag, nach dem gesucht wird.
Rückgaben
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.
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
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
Die Instanz, deren Tags zurückgegeben werden sollen.
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.
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
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
Die Instanz, die auf die Präsenz eines Tags überprüft.
Der Tag, auf den zu überprüfen.
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.
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
Die Instanz, von der der Tag entfernt werden soll.
Der Tag, der aus der Instanz entfernt werden muss.
Rückgaben
Code-Beispiele
This code sample demonstrates adding, removing and querying a tag from an object using 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
TagRemoved
Dieses Ereignis wird ausgelöst, wenn ein Tag von einer Instanz entfernt wird und der entfernte Tag an keiner Ortmehr verwendet wird.