CollectionService 管理群組 (藏品) 的實例,其中有 標籤 。標籤是對從伺服器複製到客戶端的對象套用的字串。當地方儲存時也會串化。
Class.CollectionService 的主要使用方法是註冊具有特定標籤的實例,以便您可以擴展其行為。如果您發現自己在多個對象上添加相同的脚本,可能會有一個使用 CollectionService 的脚本更好。
標籤可以通過此類別的方法添加或移除標籤,例如 AddTag() 或 RemoveTag() 。它們也可以直接在 Studio 中通過 標籤 區個體、實例的屬性,或通過內置的 1>標籤工具輯器1>
重複
當標籤重複時, 所有標籤在對象上重複 。因此,如果您在客戶端設置標籤,則在伺服器上的不
概要
方法
對 Instance 添加標籤。
返回一個啟動標籤與對物件結合時發生的信號。
返回發生標籤從實個體、實例中移除時發射的信號。
返回指定標籤的遊戲中的一個對象列。
取得所有對應指定對物件的標籤。
檢查對象是否有指定的標籤。
從實個體、實例中移除標籤。
活動
標籤被添加到對象,且該標籤是該場空間中唯一的標籤出現。
標籤被從對象上移除時,會發生火焰,而且該移除的標籤不再在該位空間使用。
屬性
方法
AddTag
AddTag 將標籤應用在 Instance ,不論標籤是否已應用在實個體、實例上。成功添加標籤會發射由 CollectionService:GetInstanceAddedSignal() 創建的信號,並且使用指定的標籤發射成功。
警告: 標籤實個體、實例時,常常會使用一些資源來提供標籤的功能,例如事件連接或桌子。為了防止記憶體漏失,建議清理這些資源 (連接到信號返回的函
參數
返回
GetInstanceAddedSignal
GetInstanceAdded 獲得一個標籤 (一個字串) 並且在兩個條件下返回信號:
- 有指定標籤的實例將作為 DataModel 的子孫添加,例如設置 Instance.Parent 或類似。
使用此方法的後續調用將返回相同的信號對物件。請考慮也使用 CollectionService:GetTagged() 來取得標籤的對象列表,以便在它們已經在 DataModel 中時不會發生事件。
也參閱 CollectionService:GetInstanceRemovedSignal(),這會返回類似條件下發生的事件。
參數
標籤要監視。
返回
當你將標籤添加到實個體、實例時發生的事件。
範例程式碼
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 獲得一個標籤 (一個字串) 並且在兩個條件下返回信號:
- 带有指定标签的实例将被视为DataModel的子,例如通过Instance.Parent或类似的设置来取消设置。
使用此方法的後續調用將返回相同的信號對物件。信號有助於清理資源,例如斷開連接。
也參閱 CollectionService:GetInstanceAddedSignal(),這會返回類似條件下發生的事件。
參數
標籤要監視。
返回
發生標籤從實個體、實例移除時的事件。
範例程式碼
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 返回一個給定的標籤的對象群,其中是 DataModel ( game ) 的後代。這些標籤使用 CollectionService:AddTag() 來添加,並
如果要檢測所有現有和未來的對象,都使用此方法來反覆檢查對象,並且也作為連接到CollectionService.GetInstanceAddedSignal的信號。
此方法不保證任何返回的對象的訂單。此外,對象可能會有指定的標籤,但不會是DataModel的後代,即其父親為零。此方法將不會返回此類對象。
參數
搜尋標籤。
返回
一個標籤為所有實例的列表。
範例程式碼
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.Modellocal tags = CollectionService:GetTags(object)print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
此方法有助於您想要在多個物件籤上一次執行某些操作。但閱取此方法來檢查對單一標籤的存在是不合理的。為此,您可以使用 CollectionService:HasTag() 來檢查單一標籤。
參數
標籤為返回的對象。
返回
一個用於指定對物件的字串列。
範例程式碼
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:AddTag() 來添加標籤會導致此方法返回 true。
- 使用 CollectionService:RemoveTag() 以移除標籤會導致此方法返回 false。
根據擴展,使用此方法 CollectionService:GetTags() 返回的任何標籤將在使用此方法時返回真。
參數
返回
是否標記實例。
範例程式碼
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
移除標籤將從實個體、實例中移除標籤。此方法將不會發生錯誤,如果對象沒有標籤。成功移除標籤將發射由 CollectionService:GetInstanceRemovedSignal() 創建的信號,並且使用指定的標籤。
移除標籤時,有些資源會被用來提供標籤的功能,例如事件連接或桌子。為了防止資料泄露,建議您清理這些資源 (連接到零,等等) ,直到不再需要標籤時。
參數
返回
範例程式碼
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")