특정 개체와 직접 관련이 없는 지오메트리 연산을 수행하는 서비스.
요약
메서드
Class.Constraint|Constraints 및 Attachments를 포함한 테이블을 반환합니다. 부모와 함께 유지할 수 있도록 선택할 수 있습니다.
하나 이상의 PartOperations 를 만듭니다.
다른 부품의 지오메트리를 제거한 하나 이상의 PartOperations 을 만듭니다.
다른 부품에 점유된 기하구조를 제거하고 하나 이상의 PartOperations를 만듭니다.
속성
메서드
CalculateConstraintsToPreserve
Class.Constraint|Constraints 및 Attachments 와 같은 테이블을 반환하지만 부모와 함께 보관할 수 있는 테이블을 返합니다. 이 테이블을 반복하면 권장되는 제약 조건 및 부모에 부착하는 것을 결정할 수 있습니다.
Options 테이블에 값 tolerance 개수(수) 및/또는 WeldConstraintPreserve 값( 1>Enumerate.WeldConstraintsPreserve1> )을 포함할 수 있습니다.
- tolerance – 부품과 원본 부품 표면 사이의 거리 관련 부품 유지 보존 시의 오차 정도. 결과 부품 유지 보존 오차가 이 값보다 큰 경우 결과 부품의 부모 Attachment 및
- weldConstraintPreserve – A Enum.WeldConstraintPreserve 열거 값, 결과 권장 테이블에서 WeldConstraints를 보존하는 방법을 설명합니다.
매개 변수
고체 모델링 작업이 수행된 원래 개체, 예를 들어 part 의 UnionAsync()입니다.
메서드에 대한 옵션 테이블:
- tolerance – 부품과 원본 부품 표면 사이의 거리 관련 부품 유지 보존 시의 오차 정도. 결과 부품 유지 보존 오차가 이 값보다 큰 경우 결과 부품의 부모 Attachment 및
- weldConstraintPreserve – A Enum.WeldConstraintPreserve 열거 값, 결과 권장 테이블에서 WeldConstraints를 보존하는 방법을 설명합니다.
반환
일반적인 경우 Constraints , NoCollisionConstraints 및 WeldConstraints 을 포함하는 테이블. 충돌 불가 충돌 불가 충돌 불가 충돌 불가 충돌 불가 충돌
일반적인 경우 Constraints 같은 경우, HingeConstraint와 같은 경우:
<tbody><tr><td>부착물</td><td><code>Class.Attachment</code></td></tr><tr><td>제약 사항</td><td><code>Class.Constraint</code></td></tr><tr><td>부모 부착물</td><td><code>Class.BasePart</code> 또는 <code>None</code></td></tr><tr><td>제약 조건 부모</td><td><code>Class.BasePart</code> 또는 <code>None</code></td></tr></tbody>
키 | 유형 |
---|
For WeldConstraints :
<tbody><tr><td>웨일 제약</td><td><code>Class.WeldConstraint</code></td></tr><tr><td>웨일 제한 부모</td><td><code>Class.BasePart</code> 또는 <code>None</code></td></tr><tr><td>웨일 제한 부품0</td><td><code>Class.BasePart</code></td></tr><tr><td>웨일 제한 부품1</td><td><code>Class.BasePart</code></td></tr></tbody>
키 | 유형 |
---|
For NoCollisionConstraints :
<tbody><tr><td>충돌 제한 없음</td><td><code>Class.NoCollisionConstraint</code></td></tr><tr><td>충돌 제한 부모</td><td><code>Class.BasePart</code> 또는 <code>None</code></td></tr><tr><td>충돌 제한 부품0</td><td><code>Class.BasePart</code></td></tr><tr><td>충돌 제한 부품1</td><td><code>Class.BasePart</code></td></tr></tbody>
키 | 유형 |
---|
코드 샘플
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
주요 부품 및 기타 부품 배열의 교차 기하에서 하나 이상의 PartOperations 을 생성합니다. 원시 Class.Part|Parts</
메인 부분의 다음 속성(part), 결과 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> Class.BasePart.Fr
다음 이미지 비교에서, IntersectAsync() 는 보라색 블록을 사용하여 결과 PartOperation 를 부품 간의 교차 기하구조로 해결합니다.
노트
Class.BasePart:IntersectAsync() 와 비교하여 이 메서드는 다음과 같이 다릅니다.
- 입력 부품은 배경 작업을 수행할 때 스케네 상위에 있지 않아도 됩니다.
- SplitApart 옵션이 true (기본)로 설정되면 각 고유한 바디는 자체 PartOperation에 반환됩니다.
- 반환된 각 부품은 주 부품의 좌표 공간에 있습니다. 즉, 반환된 모든 부품의 (0, 0, 0)는 반환된 신체중심이 아니어도 됩니다.
- 클라이언트에서 이 메서드를 호출할 수 있지만, 몇 가지 제한이 있습니다. 먼저, 현재 클라이언트에서 생성된 개체로 수행해야 합니다. 둘째, 클라이언트에서 서버로 복제할 수 없습니다.
원래 부품은 성공적인 작업 후에도 유지됩니다. 대부분의 경우 주 부품과 동일한 위치에 반환된 PartOperations 을 부모로 지정해야 합니다. 그런 다음 Class.Instance.Destroy|Destroy() 를 모든 원래 부품에 대해 수행하십시오.
기본적으로 결과 PartOperations 의 얼굴 색상은 원래 부품의 Color 속성에서 대출되지만, 특정 색으로 변경하려면 원래 부품의 UsePartColor 속성을 활성화할 수 있습니다.
교차 작업이 20,000개 이상의 삼각형을 포함하는 경우, 20,000개로 간소화됩니다. 이로 인해 코드 -14 에 오류가 발생합니다.
작업 계산 중에 주요 부품이 이동하면 주요 부품과 동일한 좌표 공간에 반환된 부품을 설정하여 주요 부품을 업데이트할 수 있습니다.If the main part is moving during the calculation of the operation, you can set the resulting parts to the updated CFrame of the main part, since the returned parts are in the same coordinate space as the main part.
이 메서드를 주 부품으로 사용하는 경우 Class.PartOperation:
매개 변수
주요 Part 또는 PartOperation 에서 작동합니다.
주요 부품과 교차할 부품 배열.
메서드에 대한 모든 컨트롤이 포함된 옵션 테이블:
- CollisionFidelity – 결과 부품에 있는 CollisionFidelity의 값.
- RenderFidelity – 결과 부품에 있는 RenderFidelity의 값.
- FluidFidelity – 결과 부품에 있는 FluidFidelity의 값.
- SplitApart – 개체를 모두 함께 유지하거나 적절하게 분할해야 하는지 여부를 조정합니다. 기본값은 true (분할)입니다.
반환
주 부품( Class.PartOperation|PartOperations)과 다른 부품( part)의 교차 기하에서 하나 이상의 Class.PartOperation|PartOperations를 수행합니다.
코드 샘플
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
주요 부품 미니스 기하구조가 다른 부품에 있는 경우 주 부품 PartOperations 을 하나 이상 만듭니다. 원시
메인 부분의 다음 속성(part), 결과 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> Class.BasePart.Fr
다음 이미지 비교에서, SubtractAsync() 은 파란색 실린더와 단위 블록을 포함하는 배열을 사용하여 호출됩니다. 결과적인 PartOperation 는 블록의 기하구조를 실린더의 기하구조와 결합하여 블록이 실린더의 기하구조에서 빠져 나오는
노트
Class.BasePart:SubtractAsync() 와 비교하여 이 메서드는 다음과 같이 차이가 납니다.
- 입력 부품은 배경 작업을 수행할 때 스케네 상위에 있지 않아도 됩니다.
- SplitApart 옵션이 true (기본)로 설정되면 각 고유한 바디는 자체 PartOperation에 반환됩니다.
- 반환된 각 부품은 주 부품의 좌표 공간에 있습니다. 즉, 반환된 모든 부품의 (0, 0, 0)는 반환된 신체중심이 아니어도 됩니다.
- 클라이언트에서 이 메서드를 호출할 수 있지만, 몇 가지 제한이 있습니다. 먼저, 현재 클라이언트에서 생성된 개체로 수행해야 합니다. 둘째, 클라이언트에서 서버로 복제할 수 없습니다.
원래 부품은 성공적인 작업 후에도 유지됩니다. 대부분의 경우 주 부품과 동일한 위치에 반환된 PartOperations 을 부모로 지정해야 합니다. 그런 다음 Class.Instance.Destroy|Destroy() 를 모든 원래 부품에 대해 수행하십시오.
기본적으로 결과 PartOperations 의 얼굴 색상은 원래 부품의 Color 속성에서 대출되지만, 특정 색으로 변경하려면 원래 부품의 UsePartColor 속성을 활성화할 수 있습니다.
뺄셈 연산이 20,000개 이상의 삼각형을 포함하는 경우, 20,000개로 간단화됩니다. 이로 인해 PartOperations 코드에 오류가 발생합니다.
작업 계산 중에 주요 부품이 이동하면 주요 부품과 동일한 좌표 공간에 반환된 부품을 설정하여 주요 부품을 업데이트할 수 있습니다.If the main part is moving during the calculation of the operation, you can set the resulting parts to the updated CFrame of the main part, since the returned parts are in the same coordinate space as the main part.
이 메서드를 주 부품으로 사용하는 경우 Class.PartOperation:
매개 변수
주요 Part 또는 PartOperation 에서 작동합니다.
메인 부품에서 뺄셈하려는 부품 배열.
메서드에 대한 모든 컨트롤이 포함된 옵션 테이블:
- CollisionFidelity – 결과 부품에 있는 CollisionFidelity의 값.
- RenderFidelity – 결과 부품에 있는 RenderFidelity의 값.
- FluidFidelity – 결과 부품에 있는 FluidFidelity의 값.
- SplitApart – 개체를 모두 함께 유지하거나 적절하게 분할해야 하는지 여부를 조정합니다. 기본값은 true (분할)입니다.
반환
주 부품의 기하학(PartOperations 또는 part 중 하나 이상)에서 다른 부품의 기하학를 제거한 하나 이상의 Class.PartOperation|PartOperations 수 있습니다.
코드 샘플
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
주요 부품 및 지정된 배열의 다른 부품에 점유된 기하구조를 기반으로 하나 이상의 PartOperations를 생성합니다. 원시 <
메인 부분의 다음 속성(part), 결과 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> Class.BasePart.Fr
다음 이미지 비교에서, UnionAsync() 는 파란색 블록을 사용하여 단순한 실린더를 포함하는 배열을 포함하는 호출됩니다. 결과적으로 PartOperation 는 부품의 결합된 기하 모양으로 해결됩니다.
노트
Class.BasePart:UnionAsync() 와 비교하여 이 메서드는 다음과 같이 다릅니다.
- 입력 부품은 배경 작업을 수행할 때 스케네 상위에 있지 않아도 됩니다.
- SplitApart 옵션이 true (기본)로 설정되면 각 고유한 바디는 자체 PartOperation에 반환됩니다.
- 반환된 각 부품은 주 부품의 좌표 공간에 있습니다. 즉, 반환된 모든 부품의 (0, 0, 0)는 반환된 신체중심이 아니어도 됩니다.
- 클라이언트에서 이 메서드를 호출할 수 있지만, 몇 가지 제한이 있습니다. 먼저, 현재 클라이언트에서 생성된 개체로 수행해야 합니다. 둘째, 클라이언트에서 서버로 복제할 수 없습니다.
원래 부품은 성공적인 작업 후에도 유지됩니다. 대부분의 경우 주 부품과 동일한 위치에 반환된 PartOperations 을 부모로 지정해야 합니다. 그런 다음 Class.Instance.Destroy|Destroy() 를 모든 원래 부품에 대해 수행하십시오.
기본적으로 결과 PartOperations 의 색은 원래 부품의 속성에서 대출되지만, 색을 변경하려면 원래 부품의 속성에서 Color 를 활성화할 수 있습니다.
연산자 연산이 20,000개 이상의 삼각형을 포함하는 경우 20,000으로 간단화됩니다. 이로 인해 코드 -14 에 오류가 발생합니다.
작업 계산 중에 주요 부품이 이동하면 주요 부품과 동일한 좌표 공간에 반환된 부품을 설정하여 주요 부품을 업데이트할 수 있습니다.If the main part is moving during the calculation of the operation, you can set the resulting parts to the updated CFrame of the main part, since the returned parts are in the same coordinate space as the main part.
이 메서드를 주 부품으로 사용하는 경우 Class.PartOperation:
매개 변수
주요 Part 또는 PartOperation 에서 작동합니다.
주 부품과 유니언할 부품 배열.
메서드에 대한 모든 컨트롤이 포함된 옵션 테이블:
- CollisionFidelity – 결과 부품에 있는 CollisionFidelity의 값.
- RenderFidelity – 결과 부품에 있는 RenderFidelity의 값.
- FluidFidelity – 결과 부품에 있는 FluidFidelity의 값.
- SplitApart – 개체를 모두 함께 유지하거나 적절하게 분할해야 하는지 여부를 조정합니다. 기본값은 true (분할)입니다.
반환
주 부품의 기하학(PartOperations 또는 다른 부품의 기하학)과 다른 부품의 기하학을 더한 값.
코드 샘플
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