CollectionService
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
CollectionService quản lý nhóm (bộ sưu tập) của các instan với nhãn . Nhãn là các dàn chuỗi được áp dụng cho những nơi được sao chép từ máy chủ sang client. Chúng cũng được serialize khi nơi được lưu.
Mục đích chính của CollectionService là đăng nhập các instância với các thẻ cụ thể mà bạn có thể sử dụng để mở rộng hành vi của chúng. Nếu bạn tìm thấy bản thân mình thêm cùng một script vào nhiều đối tượng khác nhau, có lẽ một script sử dụng Class.CollectionService</
Nhãn có thể được thêm hoặc bị xóa bằng các phương pháp của lớp này, chẳng hạn như AddTag() hoặc RemoveTag() . Họ cũng có thể được quản lý trực tiế
nhân bản
Khi các thẻ bị sao chép, tất cả các thẻ trên một đối tượng được sao chép cùng
Tóm Tắt
Phương Pháp
Đặt nhãn cho một Instance .
Đưa ra một tín hiệu khi một thẻ đã được thêm vào một đối tượng.
Trả lại một tín hiệu khi một nhãn đã được xóa khỏi một ví dụ / trường hợp.
Trả một dàn đối tượng trong trò chơi với một thẻ đã được cung cấp.
Lấy một dàn bao gồm tất cả các nhãn được ứng dụng cho một đối tượng cụ thể.
Kiểm tra có phải một đối tượng có nhãn đã được cung cấp không.
Loại bỏ một nhãn từ một instan
Sự Kiện
Lửa khi một nhãn được thêm vào một đối tượng và nhãn được thêm là một-đơn vị duy nhất của nó trong địa điểm.
Lửa khi một nhãn đã được xóa khỏi một đối tượng và nhãn đã không còn được sử dụng ở bất kỳ nơi nào trong địa điểmđó.
Thuộc Tính
Phương Pháp
AddTag
Thêm nhãn sẽ áp dụng một nhãn vào một Instance, không làm gì nếu nhãn đã được áp dụng cho ví dụ / trường hợp. Thành công thêm một nhãn sẽ kích hoạt một tín hiệu tạo bởi CollectionService:GetInstanceAddedSignal() với nhãn đã được cung cấp.
Cảnh báo: Khi gắn nhãn một ví dụ / trường hợp, thông thường một số tài nguyên sẽ được sử dụng để cung cấp chức năng cho nhãn, ví dụ như k
Tham Số
Lợi Nhuận
GetInstanceAddedSignal
GetInstanceAdded được cho một thẻ (một chuỗi) và trả lại một tín hiệu được kích hoạt dưới hai điều kiện:
- Nhãn được gán cho một instace trong DataModel (trò chơi) bằng cách sử dụng CollectionService:AddTag() hoặc Instance:AddTag() .
- Một instace với nhãn đã được thêm vào như một con cháu của DataModel, ví dụ như bằng cách thiết lập Instance.Parent hoặc tương tự.
Các cuộc gọi tiếp theo đến phương thức này với cùng một thẻ trả về cùng một thể hiện. Hãy xem xét gọi CollectionService:GetTagged() để lấy danh sách các thống kê đã có thẻ (và do đó không bắt lỗi sự kiện nếu họ đã ở trong Class.
Xem thêm CollectionService:GetInstanceRemovedSignal() , which returns an event that fires under similar conditions.
Tham Số
Nhãn để xem.
Lợi Nhuận
Một sự kiện xảy ra khi bạn thêm nhãn vào một ví dụ / trường hợp.
Mẫu mã
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 được cho một thẻ (một chuỗi) và trả lại một tín hiệu để kích hoạt dưới hai điều kiện:
- Nhãn được xóa khỏi một instace trong DataModel (trò chơi) bằng cách sử dụng CollectionService:RemoveTag() hoặc Instance:RemoveTag() .
- Một instância với nhãn đã được xóa như một con cháu của Class.DataModel , ví dụ như bỏ để Class.Instance.Parent hoặc tương tự.
Các cuộc gọi tiếp theo đến phương pháp này với cùng một thẻ trả về cùng một thiết bị tín hiệu. Thiết bị tín hiệu hữu ích cho việc làm sạch các nguồn lực đã được sử dụng bởi các thiết bị có một lần có nhãn, chẳng hạn như kết nối bị mất.
Xem thêm CollectionService:GetInstanceAddedSignal() , which returns an event that fires under similar conditions.
Tham Số
Nhãn để xem.
Lợi Nhuận
Một sự kiện xảy ra khi bạn loại bỏ nhãn từ một ví dụ / trường hợp.
Mẫu mã
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 )的子集。 Các thẻ này đã được thêm bằng cách sử dụ
Nếu bạn muốn xác định tất cả các thống kê với một thẻ, cả hiện tại và tương lai, hãy sử dụng phương pháp này để lặp lại trên các thống kê trong khi cũng tạo một kết nối đến một tín hiệu được trả lại bởi CollectionService.GetInstanceAddedSignal .
Phương thức này không đảm bảo bất kỳ yêu cầu nào đối với các đối tượng đã được trả lại. Ngoài ra, có thể có những thẻ được gán cho các đối tượng, nhưng không phải là con cháu của DataModel , tức là nó không phải là con cháu của nil.
Tham Số
Nhãn để tìm kiếm.
Lợi Nhuận
Một dàn bộ tất cả các instância với nhãn.
Mẫu mã
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 được cấp một instância và trả một loạt các chuỗi, which are the tags applied to the given object.
local CollectionService = game:GetService("CollectionService")local object = workspace.Modellocal tags = CollectionService:GetTags(object)print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
Phương pháp này hữu ích khi bạn muốn làm điều gì đó với nhiều nhãn ở một đối tượng. Tuy nhiên, nó sẽ là một lãng phí khi sử dụng phương pháp này để kiểm tra sự tồn tại của một nhãn duy nhất. Để làm điều này, hãy sử dụng Class.CollectionService:HasTag
Tham Số
Các thống kê đối tượng nên được trả lại.
Lợi Nhuận
Một dàn chuỗi được ứng dụng cho đối tượng đã được chỉ định.
Mẫu mã
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 trả về có hay không có nhãn cho một đối tượng được cung cấp.
- Sử dụng CollectionService:AddTag() để thêm nhãn sẽ khiến phương thức này trả về true.
- Sử dụng CollectionService:RemoveTag() để xóa nhãn sẽ khiến phương thức này trở lại false.
Bằng cách mở rộng, bất kỳ nhãn nào được trả lại bởi một cuộc gọi đến CollectionService:GetTags() trên một đối tượng sẽ trả lại true khi được sử dụng với phương pháp này.
Tham Số
Lợi Nhuận
Có phải instâne có nhãn.
Mẫu mã
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
RemoveTag sẽ xóa một thẻ từ một ví dụ / trường hợp. Phương thức này sẽ không thả một lỗi nếu đối tượng không có thẻ ở đầu địa điểm. Thành côngfully thoát một thẻ bằng cách đưa ra một dấu hiệu tạo bởi CollectionService:GetInstanceRemovedSignal() với thẻ đã được cung cấp.
Khi loại bỏ một nhãn, thông thường có một số tài nguyên được sử dụng để cung cấp chức năng cho nhãn, ví dụ như kết nối sự kiện hoặc bảng. Để ngăn chặn lỗi bộ nhớ, tốt nhất là làm sạch những thứ này (đăng nhập, đặt lại, v.v.) khi không còn cần thiết cho
Tham Số
Lợi Nhuận
Mẫu mã
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")
Sự Kiện
TagAdded
Sự kiện này bắt đầu khi một nhãn được thêm vào một đối tượng và nhãn được thêm là một sat thứ duy nhất của nó ở địa điểm đó.
Tham Số
TagRemoved
Sự kiện này bắt đầu khi một nhãn được loại bỏ khỏi một đối tượng và nhãn đã không còn được sử dụng ở bất kỳ nơi nào trong địa điểmđó.