CollectionService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
CollectionService verwaltet Gruppen (Kollektionen) von Instanzen mit Tags . Tags sind Sätze von Strings, die auf Objekte angewendet werden, die vom Server auf den Client repliziert werden. Sie werden auch serialisiert, wenn Plätze gespeichert werden.
Die primäre Verwendung von CollectionService ist es, Instanzen mit spezifischen Tags zu registrieren, die Sie verwenden, um ihr Verhalten zu erweitern. Wenn Sie sich finden, dass Sie das gleiche Skript zu vielen verschiedenen Objekten hinzufügen, möglicherweise ein Skript, das CollectionService verwendet, wäre besser.
Tags können über die Methoden dieser Klasse hinzugefügt oder entfernt werden, z. B. AddTag() oder RemoveTag(). Sie können auch direkt in Studio durch die Tags-Sektion der Eigenschaften verwaltet werden oder durch das integrierte 1> Tool.
Replikation
Wenn Tags replicate, alle Tags auf einem Objekt werden gleichzeitig repliziert . Wenn Sie also ein Tag auf einem Objekt vom Serversetzen, fügen Sie/entfernen Sie einen anderen
Zusammenfassung
Methoden
Apply a tag to a Instance .
Gibt ein Signal zurück, das bei der Erstellung eines Objekts mit einem bestimmten Tag ausgelöst wird.
Gibt ein Signal zurück, das ausgelöst wird, wenn ein bestimmter Tag aus einer Instanz entfernt wird.
Rückgibt ein Array von Objekten im Spiel mit einem bestimmten Tag.
Bietet eine Matrix aller auf ein bestimmtes Objekt angewandten Tags.
Überprüfen Sie, ob ein Objekt einen bestimmten Tag hat.
Entfernt ein Tag von einer Instanz.
Ereignisse
Feuert, wenn ein Tag zu einem Objekt hinzugefügt wird und der hinzugefügte Tag die einzige Vorkommnis dieses Tags im Ortist.
Feuert, wenn ein Tag von einem Objekt entfernt wird und der entfernte Tag nicht mehr überall im Ort verwendet wird.
Eigenschaften
Methoden
AddTag
AddTag wird ein Tag an ein Instance anwenden, was nichts tut, wenn der Tag bereits auf das Instanzangewendet wird. Der Erfolg des Hinzufügens eines Tags wird ein von CollectionService:GetInstanceAddedSignal() erstelltes Signal mit dem angegebenen Tag feuern, mit dem das Item erfolgreich hinzugefügt wird.
Warnung: Wenn Sie ein Beispiel auf eine Instanz标记, ist es üblich, dass einige Ressourcen verwendet werden, um der Tag seine Funktionalität zu geben, z. B. Ereignisverbindungen oder Tabellen. Um den Speicherausfall zu verhindern, ist es eine gute Idee, diese zu
Parameter
Rückgaben
GetInstanceAddedSignal
GetInstanceAdded erhält ein Tag (eine Strings) und gibt ein Signal zurück, das unter zwei Bedingungen ausgelöst wird:
- Das Tag wird an eine Instanz innerhalb des DataModel (Spiels) zugewiesen, verwendet CollectionService:AddTag() oder Instance:AddTag().
- Eine Instanz mit dem angegebenen Tag wird als Nachkomme des DataModel hinzugefügt, z. B. durch Festlegung von Instance.Parent oder ähnlichem.
Aufeinanderfolgende Aufrufe dieser Methode mit demselben Tag geben dieselben Signal-Objekt zurück. Betrachten Sie auch CollectionService:GetTagged(), um eine Liste von Objekten zu erhalten, die bereits ein Tag haben (und damit das Ereignis nicht auslösen, wenn sie bereits in der DataModel sind).
Siehe auch CollectionService:GetInstanceRemovedSignal(), das ein Ereignis zurückgibt, das unter ähnlichen Bedingungen ausgeführt wird.
Parameter
Der Tag, auf den Sie warten müssen.
Rückgaben
Ein Ereignis, das ausgeht, wenn du dem Tag ein Instanz hinzufügst.
Code-Beispiele
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 erhält ein Tag (eine Strings) und gibt ein Signal zurück, das unter zwei Bedingungen feuert:
- Der Tag wird von einer Instanz innerhalb des DataModel (Spiels) mit CollectionService:RemoveTag() oder Instance:RemoveTag() entfernt.
- Eine Instanz mit dem angegebenen Tag wird als Nachkomme des DataModel entfernt, z. B. durch das Entsetzen von Instance.Parent oder ähnlichem.
Aufeinanderfolgende Aufrufe dieser Methode mit demselben Tag geben dieselben Signal-Objekt zurück. Das Signal ist nützlich, um Ressourcen zu reinigen, die einst Tags hatten, z. B. Verbindungen abbrechen.
Siehe auch CollectionService:GetInstanceAddedSignal(), das ein Ereignis zurückgibt, das unter ähnlichen Bedingungen ausgeführt wird.
Parameter
Der Tag, auf den Sie warten müssen.
Rückgaben
Ein Ereignis, das ausgeht, wenn du das Tag von einer Instanz entfernst.
Code-Beispiele
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 gibt ein Array von Objekten mit einem bestimmten Tag zurück, die Nachkommen des DataModel ( game ) sind. Solche Tags wurden mit CollectionService:AddTag() hinzugefügt, und das Entfer
Wenn Sie alle Objekte mit einem Tag erkennen möchten, sowohl die gegenwärtigen als auch die zukünftigen, verwenden Sie diese Methode, um über Objekte zu wiederholen, während Sie auch eine Verbindung mit einem von CollectionService.GetInstanceAddedSignal herstellen.
Diese Methode garantiert keine Bestellung der zurückgegebenen Objekte. Darüber hinaus ist es möglich, dass Objekte die zugewiesene ID haben, aber kein Nachkommen des DataModel , d.h. sein Elternteil ist null. Diese Methode wird keine solchen Objekte zurückgeben.
Parameter
Die Suchanfrage.
Rückgaben
Ein Array von allen Instanzen mit dem Tag.
Code-Beispiele
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 erhält eine Instanz und gibt eine Reihe von Strings zurück, die auf das gegebene Objekt angewendet werden.
local CollectionService = game:GetService("CollectionService")local object = workspace.Modellocal tags = CollectionService:GetTags(object)print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
Diese Methode ist nützlich, wenn Sie etwas mit mehreren Tags auf ein Objekt gleichzeitig tun möchten. jedoch wäre es ineffizient, diese Methode zu verwenden, um auf die Existenz eines einzelnen Tags zu überprüfen. für dies, verwenden Sie CollectionService:HasTag() , um auf einen einzelnen Tag zu überprüfen.
Parameter
Das Objekt, whose Tags zurückgegeben werden sollen.
Rückgaben
Ein Array von Strings, die auf das gegebene Objekt angewendet werden.
Code-Beispiele
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 gibt zurück, ob ein bestimmtes Objekt ein Tag hat.
- Das Verwenden von CollectionService:AddTag() , um das Tag hinzuzufügen, verursacht, dass diese Methode wahr ist.
- Das Verwenden von CollectionService:RemoveTag() , um das Tag zu entfernen, verursacht, dass diese Methode falsch zurückgegeben wird.
Durch Erweiterung werden alle Tags, die von einer Anrufe an CollectionService:GetTags() auf ein Objekt zurückgegeben, mit diesem Methoden verwendet, wenn es mit diesem Methoden verwendet wird.
Parameter
Die Instanz zum Überprüfen der Präsenz eines Tags.
Der Tag, nach dem zu suchen.
Rückgaben
Ob die Instanz den Tag hat.
Code-Beispiele
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 wird ein Tag von einer Instanz entfernen. Diese Methode wird keinen Fehler anzeigen, wenn das Objekt keinen Tag in der ersten Orthat. Der Erfolg beim Entfernen eines Tags wird mit dem von CollectionService:GetInstanceRemovedSignal() mit dem angegebenen Tag feuern.
Wenn ein Tag entfernt wird, ist es üblich, dass einige Ressourcen verwendet werden, um der Tag seine Funktionalität zu geben, z. B. Ereignisverbindungen oder Tabellen. Um den Speicher freizugeben, ist es eine gute Idee, dies zu tun (verbinden, auf null setzen usw), wenn er für einen Tag nicht mehr benötigt wird.
Parameter
Die Instanz, von der der Tag entfernt wird.
Tag, den Tag zu entfernen, der von der Instanz.
Rückgaben
Code-Beispiele
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")
Ereignisse
TagAdded
Dieses Ereignis wird ausgelöst, wenn ein Tag zu einem Objekt hinzugefügt wird, und der hinzugefügte Tag die einzige Vorkommnis dieses Tags im Ort ist.
Parameter
TagRemoved
Dieses Ereignis wird ausgelöst, wenn ein Tag von einem Objekt entfernt wird und der entfernte Tag nicht mehr überall im Ort verwendet wird.