GeometryService
*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.
Dịch vụ chứa các hành động địa lý không liên quan trực tiếp đến các đối tượng cụ thể.
Tóm Tắt
Phương Pháp
Trả lại một bảng của Constraints và Attachments mà bạn có thể chọn để bảo vệ, cùng với các cha mẹ của chúng.
Tạo một hoặc nhiều PartOperations từ geometria giao điểm của một phần và các phần khác.
Tạo một hoặc nhiều PartOperations từ một phần bên kia mà không bị chiếm dụng bởi các bộ phận khác.
Tạo một hoặc nhiều PartOperations từ một phần plus geometria bị chiếm bởi các phần khác.
Thuộc Tính
Phương Pháp
CalculateConstraintsToPreserve
Trả lại một bảng của Constraints và Attachments mà bạn có thể lựa chọn để giữ, cùng với các cha mẹ của chúng. Itering qua bảng này cho phép bạn quyết định có nên giữ các hạn chế được đề xuất và kết hợp với cha mẹ của chúng.
Lưu ý rằng bảng options có thể chứa giá trị tolerance (number) và/hoặc giá trị WeldConstraintPreserve ( 2>Enumerate.WieldConstructorPreserve2> ) .
- tolerance – Độ dung dịch cách xa, trong đối tượng Attachment bảo quản, giữa đối tượng và điểm gần nhất trên bề mặt của bản mẫu nhất định. Nế
- weldConstraintPreserve – Một giá trị Enum.WeldConstraintPreserve – Một giá trị WeldConstraints – Một giá trị 0> Class.WeldConstruct|Weld0> – Một giá trị 3> Class.WeldConstruct|Weld3> – Một giá trị 6> Class.WeldConstruct|Weld6> – Một giá trị weldConstraintPreserve9> – Mộ
Tham Số
Một đối tượng gốc mà hoạt động hiện thân của hoạt động hiện thân được thực hiện trên, chẳng hạn như part trong UnionAsync() .
Bảng lựa chọn cho phương pháp:
- tolerance – Độ dung dịch cách xa, trong đối tượng Attachment bảo quản, giữa đối tượng và điểm gần nhất trên bề mặt của bản mẫu nhất định. Nế
- weldConstraintPreserve – Một giá trị Enum.WeldConstraintPreserve – Một giá trị WeldConstraints – Một giá trị 0> Class.WeldConstruct|Weld0> – Một giá trị 3> Class.WeldConstruct|Weld3> – Một giá trị 6> Class.WeldConstruct|Weld6> – Một giá trị weldConstraintPreserve9> – Mộ
Lợi Nhuận
Bảng chứa thông tin cho mọi trường hợp chung Constraints , NoCollisionConstraints và WeldConstraints . Trong các trường hợp mà một 1> Class.Attach1> hoặc <
Đối với trường hợp chung Constraints như HingeConstraint :
<tbody><tr><td>Phụ kiện</td><td><code>Class.Attachment</code></td></tr><tr><td>Hạn chế</td><td><code>Class.Constraint</code></td></tr><tr><td>Chủ đề</td><td><code>Class.BasePart</code> hoặc <code>nil</code></td></tr><tr><td>Chặn bố trí</td><td><code>Class.BasePart</code> hoặc <code>nil</code></td></tr></tbody>
Chìa khóa | Kiểu |
---|
Đối với WeldConstraints :
<tbody><tr><td>Hàm nối</td><td><code>Class.WeldConstraint</code></td></tr><tr><td>Cha mẹ kết cấu</td><td><code>Class.BasePart</code> hoặc <code>nil</code></td></tr><tr><td>WeldConstructPart0</td><td><code>Class.BasePart</code></td></tr><tr><td>WeldConstruct1</td><td><code>Class.BasePart</code></td></tr></tbody>
Chìa khóa | Kiểu |
---|
Đối với NoCollisionConstraints :
<tbody><tr><td>không có giới hạn va chạm</td><td><code>Class.NoCollisionConstraint</code></td></tr><tr><td>không cóCollisionLimit</td><td><code>Class.BasePart</code> hoặc <code>nil</code></td></tr><tr><td>không có giới hạn va chạmPart0</td><td><code>Class.BasePart</code></td></tr><tr><td>Không có giới hạn va chạmPart1</td><td><code>Class.BasePart</code></td></tr></tbody>
Chìa khóa | Kiểu |
---|
Mẫu mã
local GeometryService = game:GetService("GeometryService")
local mainPart = workspace.PurpleBlock
local otherParts = {workspace.BlueBlock}
local options = {
CollisionFidelity = Enum.CollisionFidelity.Default,
RenderFidelity = Enum.RenderFidelity.Automatic,
SplitApart = true
}
local constraintOptions = {
tolerance = 0.1,
weldConstraintPreserve = Enum.WeldConstraintPreserve.All
}
-- Perform subtract operation in pcall() since it's asyncronous
local success, newParts = pcall(function()
return GeometryService:SubtractAsync(mainPart, otherParts, options)
end)
if success and newParts then
-- Loop through resulting parts to reparent/reposition
for _, newPart in pairs(newParts) do
newPart.Parent = mainPart.Parent
newPart.CFrame = mainPart.CFrame
newPart.Anchored = mainPart.Anchored
end
-- Calculate constraints/attachments to either preserve or drop
local recommendedTable = GeometryService:CalculateConstraintsToPreserve(mainPart, newParts, constraintOptions)
-- Preserve constraints/attachments based on recommended table
for _, item in pairs(recommendedTable) do
if item.Attachment then
item.Constraint.Parent = item.ConstraintParent
item.Attachment.Parent = item.AttachmentParent
elseif item.NoCollisionConstraint then
local newNoCollision = Instance.new("NoCollisionConstraint")
newNoCollision.Part0 = item.NoCollisionPart0
newNoCollision.Part1 = item.NoCollisionPart1
newNoCollision.Parent = item.NoCollisionParent
elseif item.WeldConstraint then
local newWeldConstraint = Instance.new("WeldConstraint")
newWeldConstraint.Part0 = item.WeldConstraintPart0
newWeldConstraint.Part1 = item.WeldConstraintPart1
newWeldConstraint.Parent = item.WeldConstraintParent
end
end
-- Destroy original parts
mainPart.Parent = nil
mainPart:Destroy()
for _, otherPart in pairs(otherParts) do
otherPart.Parent = nil
otherPart:Destroy()
end
end
IntersectAsync
Tạo một hoặc nhiều PartOperations từ geometria trùng hợp của một hoặc nhiều bộ phận trong hàng đợi
Các thuộc tính sau đây từ phần chính ( part ) được áp dụng cho kết quả PartOperations :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3>
Trong hình ảnh so sánh sau đây, IntersectAsync() được gọi bằng cách sử dụng cục khối màu tím và một loạt các khối màu xanh. Kết quả PartOperation sau đó được giải quyết thành hình dạng của khối địa lý của cả hai b
Ghi chú
So với BasePart:IntersectAsync() , phương pháp này khác biệt như sau:
- Các bộ phận nhập không cần phải được gắn vào cảnh, cho phép cho các hoạt động nền.
- Khi tùy chọn SplitApart được đặt để true (mặc định), mỗi cơ thể được trả lại trong PartOperation của riêng nó.
- Mỗi một trong những bộ phận đã trả lại đều ở không gian phối hợp của phần chính. Điều này có nghĩa là (0, 0, 0) của bất kỳ bộ phận nào không nhất thiết phải ở trung tâm của cơ thân.
- Có thể gọi phương thức này trên client, nhưng với một số hạn chế. Đầu tiên, nó hiện đã phải được thực hiện với những thống kê đã tạo trên client. Thứ hai, không có replication available from client to the máy chủ.
Các bộ phận gốc vẫn giữ nguyên sau một hoạt động thành công. Trong hầu hết các trường hợp, bạn nên phụ huynh đã được đề cập ở trên cùng của bộ phận chính, sau đó PartOperations tất cả các bộ phận gốc.
Mặc định, màu mặt của kết quả PartOperations được lấy từ Color 속性 của các bộ phận ban đầu, mặc dù bạn có thể bật UsePartColor 속性 của họ để thay đổi chúng
Nếu một hoạt động intersect kết thúc với bất kỳ PartOperations có hơn 20.000 triangles, chúng sẽ được đơn giản hóa thành 20.000. Điều này sẽ kết thúc một lỗi với mã -14 .
Nếu phần chính di chuyển trong khi tính toán của hoạt động, bạn có thể đặt các bộ phận được tạo thành từ các bộ phận chính của chính bạn, vì các bộ phận được tạo thành từ cùng một không gian vị trí như chính bạn.
Nếu sử dụng phương pháp này với một Class
Tham Số
Chính Part hoặc PartOperation để hoạt động trên.
Ma trận các bộ phận để chạm chồng với bộ phận chính.
Các lựa chọn bảng đều chứa tất cả các điều khiển cho phương pháp:
- CollisionFidelity – Giá trị của CollisionFidelity trong các bộ phận kết quả.
- RenderFidelity – Giá trị của RenderFidelity trong các bộ phận kết quả.
- FluidFidelity – Giá trị của FluidFidelity trong các bộ phận kết quả.
- SplitApart – Kiểm soátBoolean xem xét liệu các thể hiện nên được giữ lại cùng nhau hoặc được chia cắt một cách hợp lý. Mặc định là true (splits).
Lợi Nhuận
Một hoặc nhiều PartOperations từ geometria giao điểm của một hoặc nhiều bộ phận chính ( part ) và các bộ phận khác.
Mẫu mã
local GeometryService = game:GetService("GeometryService")
local mainPart = workspace.PurpleBlock
local otherParts = {workspace.BlueBlock}
local options = {
CollisionFidelity = Enum.CollisionFidelity.Default,
RenderFidelity = Enum.RenderFidelity.Automatic,
SplitApart = true
}
-- Perform intersect operation in pcall() since it's asyncronous
local success, newParts = pcall(function()
return GeometryService:IntersectAsync(mainPart, otherParts, options)
end)
if success and newParts then
-- Loop through resulting parts to reparent/reposition
for _, newPart in pairs(newParts) do
newPart.Parent = mainPart.Parent
newPart.CFrame = mainPart.CFrame
newPart.Anchored = mainPart.Anchored
end
-- Destroy original parts
mainPart.Parent = nil
mainPart:Destroy()
for _, otherPart in pairs(otherParts) do
otherPart.Parent = nil
otherPart:Destroy()
end
end
SubtractAsync
Tạo một hoặc nhiều PartOperations từ phần chính minus geometri được chiếm bởi các bộ phận khác trong c
Các thuộc tính sau đây từ phần chính ( part ) được áp dụng cho kết quả PartOperations :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3>
Trong hình ảnh so sánh sau đây, SubtractAsync() được gọi bằng cách sử dụng xi-lanh màu xanh và một hàng đựng các khối màu tím. Kết quả PartOperation sau đó được giải quyết thành hình dạng mà omit điểm geometri củ
Ghi chú
So với BasePart:SubtractAsync() , phương thức này khác biệt như sau:
- Các bộ phận nhập không cần phải được gắn vào cảnh, cho phép cho các hoạt động nền.
- Khi tùy chọn SplitApart được đặt để true (mặc định), mỗi cơ thể được trả lại trong PartOperation của riêng nó.
- Mỗi một trong những bộ phận đã trả lại đều ở không gian phối hợp của phần chính. Điều này có nghĩa là (0, 0, 0) của bất kỳ bộ phận nào không nhất thiết phải ở trung tâm của cơ thân.
- Có thể gọi phương thức này trên client, nhưng với một số hạn chế. Đầu tiên, nó hiện đã phải được thực hiện với những thống kê đã tạo trên client. Thứ hai, không có replication available from client to the máy chủ.
Các bộ phận gốc vẫn giữ nguyên sau một hoạt động thành công. Trong hầu hết các trường hợp, bạn nên phụ huynh đã được đề cập ở trên cùng của bộ phận chính, sau đó PartOperations tất cả các bộ phận gốc.
Mặc định, màu mặt của kết quả PartOperations được lấy từ Color 속性 của các bộ phận ban đầu, mặc dù bạn có thể bật UsePartColor 속性 của họ để thay đổi chúng
Nếu một hoạt động trừ PartOperations có kết quả là nhiều hơn 20.000 triangles, chúng sẽ được đơn giản hóa thành 20.000. Điều này sẽ kết quả một lỗi với mã -14 .
Nếu phần chính di chuyển trong khi tính toán của hoạt động, bạn có thể đặt các bộ phận được tạo thành từ các bộ phận chính của chính bạn, vì các bộ phận được tạo thành từ cùng một không gian vị trí như chính bạn.
Nếu sử dụng phương pháp này với một Class
Tham Số
Chính Part hoặc PartOperation để hoạt động trên.
Ma trận các bộ phận để giảm từ phần chính.
Các lựa chọn bảng đều chứa tất cả các điều khiển cho phương pháp:
- CollisionFidelity – Giá trị của CollisionFidelity trong các bộ phận kết quả.
- RenderFidelity – Giá trị của RenderFidelity trong các bộ phận kết quả.
- FluidFidelity – Giá trị của FluidFidelity trong các bộ phận kết quả.
- SplitApart – Kiểm soátBoolean xem xét liệu các thể hiện nên được giữ lại cùng nhau hoặc được chia cắt một cách hợp lý. Mặc định là true (splits).
Lợi Nhuận
Một hoặc nhiều PartOperations từ geometria của phần chính ( part ) minus geometria được chiếm bởi các bộ phận khác.
Mẫu mã
local GeometryService = game:GetService("GeometryService")
local mainPart = workspace.BlueCylinder
local otherParts = {workspace.PurpleBlock}
local options = {
CollisionFidelity = Enum.CollisionFidelity.Default,
RenderFidelity = Enum.RenderFidelity.Automatic,
SplitApart = true
}
-- Perform subtract operation in pcall() since it's asyncronous
local success, newParts = pcall(function()
return GeometryService:SubtractAsync(mainPart, otherParts, options)
end)
if success and newParts then
-- Loop through resulting parts to reparent/reposition
for _, newPart in pairs(newParts) do
newPart.Parent = mainPart.Parent
newPart.CFrame = mainPart.CFrame
newPart.Anchored = mainPart.Anchored
end
-- Destroy original parts
mainPart.Parent = nil
mainPart:Destroy()
for _, otherPart in pairs(otherParts) do
otherPart.Parent = nil
otherPart:Destroy()
end
end
UnionAsync
Tạo một hoặc nhiều PartOperations từ phần chính và các khối khác trong mảng đã được cho phép. Chỉ h
Các thuộc tính sau đây từ phần chính ( part ) được áp dụng cho kết quả PartOperations :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3>
Trong hình ảnh so sánh sau đây, UnionAsync() được gọi bằng cách sử dụng khối màu xanh và một dàn bao gồm hình trụ màu tím. Kết quả PartOperation sau đó được giải quyết thành hình dạng của kết hợp hình họa của cả hai bên.
Ghi chú
So với BasePart:UnionAsync() , phương thức này khác biệt như sau:
- Các bộ phận nhập không cần phải được gắn vào cảnh, cho phép cho các hoạt động nền.
- Khi tùy chọn SplitApart được đặt để true (mặc định), mỗi cơ thể được trả lại trong PartOperation của riêng nó.
- Mỗi một trong những bộ phận đã trả lại đều ở không gian phối hợp của phần chính. Điều này có nghĩa là (0, 0, 0) của bất kỳ bộ phận nào không nhất thiết phải ở trung tâm của cơ thân.
- Có thể gọi phương thức này trên client, nhưng với một số hạn chế. Đầu tiên, nó hiện đã phải được thực hiện với những thống kê đã tạo trên client. Thứ hai, không có replication available from client to the máy chủ.
Các bộ phận gốc vẫn giữ nguyên sau một hoạt động thành công. Trong hầu hết các trường hợp, bạn nên phụ huynh đã được đề cập ở trên cùng của bộ phận chính, sau đó PartOperations tất cả các bộ phận gốc.
Mặc định, màu của kết quả PartOperations được lấy từ Color 속性 của các bộ phận ban đầu, mặc dù bạn có thể bật UsePartColor 속性 của họ để thay đổi chúng thành m
Nếu một hành động liên hợp sẽ kết quả với hơn 20.000 triangles, chúng sẽ được đơn giản hóa thành 20.000. Điều này sẽ kết quả một lỗi với mã -14 .
Nếu phần chính di chuyển trong khi tính toán của hoạt động, bạn có thể đặt các bộ phận được tạo thành từ các bộ phận chính của chính bạn, vì các bộ phận được tạo thành từ cùng một không gian vị trí như chính bạn.
Nếu sử dụng phương pháp này với một Class
Tham Số
Chính Part hoặc PartOperation để hoạt động trên.
Ma trận các bộ phận để kết hợp với bộ phận chính.
Các lựa chọn bảng đều chứa tất cả các điều khiển cho phương pháp:
- CollisionFidelity – Giá trị của CollisionFidelity trong các bộ phận kết quả.
- RenderFidelity – Giá trị của RenderFidelity trong các bộ phận kết quả.
- FluidFidelity – Giá trị của FluidFidelity trong các bộ phận kết quả.
- SplitApart – Kiểm soátBoolean xem xét liệu các thể hiện nên được giữ lại cùng nhau hoặc được chia cắt một cách hợp lý. Mặc định là true (splits).
Lợi Nhuận
Một hoặc nhiều PartOperations từ geometria của phần chính ( part ) plus geometria được chiếm bởi các bộ phận khác.
Mẫu mã
local GeometryService = game:GetService("GeometryService")
local mainPart = workspace.BlueBlock
local otherParts = {workspace.PurpleCylinder}
local options = {
CollisionFidelity = Enum.CollisionFidelity.Default,
RenderFidelity = Enum.RenderFidelity.Automatic,
SplitApart = false
}
-- Perform union operation in pcall() since it's asyncronous
local success, newParts = pcall(function()
return GeometryService:UnionAsync(mainPart, otherParts, options)
end)
if success and newParts then
-- Loop through resulting parts to reparent/reposition
for _, newPart in pairs(newParts) do
newPart.Parent = mainPart.Parent
newPart.CFrame = mainPart.CFrame
newPart.Anchored = mainPart.Anchored
end
-- Destroy original parts
mainPart.Parent = nil
mainPart:Destroy()
for _, otherPart in pairs(otherParts) do
otherPart.Parent = nil
otherPart:Destroy()
end
end