CollectionService
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
CollectionService zarządza grupami ( kolekcjami ) instancji z tagami .Tagi to zestawy strun zastosowane do instancji, które replikują się z serwera na klienta.Są one również serjalizowane, gdy miejsca są zapisywane.
Głównym zastosowaniem CollectionService jest rejestracja instancji z określonymi tagami, których możesz użyć do rozszerzenia ich zachowania.Jeśli dodajesz ten sam skrypt do wielu różnych instancji, skrypt, który używa CollectionService, może być lepszy.
Tagi mogą być dodane lub usunięte za pomocą metod klasy takich jak AddTag() lub RemoveTag().Można je również zarządzać bezpośrednio w Studio za pomocą sekcji Tagi właściwości instancji lub za pomocą wbudowanego narzędzia Edytor Tagów.
Replikacja
Gdy tagi się powielają, wszystkie tagi na instancji powielają się jednocześnie .Dlatego, jeśli ustawisz tag na instancji z klienta, a następnie dodasz/usuniesz różny tag na tej samej instancji z serwera, lokalne tagi klienta na instancji zostaną nadpisane.W StreamingEnabled miejscach instancje mogą zostać rozładowane, gdy opuszczą obszar przesyłany przez klienta.Jeśli taka instancja ponownie wchodzi do przesyłanego obszaru, właściwości i tagi zostaną ponownie zsynchronizowane z serwerem.Może to spowodować, że zmiany wprowadzone przez LocalScripts zostaną nadpisane/usunięte.
Podsumowanie
Metody
Zostosowuje tag do Instance .
Zwraca tablicę wszystkich tagów w doświadczeniu.
Zwraca sygnał, który wysyłany jest, gdy dany tag zostanie dodany do instancja.
Zwraca sygnał, który wysyłany jest, gdy dany tag zostanie usunięty z instancja.
Zwraca listę instancji w grze z danym tagiem.
Otrzymuje tablicę wszystkich tagów zastosowanych do danego instancja.
Sprawdź, czy instancja ma daną etykietę.
Usuwa tag z instancja.
Zdarzenia
Wystrzeliwuje, gdy dodany zostanie tag do instancji i dodany tag jest jedynym wystąpieniem tego tagu na miejsce.
Wypala się, gdy tag zostanie usunięty z instancji i usunięty tag nie jest już używany nigdzie w miejsce.
Właściwości
Metody
AddTag
Ta metoda stosuje tag do Instance, nie wykonując nic, jeśli tag został już zastosowany do tej instancja.Pomyślne dodanie tagu uruchomi sygnał stworzony przez GetInstanceAddedSignal() z danym tagiem.
Powiadomienia
Tagi instancji dodane po stronie klienta zostaną usunięte, jeśli serwer później dodaje lub usuwa tag na tej instancji, ponieważ serwer replikuje wszystkie tagi razem i zastępuje poprzednie tagi.
Podczas oznaczania instancjajest powszechne, że niektóre zasoby są używane do nadania tagowi jego funkcjonalności, na przykład połączenia z wydarzeniami lub tablice.Aby zapobiec wyciekom pamięci, dobrym pomysłem jest oczyszczenie ich (odłączenie, ustawienie na nil itp.), gdy nie są już potrzebne do tagu.Zrób to, gdy dzwonisz RemoveTag() , dzwonisz Instance:Destroy() lub w funkcji połączonej z sygnałem zwróconym przez GetInstanceRemovedSignal() .
Parametry
Zwroty
GetInstanceAddedSignal
Biorąc pod uwagę tag (ciąg), metoda ta zwraca sygnał, który wystrzeliwuje się w dwóch warunkach:
Tag jest przypisany do instancji w ramach DataModel używając CollectionService:AddTag() lub Instance:AddTag().
Instancja z danym tagiem jest dodawana jako potomek DataModel, na przykład poprzez ustawienie Instance.Parent lub podobne.
Następne wezwania do tej metody z tym samym tagiem zwracają ten sam obiekt sygnału.Rozważ również wezwanie GetTagged() aby uzyskać listę instancji, które już mają tag (a zatem nie uruchomią wydarzenia, jeśli już są w DataModel ).
Zobacz także GetInstanceRemovedSignal(), który zwraca wydarzenie, które wystrzeliwuje w podobnych warunkach.
Parametry
Tag do obserwowania.
Zwroty
Wydarzenie, które wystrzeliwuje się, gdy dodasz tag do instancja.
Przykłady kodu
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
Biorąc pod uwagę tag (ciąg), metoda ta zwraca sygnał, który wystrzeliwuje się w dwóch warunkach:
Tag jest usuwany z instancji w ramach DataModel używając CollectionService:RemoveTag() lub Instance:RemoveTag() .
Instancja z danym tagiem jest usuwana jako potomek DataModel, na przykład poprzez wyłączenie Instance.Parent lub podobne.
Następne wezwania do tej metody z tym samym tagiem zwracają ten sam obiekt sygnału.Sygnał jest przydatny do czyszczenia zasobów używanych przez instancje, które kiedyś miały tagi, takie jak odłączanie połączeń.
Zobacz także GetInstanceAddedSignal(), który zwraca wydarzenie, które wystrzeliwuje w podobnych warunkach.
Parametry
Tag do obserwowania.
Zwroty
Wydarzenie, które wystrzeliwuje się, gdy usuniesz tag z instancja.
Przykłady kodu
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
Ta metoda zwraca tablicę instancji z danym tagiem, które są potomkami DataModel.Usuwanie tagu za pomocą CollectionService:RemoveTag() lub Instance:RemoveTag() gwarantuje, że metoda ta ich nie zwraca.
Jeśli chcesz wykryć wszystkie instancje z tagiem, oba przedstawiają i przyszłość, użyj tej metody, aby przeszukiwać instancje, jednocześnie nawiązując połączenie z sygnałem zwróconym przez GetInstanceAddedSignal() .
Ta metoda nie gwarantuje żadnego sortowania zwróconych instancji.Ponadto możliwe jest, że instancje mogą mieć przypisany daną tag, ale nie będą potomkami DataModel, na przykład ich rodzicem jest nil ; ta metoda nie zwróci takich instancji.
Parametry
Tag do wyszukiwania.
Zwroty
Zbiór wszystkich instancji z tagiem.
Przykłady kodu
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
Biorąc pod uwagę Instance, metoda ta zwraca tablicę znaków, które są tagami zastosowanymi do instancja.
Ta metoda jest przydatna, gdy chcesz zrobić coś z wieloma tagami instancji naraz, ale nieefektywne jest sprawdzanie istnienia pojedynczego tagu.Do tego użyj HasTag(), aby sprawdzić pojedynczą etykietę.
Parametry
Instancja, której tagi należy zwrócić.
Zwroty
Zbiór strun, które są tagami zastosowanymi do danego instancja.
Przykłady kodu
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
Ta metoda zwraca, czy dany Instance ma tag.
Rozszerzając, każde tagi zwracane przez wezwanie do GetTags() na instancji zwrócą true podczas użycia tej metody.
Parametry
Instancja do sprawdzenia obecności tagu.
Tag do sprawdzenia.
Zwroty
Czy instancja ma tag.
Przykłady kodu
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
Ta metoda usuwa tag z instancja. Pomyślne usunięcie tagu uruchomi sygnał stworzony przez GetInstanceRemovedSignal() z danym tagiem.
Podczas usuwania tagu jest powszechne, że niektóre zasoby są używane do nadania tagowi jego funkcjonalności, na przykład połączenia z wydarzeniami lub tablice.Aby zapobiec wyciekom pamięci, dobrym pomysłem jest oczyszczenie ich (odłączenie, ustawienie na nil itp.), gdy nie są już potrzebne do tagu.
Parametry
Instancja, z której należy usunąć tag.
Tag do usunięcia z instancja.
Zwroty
Przykłady kodu
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")
Zdarzenia
TagAdded
To wydarzenie wystrzeliwuje się, gdy dodano tag do instancji i dodany tag jest jedynym wystąpieniem tego tagu na miejsce.
Parametry
TagRemoved
To wydarzenie wystrzeliwuje się, gdy tag zostanie usunięty z instancji i usunięty tag nie jest już używany nigdzie w miejsce.