CollectionService

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
服務

CollectionService 管理群組 (藏品) 的實例,其中有 標籤 。標籤是對從伺服器複製到客戶端的對象套用的字串。當地方儲存時也會串化。

Class.CollectionService 的主要使用方法是註冊具有特定標籤的實例,以便您可以擴展其行為。如果您發現自己在多個對象上添加相同的脚本,可能會有一個使用 CollectionService 的脚本更好。

標籤可以通過此類別的方法添加或移除標籤,例如 AddTag()RemoveTag() 。它們也可以直接在 Studio 中通過 標籤 區個體、實例的屬性,或通過內置的 1>標籤工具輯器1>

重複

當標籤重複時, 所有標籤在對象上重複 。因此,如果您在客戶端設置標籤,則在伺服器上的不

概要

方法

活動

屬性

方法

AddTag

void

AddTag 將標籤應用在 Instance ,不論標籤是否已應用在實個體、實例上。成功添加標籤會發射由 CollectionService:GetInstanceAddedSignal() 創建的信號,並且使用指定的標籤發射成功。

警告: 標籤實個體、實例時,常常會使用一些資源來提供標籤的功能,例如事件連接或桌子。為了防止記憶體漏失,建議清理這些資源 (連接到信號返回的函

參數

instance: Instance
tag: string

返回

void

GetAllTags

平行寫入

返回

GetInstanceAddedSignal

GetInstanceAdded 獲得一個標籤 (一個字串) 並且在兩個條件下返回信號:

使用此方法的後續調用將返回相同的信號對物件。請考慮也使用 CollectionService:GetTagged() 來取得標籤的對象列表,以便在它們已經在 DataModel 中時不會發生事件。

也參閱 CollectionService:GetInstanceRemovedSignal(),這會返回類似條件下發生的事件。

參數

tag: string

標籤要監視。


返回

當你將標籤添加到實個體、實例時發生的事件。

範例程式碼

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 獲得一個標籤 (一個字串) 並且在兩個條件下返回信號:

使用此方法的後續調用將返回相同的信號對物件。信號有助於清理資源,例如斷開連接。

也參閱 CollectionService:GetInstanceAddedSignal(),這會返回類似條件下發生的事件。

參數

tag: string

標籤要監視。


返回

發生標籤從實個體、實例移除時的事件。

範例程式碼

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
平行寫入

GetTagged 返回一個給定的標籤的對象群,其中是 DataModel ( game ) 的後代。這些標籤使用 CollectionService:AddTag() 來添加,並

如果要檢測所有現有和未來的對象,都使用此方法來反覆檢查對象,並且也作為連接到CollectionService.GetInstanceAddedSignal的信號。

此方法不保證任何返回的對象的訂單。此外,對象可能會有指定的標籤,但不會是DataModel的後代,即其父親為零。此方法將不會返回此類對象。

參數

tag: string

搜尋標籤。


返回

Instances

一個標籤為所有實例的列表。

範例程式碼

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

平行寫入

GetTags 獲得一個實例並返回一個列串,這些標籤適用於指定的對物件。


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

此方法有助於您想要在多個物件籤上一次執行某些操作。但閱取此方法來檢查對單一標籤的存在是不合理的。為此,您可以使用 CollectionService:HasTag() 來檢查單一標籤。

參數

instance: Instance

標籤為返回的對象。


返回

一個用於指定對物件的字串列。

範例程式碼

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

平行寫入

HasTag 返回指定對象是否有標籤。

根據擴展,使用此方法 CollectionService:GetTags() 返回的任何標籤將在使用此方法時返回真。

參數

instance: Instance

檢查標籤是否存在的實例。

tag: string

標記要檢查。


返回

是否標記實例。

範例程式碼

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

移除標籤將從實個體、實例中移除標籤。此方法將不會發生錯誤,如果對象沒有標籤。成功移除標籤將發射由 CollectionService:GetInstanceRemovedSignal() 創建的信號,並且使用指定的標籤。

移除標籤時,有些資源會被用來提供標籤的功能,例如事件連接或桌子。為了防止資料泄露,建議您清理這些資源 (連接到零,等等) ,直到不再需要標籤時。

參數

instance: Instance

從此移除標籤的實例。

tag: string

標記從實個體、實例中移除。


返回

void

範例程式碼

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

活動

TagAdded

這個事件會在標籤被添加到對象時發生,而添加的標籤是該位空間唯一的標籤發生。

參數

tag: string

TagRemoved

當標籤從對象中移除時,此事件會發生,標籤已不再在該空間置任何地方使用。

參數

tag: string