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 są zestawami zmian zastosowanych na obiektach, które kopiują się z serwera na klienta. są one również zapisywane serwerowo, gdy miejsca są zapisywane.
Głównym użyciem CollectionService jest rejestrowanie instancji z określonymi tagami, które możesz użyć do rozszerzenia zachowań. Jeśli znajdujesz się dodając ten sam skrypt do wielu różnych obiektów, może lepiej będzie skrypt, który używa CollectionService.
Tagi można dodawać lub usuwać poprzez metody klasy, takie jak AddTag() lub RemoveTag(). Można je również zarządzać bezpośrednio w Studio poprzez sekcję Tagi w właściwościach instancjalub poprzez zbudowany narzędzie 1>
Replikacja
Gdy tagi się replikują, wszystkie tagi na serwerreplikują się w tym samym czasie . Dlatego jeśli ustawisz tag na obiekcie z serwer, to dodaj
Podsumowanie
Metody
Przykłada tag do Instance .
Zwraca sygnał, który się włącza, gdy dany tag zostanie dodany do obiektu.
Zwraca sygnał, który się włącza, gdy określony tag zostanie usunięty z instancja.
Zwraca arkusz obiektów w grze z podanym tagiem.
Dostarcza maszynę czasową wszystkich zastosowanych tagów do określonego obiektu.
Sprawdź, czy obiekt ma podany tag.
Usunie tag z instancja.
Zdarzenia
Wystąpi, gdy tag zostanie dodany do obiektu i dodany tag jest jedyną okazją tego tagu w miejsce.
Wystąpi, gdy tag zostanie usunięty z obiektu i usunięty tag nie jest już używany w żadnym miejscu w miejsce.
Właściwości
Metody
AddTag
Dodanie Tagu zostanie zastosowane do Instance , nie robi nic, jeśli Tag został już zastosowany do instancji. Udane dodanie Tagu zostanie wykonane przez CollectionService:GetInstanceAddedSignal() z użyciem podanego Tagu.
Ostrzeżenie: Kiedy oznaczasz instancja, jest powszechną praktyką, że niektóre zasoby są używane do zapewnienia funkcjonalności tagu, na przykład połączenia wątku lub tabeli. Aby zapobiec wyciekom p
Parametry
Zwroty
GetInstanceAddedSignal
GetInstanceAdded otrzymuje tag (ciąg) i w zwrotuje sygnał, który działa pod dwoma warunkami:
- Tag jest przypisany do instancji w DataModel (gra) używając CollectionService:AddTag() lub Instance:AddTag().
- Instancja z podanym tagiem jest dodana jako potomna DataModel , na przykład poprzez ustawienie Instance.Parent lub podobnego.
Potencjalne wezwania metody z tym samym tagiem zwracają ten sam obiekt sygnału. Również wezwanie CollectionService:GetTagged() pozwala uzyskać listę obiektów, które już mają tag (i więc nie załóż własnego wrażenia, jeśli są już w Class.DataModel ).
Zobacz również CollectionService:GetInstanceRemovedSignal(), który powoduje, że wydarza się wydarzenie, które działa pod podobnymi warunkami.
Parametry
Tag do obserwowania.
Zwroty
Wydarzenie, które się uruchamia, gdy dodasz tag do instancja.
Przykłady kodu
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 otrzymuje tag (ciąg) i wysyłuje sygnał, który działa pod dwoma warunkami:
- Tag zostanie usunięty z instancji w DataModel (gra) używając CollectionService:RemoveTag() lub Instance:RemoveTag().
- Instancja z podanym tagiem jest usuwana jako dziecko DataModel , na przykład poprzez odłączenie Instance.Parent lub podobne.
Potencjalne wezwania do tej metody z tym samym tagiem zwracają ten sam obiekt sygnału. Sygnał jest użyteczny do czyszczenia zasobów używanych przez obiekty, które miały kiedyś tagi, takie jak odłączanie połączeń.
Zobacz również CollectionService:GetInstanceAddedSignal(), który powoduje, że wydarzenie zostanie uruchomione w podobnych warunkach.
Parametry
Tag do obserwowania.
Zwroty
Wydarzenie, które się włącza, gdy usuniesz tag z instancja.
Przykłady kodu
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 zwraca maszewkę obiektów z określonym tagiem, które są potomkami DataModel ( game ). Takie tagi zostały dodane przy użyciu CollectionService:AddTag() , a usuw
Jeśli chcesz wykryć wszystkie obiekty z tagiem, zarówno obecne, jak i przyszłe, użyj tego metody, aby przejść przez obiekty podczas jednoczesnego wiązania się z sygnałem zwróconym przez CollectionService.GetInstanceAddedSignal.
Ten metod nie gwarantuje żadnego zamówienia zwróconych obiektów. Ponadto możliwe jest, że obiekty mogą mieć przypisany tag, ale nie być potomstwem z DataModel , czyli jego ojcem jest zero. Ta metoda nie będzie zwracać takich obiektów.
Parametry
Tag do wyszukania.
Zwroty
Materiały wszystkich instancji z tagiem.
Przykłady kodu
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 otrzymuje instancję i zwraca maszynę zmiennej liczby znaków, które są zastosowane do danej instancji.
local CollectionService = game:GetService("CollectionService")local object = workspace.Modellocal tags = CollectionService:GetTags(object)print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
Ten metod jest użyteczny, gdy chcesz zrobić coś z wieloma tagami na raz na obiekcie. Jest jednak nieefektywny, aby użyć tego metody, aby sprawdzić istnienie pojedynczego tagu. Dla tego użyj CollectionService:HasTag() , aby sprawdzić pojedynczy tag.
Parametry
Przedmiot, których należy zwrócić tagi.
Zwroty
Materiały stron, które są tagami zastosowanymi do podanego obiektu.
Przykłady kodu
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 zwraca, czy dany obiekt ma tag.
- Używanie CollectionService:AddTag() do dodania tagu spowoduje, że ten metod wyjdzie prawdziwy.
- Używanie CollectionService:RemoveTag() do usunięcia tagu spowoduje, że ten metod wywróci fałszywy.
Zgodnie z rozszerzeniem, wszystkie znaki zwrotne z wezwania do CollectionService:GetTags() na obiekcie zwrócą prawdę, gdy zostaną użyte z tą metodą.
Parametry
Zwroty
Czy instancja ma tag.
Przykłady kodu
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
UsuwanieTagu usuwa tag z instancja. Ta metoda nie zwraca błędu, jeśli obiekt nie miał tagu w pierwszym miejsce. Usuwanie powoduje powodzenie usunięcia tagu, który stworzył CollectionService:GetInstanceRemovedSignal() z podanym tagiem.
Gdy usuwa się tag, powszechnym jest, że niektóre zasoby są używane do zapewnienia funkcjonalności tagu, na przykład połączenia wątku lub tabel. Aby zapobiec wyciekom pamięci, dobre jest, aby je wyczyścić (otrzymuj, ustaw na zero itp.) po usunięciu tagu.
Parametry
Zwroty
Przykłady kodu
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")