GeometryService

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

만들 수 없음
서비스

특정 개체와 직접 관련이 없는 지오메트리 연산을 수행하는 서비스.

요약

메서드

속성

메서드

CalculateConstraintsToPreserve

Class.Constraint|Constraints 및 Attachments 와 같은 테이블을 반환하지만 부모와 함께 보관할 수 있는 테이블을 返합니다. 이 테이블을 반복하면 권장되는 제약 조건 및 부모에 부착하는 것을 결정할 수 있습니다.

Options 테이블에 값 tolerance 개수(수) 및/또는 WeldConstraintPreserve 값( 1>Enumerate.WeldConstraintsPreserve1> )을 포함할 수 있습니다.

  • tolerance – 부품과 원본 부품 표면 사이의 거리 관련 부품 유지 보존 시의 오차 정도. 결과 부품 유지 보존 오차가 이 값보다 큰 경우 결과 부품의 부모 Attachment
  • weldConstraintPreserve – A Enum.WeldConstraintPreserve 열거 값, 결과 권장 테이블에서 WeldConstraints를 보존하는 방법을 설명합니다.

매개 변수

source: Instance

고체 모델링 작업이 수행된 원래 개체, 예를 들어 partUnionAsync()입니다.

destination: Array
options: Dictionary

메서드에 대한 옵션 테이블:

  • tolerance – 부품과 원본 부품 표면 사이의 거리 관련 부품 유지 보존 시의 오차 정도. 결과 부품 유지 보존 오차가 이 값보다 큰 경우 결과 부품의 부모 Attachment
  • weldConstraintPreserve – A Enum.WeldConstraintPreserve 열거 값, 결과 권장 테이블에서 WeldConstraints를 보존하는 방법을 설명합니다.
기본값: "nil"

반환

일반적인 경우 Constraints , NoCollisionConstraintsWeldConstraints 을 포함하는 테이블. 충돌 불가 충돌 불가 충돌 불가 충돌 불가 충돌 불가 충돌

일반적인 경우 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>
유형

코드 샘플

Preserve Constraints

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에 적용됩니다.

다음 이미지 비교에서, IntersectAsync() 는 보라색 블록을 사용하여 결과 PartOperation 를 부품 간의 교차 기하구조로 해결합니다.

Two block parts overlapping

<figcaption>별도 부품</figcaption>
Parts intersected into a new solid model

<figcaption>Class.PartOperation 결과</figcaption>

노트

  • 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: Instance

주요 Part 또는 PartOperation 에서 작동합니다.

parts: Array

주요 부품과 교차할 부품 배열.

options: Dictionary

메서드에 대한 모든 컨트롤이 포함된 옵션 테이블:

  • CollisionFidelity – 결과 부품에 있는 CollisionFidelity의 값.
  • RenderFidelity – 결과 부품에 있는 RenderFidelity의 값.
  • FluidFidelity – 결과 부품에 있는 FluidFidelity의 값.
  • SplitApart – 개체를 모두 함께 유지하거나 적절하게 분할해야 하는지 여부를 조정합니다. 기본값은 true (분할)입니다.
기본값: "nil"

반환

주 부품( Class.PartOperation|PartOperations)과 다른 부품( part)의 교차 기하에서 하나 이상의 Class.PartOperation|PartOperations를 수행합니다.

코드 샘플

GeometryService:IntersectAsync()

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에 적용됩니다.

다음 이미지 비교에서, SubtractAsync() 은 파란색 실린더와 단위 블록을 포함하는 배열을 사용하여 호출됩니다. 결과적인 PartOperation 는 블록의 기하구조를 실린더의 기하구조와 결합하여 블록이 실린더의 기하구조에서 빠져 나오는

Longer block overlapping a cylinder

<figcaption>별도 부품</figcaption>
Block part subtracted from cylinder

<figcaption>Class.PartOperation 결과</figcaption>

노트

  • 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: Instance

주요 Part 또는 PartOperation 에서 작동합니다.

parts: Array

메인 부품에서 뺄셈하려는 부품 배열.

options: Dictionary

메서드에 대한 모든 컨트롤이 포함된 옵션 테이블:

  • CollisionFidelity – 결과 부품에 있는 CollisionFidelity의 값.
  • RenderFidelity – 결과 부품에 있는 RenderFidelity의 값.
  • FluidFidelity – 결과 부품에 있는 FluidFidelity의 값.
  • SplitApart – 개체를 모두 함께 유지하거나 적절하게 분할해야 하는지 여부를 조정합니다. 기본값은 true (분할)입니다.
기본값: "nil"

반환

주 부품의 기하학(PartOperations 또는 part 중 하나 이상)에서 다른 부품의 기하학를 제거한 하나 이상의 Class.PartOperation|PartOperations 수 있습니다.

코드 샘플

GeometryService:SubtractAsync()

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에 적용됩니다.

다음 이미지 비교에서, UnionAsync() 는 파란색 블록을 사용하여 단순한 실린더를 포함하는 배열을 포함하는 호출됩니다. 결과적으로 PartOperation 는 부품의 결합된 기하 모양으로 해결됩니다.

Block and cylinder parts overlapping

<figcaption>별도 부품</figcaption>
Parts joined together into a single solid union

<figcaption>Class.PartOperation 결과</figcaption>

노트

  • 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: Instance

주요 Part 또는 PartOperation 에서 작동합니다.

parts: Array

주 부품과 유니언할 부품 배열.

options: Dictionary

메서드에 대한 모든 컨트롤이 포함된 옵션 테이블:

  • CollisionFidelity – 결과 부품에 있는 CollisionFidelity의 값.
  • RenderFidelity – 결과 부품에 있는 RenderFidelity의 값.
  • FluidFidelity – 결과 부품에 있는 FluidFidelity의 값.
  • SplitApart – 개체를 모두 함께 유지하거나 적절하게 분할해야 하는지 여부를 조정합니다. 기본값은 true (분할)입니다.
기본값: "nil"

반환

주 부품의 기하학(PartOperations 또는 다른 부품의 기하학)과 다른 부품의 기하학을 더한 값.

코드 샘플

GeometryService:UnionAsync()

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

이벤트