CollectionService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan

CollectionService mengelola kumpulan (koleksi) instans dengan label . Label adalah set string yang diterapkan pada objek yang mengambil dari server ke klien. Mereka juga diserIALisasi saat tempat disimpan.

Penggunaan utama CollectionService adalah mendaftarkan instans dengan tag khusus yang dapat Anda gunakan untuk mengekstensi perilaku mereka. Jika Anda menemukan diri Anda menambahkan script yang sama ke banyak objek yang berbeda, mungkin script yang menggunakan CollectionService akan lebih baik.

Label dapat ditambahkan atau dihapus melalui metode kelas ini seperti AddTag() atau RemoveTag(). Mereka juga dapat diperbarui secara langsung di Studio melalui bagian Tags dari propinsi instans, atau melalui alat 1> Tag Editor1> y

Replikasi

Ketika label diklon, semua label pada objek diklon pada saat yang sama . Oleh karena itu, jika Anda menetapkan label pada objek dari

Rangkuman

Metode

Acara

Properti

Metode

AddTag

void

MenambahkanLabel akan menambahkan label ke Instance , tidak melakukan apa-apa jika label sudah diterapkan ke kejadian. Menambahkan label dengan sukses akan mengecualikan sinyal yang dibuat oleh CollectionService:GetInstanceAddedSignal() dengan tag yang diberikan.

Peringatan: Ketika menandai kejadian, umumnya beberapa sumber daya digunakan untuk memberikan fungsionalitas tag, misalnya koneksi acara atau tabel. Untuk mencegah kehilangan memori, adalah ide yang baik untuk membersihkan in

Parameter

instance: Instance
tag: string

Memberikan nilai

void

GetAllTags

Tulis Paralel

Memberikan nilai

GetInstanceAddedSignal

GetInstanceAdded diberi label (string) dan mengembalikan sinyal yang ditembakkan di bawah dua kondisi:

Panggilan berturut-turut ke metode ini dengan label yang sama menghasilkan objek sinyal yang sama. Pertimbangkan juga untuk memanggil CollectionService:GetTagged() untuk mendapatkan daftar objek yang sudah memiliki label (dan dengan demikian tidak akan mengecualikan acara jika mereka sudah dalam Class.DataModel ).

Lihat juga CollectionService:GetInstanceRemovedSignal(), yang mengembalikan acara yang berlari di bawah kondisi serupa.

Parameter

tag: string

Label untuk menonton.


Memberikan nilai

Acara yang diaktifkan saat Anda menambahkan label ke kejadian.

Contoh Kode

Deadly Bricks using CollectionService

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 diberi label (string) dan mengembalikan sinyal yang ditembakkan di bawah dua kondisi:

Panggilan berikutnya ke metode ini dengan label yang sama menghasilkan objek sinyal yang sama. Sinyal berguna untuk membersihkan sumber daya yang pernah memiliki label, seperti menghubungkan koneksi.

Lihat juga CollectionService:GetInstanceAddedSignal(), yang mengembalikan acara yang berlari di bawah kondisi serupa.

Parameter

tag: string

Label untuk menonton.


Memberikan nilai

Acara yang diaktifkan ketika Anda menghapus label dari kejadian.

Contoh Kode

Deadly Bricks using CollectionService

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

Instances
Tulis Paralel

GetTagged mengembalikan array objek dengan tag yang diberikan yang merupakan cucu dari DataModel ( game ). Tag seperti ini telah ditambahkan menggunakan Class.CollectionService:AddTag()</

Jika Anda ingin mendeteksi semua objek dengan label, baik saat ini maupun masa depan, gunakan metode ini untuk mengulangi di atas objek sambil juga membuat koneksi ke sinyal yang dikembalikan oleh CollectionService.GetInstanceAddedSignal .

Metode ini tidak menjamin adanya pesanan dari objek yang dikembalikan. Selain itu, mungkin objek dapat memiliki tag yang diberikan kepada mereka, tetapi tidak menjadi turunan dari DataModel , yaitu saudara nol. Metode ini tidak akan mengembalikan objek seperti itu.

Parameter

tag: string

Label untuk mencari.


Memberikan nilai

Instances

Sebuah matriks dari semua instans dengan label.

Contoh Kode

Deadly Bricks using CollectionService

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

Tulis Paralel

GetTags diberi instans dan mengembalikan array string, yang merupakan tag yang diterapkan pada objek yang diberikan.


local CollectionService = game:GetService("CollectionService")
local object = workspace.Model
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))

Metode ini berguna ketika Anda ingin melakukan sesuatu dengan banyak label sekaligus pada objek. Namun, akan tidak efisien untuk menggunakan metode ini untuk memeriksa keberadaan label tunggal. Untuk ini, gunakan CollectionService:HasTag() untuk memeriksa adanya label tunggal.

Parameter

instance: Instance

Objek cuplikan yang harus dikembalikan.


Memberikan nilai

Sebuah matriksi string yang diterapkan pada objek yang diberikan.

Contoh Kode

Using Tags and CollectionService

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

Tulis Paralel

HasTag menunjukkan apakah objek yang diberikan memiliki label.

Oleh ekstensi, setiap label yang dikembalikan oleh panggilan ke CollectionService:GetTags() pada objek akan dikembalikan benar saat digunakan dengan metode ini.

Parameter

instance: Instance

Instans untuk memeriksa apakah ada label.

tag: string

Label untuk memeriksa.


Memberikan nilai

Apakah instansi memiliki label.

Contoh Kode

Using Tags and CollectionService

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

void

MenghapusLabel akan menghapus label dari kejadian. Metode ini tidak akan menghasilkan kesalahan jika objek tidak memiliki tag di tempat pertama. Menghapus tag dengan sukses akan mengeksekuskan sinyal yang dibuat oleh CollectionService:GetInstanceRemovedSignal() dengan tag yang diberikan.

Ketika menghapus label, umumnya dikenal bahwa beberapa sumber daya digunakan untuk memberikan fungsionalitas tag, misalnya koneksi acara atau tabel. Untuk mencegah kebocoran memori, ide yang baik adalah membersihkan ini (putuskan, set ke nol, dll) ketika tidak lagi diperlukan untuk tag.

Parameter

instance: Instance

Instans untuk menghapus label dari.

tag: string

Label untuk dihapus dari kejadian.


Memberikan nilai

void

Contoh Kode

Using Tags and CollectionService

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")

Acara

TagAdded

Acara ini diaktifkan ketika label ditambahkan ke objek dan tag yang ditambahkan adalah satu-satunya pengalaman tag di tempat itu.

Parameter

tag: string

TagRemoved

Acara ini diaktifkan ketika label dihapus dari objek dan label yang dihapus tidak lagi digunakan di tempat mana pun.

Parameter

tag: string