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ác instanz với nhãn .Thẻ là các bộ chuỗi được áp dụng cho các thực thể sao chép từ máy chủ sang khách hàng.Chúng cũng được serialize khi các vị trí được lưu.
Sử dụng chính của CollectionService là đăng ký các thực thể 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 thấy mình thêm cùng một kịch bản vào nhiều instance khác nhau, một kịch bản sử dụng CollectionService có thể tốt hơn.
Các thẻ có thể được thêm hoặc bỏ qua các phương pháp của lớp này như AddTag() hoặc RemoveTag() .Họ cũng có thể được quản lý trực tiếp trong Studio thông qua phần Nhãn của các thuộc tính của một ví ví dụ / trường hợp, hoặc thông qua công cụ Trình soạn thảo Nhãn tích hợp.
Sao lưu
Khi nhãn sao lưu, tất cả các nhãn trên một ví dụ sao lưu cùng một lúc .Do đó, nếu bạn thiết lập một thẻ trên một ví dụ từ khách hàng sau đó thêm/xóa một thẻ khác trên cùng một ví dụ từ máy chủ, các thẻ địa phương trên ví dụ của khách hàng được viết lại.Trong StreamingEnabled nơi, các ví trí có thể được gỡ bỏ khi chúng rời khỏi khu vực phát trực tuyến của khách hàng.Nếu một ví dụ như vậy vào lại khu vực phát trực tiếp, các thuộc tính và thẻ sẽ được đồng bộ lại từ máy chủ.Điều này có thể gây ra việc thay đổi được thực hiện bởi LocalScripts được ghi đè/xóa.
Tóm Tắt
Phương Pháp
Áp dụng một thẻ cho một Instance .
Trả về một array của tất cả các thẻ trong trải nghiệm.
Trả về một tín hiệu bắn khi một thẻ nhất định được thêm vào một ví ví dụ / trường hợp.
Trả về một tín hiệu bắt lửa khi một thẻ nhất định được xóa khỏi một ví ví dụ / trường hợp.
Trả về một loạt các ví dụ trong trò chơi với một thẻ đã cho.
Nhận một array của tất cả các thẻ được áp dụng cho một ví ví dụ / trường hợpnhất định.
Kiểm tra xem một ví dụ có thẻ đã cho hay không.
Loại bỏ một thẻ từ một ví ví dụ / trường hợp.
Sự Kiện
Nổ khi một thẻ được thêm vào một ví dụ và thẻ được thêm là duy nhất của thẻ đó trong địa điểmđó.
Bắt lửa khi một thẻ bị xóa khỏi một ví dụ và thẻ bị xóa không còn được sử dụng ở bất cứ địa điểmnào nữa.
Thuộc Tính
Phương Pháp
AddTag
Phương pháp này áp dụng một thẻ cho Instance , không làm gì nếu thẻ đã được áp dụng cho ví dụ / trường hợpđó.Thành công thêm một thẻ sẽ kích hoạt một tín hiệu được tạo bởi GetInstanceAddedSignal() với thẻ đã cho.
Cảnh báo
Các thẻ của một ví ví dụ / trường hợpđược thêm bởi phía khách sẽ bị xóa nếu máy chủ sau đó thêm hoặc xóa một thẻ trên ví dụ đó vì máy chủ sao chép tất cả các thẻ cùng nhau và thay thế các thẻ trước.
Khi đánh dấu một ví ví dụ / trường hợp, thông thường một số tài nguyên được sử dụng để cung cấp cho nhãn chức năng của nó, ví dụ như kết nối sự kiện hoặc bảng.Để ngăn chặn rò rỉ bộ nhớ, một ý tưởng tốt là dọn sạch chúng (cắt kết nối, đặt thành nil , v.v.) khi không còn cần thiết cho một thẻ.Làm điều này khi gọi RemoveTag() , gọi Instance:Destroy() hoặc trong một chức năng kết nối với một tín hiệu được trả về bởi GetInstanceRemovedSignal() .
Tham Số
Lợi Nhuận
GetInstanceAddedSignal
Khi được gán một thẻ (chuỗi), phương pháp này trả về một tín hiệu bắt lửa dưới hai điều kiện:
Thẻ được gán cho một thực thể trong DataModel bằng cách sử dụng CollectionService:AddTag() hoặc Instance:AddTag() .
Một ví dụ với thẻ được cung cấp được thêm làm con cháu của DataModel, ví dụ bằng cách đặt 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 thẻ trả về cùng một đối tượng tín hiệu.Hãy xem xét cũng gọi GetTagged() để có được danh sách các thực thể có thẻ (và do đó sẽ không kích hoạt sự kiện nếu chúng đã có trong DataModel ).
Xem thêm GetInstanceRemovedSignal() mà trả về một sự kiện bắt lửa dưới các điều kiện tương tự.
Tham Số
Thẻ để theo dõi.
Lợi Nhuận
Một sự kiện bắt lửa khi bạn thêm thẻ vào một ví ví dụ / trường hợp.
Mẫu mã
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
Khi được gán một thẻ (chuỗi), phương pháp này trả về một tín hiệu bắt lửa dưới hai điều kiện:
Thẻ được xóa khỏi một ví dụ trong DataModel bằng cách sử dụng CollectionService:RemoveTag() hoặc Instance:RemoveTag() .
Một ví dụ với thẻ được cung cấp được xóa như một con cháu của DataModel, ví dụ bằng cách không đặt 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 thẻ trả về cùng một đối tượng tín hiệu.Tín hiệu hữu ích để làm sạch các tài nguyên được sử dụng bởi các thực thể có thẻ trước đây, chẳng hạn như ngắt kết nối.
Xem thêm GetInstanceAddedSignal() mà trả về một sự kiện bắt lửa dưới các điều kiện tương tự.
Tham Số
Thẻ để theo dõi.
Lợi Nhuận
Một sự kiện bắt lửa khi bạn xóa nhãn từ một ví ví dụ / trường hợp.
Mẫu mã
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
Phương pháp này trả về một loạt các ví dụ với một thẻ được cho là con cháu của DataModel .Loại bỏ một thẻ bằng cách sử dụng CollectionService:RemoveTag() hoặc Instance:RemoveTag() đảm bảo phương pháp này không trả lại chúng.
Nếu bạn muốn phát hiện tất cả các ví dụ với một thẻ, cả hai hiện diện và tương lai, sử dụng phương pháp này để lặp lại các ví dụ trong khi cũng thiết lập kết nối với một tín hiệu được trả lại bởi GetInstanceAddedSignal() .
Phương pháp này không đảm bảo bất kỳ xếp hạng nào của các instance trả về.Ngoài ra, có thể các thực thể có thể có nhãn được gán cho chúng nhưng không phải là con cháu của DataModel, ví dụ cha của nó là nil ; phương pháp này sẽ không trả lại các thực thể như vậy.
Tham Số
Thẻ để tìm kiếm.
Lợi Nhuận
Một mảng của tất cả các ví dụ với thẻ.
Mẫu mã
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
Khi được cung cấp một Instance, phương pháp này trả về một mảng các chuỗi là các thẻ được áp dụng cho ví dụ / trường hợp.
Phương pháp này hữu ích khi bạn muốn làm một cái gì đó với nhiều thẻ cùng lúc, nhưng không hiệu quả để kiểm tra sự tồn tại của một thẻ duy nhất.Đối với điều này, sử dụng HasTag() để kiểm tra cho một thẻ duy nhất.
Tham Số
Ví dụ, các thẻ của các thực thể nào nên được trả về.
Lợi Nhuận
Một mảng các chuỗi mà là các thẻ được áp dụng cho ví ví dụ / trường hợpđược cho.
Mẫu mã
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
Phương pháp này trả về xem có một thẻ cho Instance đã cho hay không.
Theo mở rộng, bất kỳ thẻ nào được trả bởi cuộc gọi đến GetTags() trên một ví dụ sẽ trả về true khi được sử dụng với phương pháp này.
Tham Số
Ví dụ để kiểm tra sự hiện diện của một thẻ.
Thẻ để kiểm tra.
Lợi Nhuận
Liệu instance có nhãn hay không.
Mẫu mã
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
Phương pháp này xóa một thẻ từ một ví ví dụ / trường hợp. Thành công xóa thẻ sẽ kích hoạt một tín hiệu được tạo bởi GetInstanceRemovedSignal() với thẻ đã cho.
Khi xóa một thẻ, thông thường một số tài nguyên được sử dụng để cung cấp chức năng cho thẻ, ví dụ như kết nối sự kiện hoặc bảng.Để ngăn chặn rò rỉ bộ nhớ, một ý tưởng tốt là dọn sạch chúng (cắt kết nối, đặt thành nil , v.v.) khi không còn cần thiết cho một thẻ.
Tham Số
Ví dụ để xóa nhãn từ.
Thẻ để xóa khỏi ví dụ / trường hợp.
Lợi Nhuận
Mẫu mã
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")