CollectionService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
CollectionService mengelola kelompok ( koleksi ) instans dengan tag .Label adalah set string yang diterapkan ke instansi yang bereplikasi dari server ke klien.Mereka juga diserialisasi saat tempat disimpan.
Penggunaan utama dari CollectionService adalah untuk mendaftarkan instans dengan tag khusus yang dapat Anda gunakan untuk memperluas perilaku mereka.Jika Anda menemukan diri menambahkan skrip yang sama ke banyak instansi berbeda, skrip yang menggunakan CollectionService mungkin lebih baik.
Label dapat ditambahkan atau dihapus melalui metode kelas ini seperti AddTag() atau RemoveTag() .Mereka juga dapat dikelola langsung di Studio melalui bagian Tag dari properti kejadian, atau melalui alat Editor Tag bawaan .
Replikasi
Ketika tag di-复制, semua tag pada instans di-复制 pada saat yang sama .Oleh karena itu, jika Anda menetapkan tag pada instansi dari klien maka tambahkan/hapus tag berbeda pada instansi yang sama dari server, tag lokal klien di instansi dihapuskan.Di StreamingEnabled tempat, instans dapat dihapus saat mereka meninggalkan area streaming klien.Jika instans seperti itu memasuki kembali area yang disiarkan, properti dan tag akan disinkronkan kembali dari server.Ini dapat menyebabkan perubahan yang dibuat oleh LocalScripts untuk ditulis ulang/dihapus.
Rangkuman
Metode
Menerapkan tag ke Instance .
Kembalikan array dari semua tag dalam pengalaman.
Kembalikan sinyal yang menyala saat tag tertentu ditambahkan ke kejadian.
Kembalikan sinyal yang menyala saat tag tertentu dihapus dari kejadian.
Kembalikan array instansi dalam permainan dengan tag yang diberikan.
Mendapatkan array dari semua tag yang diterapkan ke kejadiantertentu.
Periksa apakah instansi memiliki tag yang diberikan.
Menghapus tag dari kejadian.
Acara
Memicu ketika tag ditambahkan ke instansi dan tag yang ditambahkan adalah satu-satunya kejadian tag tersebut di tempat itu.
Melepaskan api saat tag dihapus dari instansi dan tag yang dihapus tidak lagi digunakan di tempat mana pun.
Properti
Metode
AddTag
Metode ini menerapkan tag ke Instance , tidak melakukan apa pun jika tag sudah diterapkan ke kejadianitu.Berhasil menambahkan tag akan menyala sinyal yang dibuat oleh GetInstanceAddedSignal() dengan tag yang diberikan.
Peringatan
Tag instansi yang ditambahkan sisi klien akan dihapus jika server kemudian menambahkan atau menghapus tag pada instansi itu karena server menyalin semua tag bersama-sama dan menghapus tag sebelumnya.
Saat menandai kejadian, umumnya beberapa sumber daya digunakan untuk memberikan tag fungsionalnya, misalnya koneksi acara atau tabel.Untuk mencegah kebocoran memori, ide bagus adalah membersihkan ini (putus koneksi, atur ke nil , dll.) ketika tidak lagi dibutuhkan untuk tag.Lakukan ini saat menelepon RemoveTag() , memanggil Instance:Destroy() atau dalam fungsi yang terhubung ke sinyal yang dikembalikan oleh GetInstanceRemovedSignal() .
Parameter
Memberikan nilai
GetInstanceAddedSignal
Setelah memberikan tag (string), metode ini mem返回 sinyal yang dinyala di bawah dua kondisi:
Tag ditugaskan ke instansi dalam DataModel menggunakan CollectionService:AddTag() atau Instance:AddTag() .
Sebuah instansi dengan tag yang diberikan ditambahkan sebagai keturunan dari DataModel , misalnya dengan menetapkan Instance.Parent atau serupa.
Panggilan berikutnya ke metode ini dengan tag yang sama mengembalikan objek sinyal yang sama.Pertimbangkan juga memanggil GetTagged() untuk mendapatkan daftar instansi yang sudah memiliki tag (dan karena itu tidak akan menembakkan peristiwa jika sudah ada di DataModel ).
Lihat juga GetInstanceRemovedSignal() yang men返ikan peristiwa yang terbakar dalam kondisi serupa.
Parameter
Tag untuk diperhatikan.
Memberikan nilai
Peristiwa yang menembak ketika Anda menambahkan tag ke kejadian.
Contoh Kode
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
Setelah memberikan tag (string), metode ini mem返回 sinyal yang dinyala di bawah dua kondisi:
Tag dihapus dari instansi dalam DataModel menggunakan CollectionService:RemoveTag() atau Instance:RemoveTag() .
Instansi dengan tag yang diberikan dihapus sebagai keturunan dari DataModel , misalnya dengan tidak mengatur Instance.Parent atau serupa.
Panggilan berikutnya ke metode ini dengan tag yang sama mengembalikan objek sinyal yang sama.Sinyal berguna untuk membersihkan sumber daya yang digunakan oleh instans yang sekali memiliki tag, seperti memutus koneksi.
Lihat juga GetInstanceAddedSignal() yang men返ikan peristiwa yang terbakar dalam kondisi serupa.
Parameter
Tag untuk diperhatikan.
Memberikan nilai
Peristiwa yang menembak ketika Anda menghapus tag dari kejadian.
Contoh Kode
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
Metode ini mengembalikan array instansi dengan tag yang diberikan yang merupakan keturunan dari DataModel.Menghapus tag menggunakan CollectionService:RemoveTag() atau Instance:RemoveTag() memastikan metode ini tidak mengembalikannya.
Jika Anda ingin mendeteksi semua instans dengan tag, keduanya hadir dan masa depan, gunakan metode ini untuk mengulangi instans sambil juga membuat koneksi ke sinyal yang dikembalikan oleh GetInstanceAddedSignal() .
Metode ini tidak menjamin pemesanan kembali instans yang dikembalikan.Selain itu, kemungkinan instans dapat memiliki tag yang diberikan kepada mereka tetapi tidak menjadi keturunan dari DataModel, misalnya orangtuanya adalah nil ; metode ini tidak akan mengembalikan instans seperti itu.
Parameter
Tag untuk dicari.
Memberikan nilai
Sebuah array dari semua instansi dengan tag.
Contoh Kode
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
Setelah diberikan Instance, metode ini akan mengembalikan array string yang merupakan tag yang diterapkan ke kejadian.
Metode ini berguna ketika Anda ingin melakukan sesuatu dengan beberapa tag instansi sekaligus, tetapi tidak efisien untuk memeriksa keberadaan satu tag.Untuk ini, gunakan HasTag() untuk memeriksa tag tunggal.
Parameter
Instansi yang tagnya harus dikembalikan.
Memberikan nilai
Sebuah array string yang merupakan tag yang diterapkan pada instans yang diberikan.
Contoh Kode
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
Metode ini menghasilkan apakah suatu Instance tertentu memiliki tag.
Dengan ekstensi, tag apa pun yang dikembalikan oleh panggilan ke GetTags() pada instans akan kembali true saat digunakan dengan metode ini.
Parameter
Instansi untuk memeriksa keberadaan tag.
Tag untuk memeriksa.
Memberikan nilai
Apakah instansi memiliki tag.
Contoh Kode
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
Metode ini menghapus tag dari kejadian. Berhasil menghapus tag akan menyala sinyal yang dibuat oleh GetInstanceRemovedSignal() dengan tag yang diberikan.
Saat menghapus tag, umumnya beberapa sumber daya digunakan untuk memberikan fungsi tag, misalnya koneksi acara atau tabel.Untuk mencegah kebocoran memori, ide bagus adalah membersihkan ini (putus koneksi, atur ke nil , dll.) ketika tidak lagi dibutuhkan untuk tag.
Parameter
Instansi untuk menghapus tag dari.
Tag untuk dihapus dari kejadian.
Memberikan nilai
Contoh Kode
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")