CollectionService

Hiển Thị Bản Đã Lỗi Thời

*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.

Không Thể Tạo
Dịch Vụ

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

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ố

instance: Instance
Giá Trị Mặc Định: ""
tag: string
Giá Trị Mặc Định: ""

Lợi Nhuận

()

GetAllTags

Ghi Song Song

Trả về một array của tất cả các thẻ trong trải nghiệm.


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:

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ố

tag: string

Thẻ để theo dõi.

Giá Trị Mặc Định: ""

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.

Deadly Bricks using CollectionService

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:

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ố

tag: string

Thẻ để theo dõi.

Giá Trị Mặc Định: ""

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.

Deadly Bricks using CollectionService

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

Instances
Ghi Song Song

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 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ố

tag: string

Thẻ để tìm kiếm.

Giá Trị Mặc Định: ""

Lợi Nhuận

Instances

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.

Deadly Bricks using CollectionService

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

Ghi Song Song

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ố

instance: Instance

Ví dụ, các thẻ của các thực thể nào nên được trả về.

Giá Trị Mặc Định: ""

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.

Using Tags and 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

Ghi Song Song

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ố

instance: Instance

Ví dụ để kiểm tra sự hiện diện của một thẻ.

Giá Trị Mặc Định: ""
tag: string

Thẻ để kiểm tra.

Giá Trị Mặc Định: ""

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.

Using Tags and 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ố

instance: Instance

Ví dụ để xóa nhãn từ.

Giá Trị Mặc Định: ""
tag: string

Thẻ để xóa khỏi ví dụ / trường hợp.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.

Using Tags and 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")

Sự Kiện

TagAdded

Sự kiện này xảy ra 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đó.

Tham Số

tag: string

TagRemoved

Sự kiện này xảy ra 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.

Tham Số

tag: string