GeometryService

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Não criável
Serviço

Servicio que contiene operaciones geométricas no relacionadas directamente con objetos específicos.

Resumo

Métodos

Propriedades

Métodos

CalculateConstraintsToPreserve

Restaura una tabla de Constraints y Attachments que puedes elegir para conservar, junto con sus padres respectivos. Iterar sobre esta tabla te permite decidir qué reaparecer los límites recomendados y los accesorios a sus padres respectivos.

Nota que la tabla options puede contener un valor de tolerance (número) y/o un valor de WeldConstraintPreserve (número).

  • tolerance – La distancia de tolerancia, en lo que respecta a la preservación de Attachment , entre la parte original y la parte más cercana en la superficie de la parte resultante, en relación con la parte más cercana en la superficie de la parte resultante. Si la distancia de tolerancia después de la operación de modelado sólido es mayor que este valor
  • weldConstraintPreserve – Un valor de Enum.WeldConstraintPreserve – Un valor de WeldConstraints – Un valor de 0> Class.WeldConstruct|WeldConstraints0> – Un valor de 3> Class.WeldConstruct|WeldConstraints3> – Un valor de 6> Class.WeldConstruct|WeldConstraints6> – Un valor de weldConstraintPreserve9> – Un valor de weldConstraintPreserve2> – Un valor de

Parâmetros

source: Instance

Un objeto original en el que se realizó la operación de modelado sólido, por ejemplo part en UnionAsync() .

destination: Array
options: Dictionary

Tabla de opciones para el método:

  • tolerance – La distancia de tolerancia, en lo que respecta a la preservación de Attachment , entre la parte original y la parte más cercana en la superficie de la parte resultante, en relación con la parte más cercana en la superficie de la parte resultante. Si la distancia de tolerancia después de la operación de modelado sólido es mayor que este valor
  • weldConstraintPreserve – Un valor de Enum.WeldConstraintPreserve – Un valor de WeldConstraints – Un valor de 0> Class.WeldConstruct|WeldConstraints0> – Un valor de 3> Class.WeldConstruct|WeldConstraints3> – Un valor de 6> Class.WeldConstruct|WeldConstraints6> – Un valor de weldConstraintPreserve9> – Un valor de weldConstraintPreserve2> – Un valor de
Valor Padrão: "nil"

Devolução

Tabla que contiene información para general caso Constraints , NoCollisionConstraints y WeldConstraints . En los casos en que un 1> Class.Attachment1> o 4> Class.Constructor4> debe ser soltado, su padre

Para casos generales Constraints como HingeConstraint :


<tbody>
<tr>
<td>Accesorio</td>
<td><code>Clase.Attachment</code></td>
</tr>
<tr>
<td>Con restricción</td>
<td><code>Clase.Limitación</code></td>
</tr>
<tr>
<td>Adjunto padre</td>
<td><code>Clase.BasePart</code> o <code>nulo</code></td>
</tr>
<tr>
<td>Padre de restricciones</td>
<td><code>Clase.BasePart</code> o <code>nulo</code></td>
</tr>
</tbody>
ClaveTipo

Para WeldConstraints :


<tbody>
<tr>
<td>Con约束</td>
<td><code>Clase.WeldConstraint</code></td>
</tr>
<tr>
<td>Padre de Con restricciones de soldadura</td>
<td><code>Clase.BasePart</code> o <code>nulo</code></td>
</tr>
<tr>
<td>Parte de soldadura</td>
<td><code>Clase.BasePart</code></td>
</tr>
<tr>
<td>Parte de soldadura 1</td>
<td><code>Clase.BasePart</code></td>
</tr>
</tbody>
ClaveTipo

Para NoCollisionConstraints :


<tbody>
<tr>
<td>NoCollisionLimit</td>
<td><code>Clase.NoCollisionConstraint</code></td>
</tr>
<tr>
<td>Padre de NoCollisionReason</td>
<td><code>Clase.BasePart</code> o <code>nulo</code></td>
</tr>
<tr>
<td>NoCollisionLimitPart0</td>
<td><code>Clase.BasePart</code></td>
</tr>
<tr>
<td>NoCollisionLimitadaParte1</td>
<td><code>Clase.BasePart</code></td>
</tr>
</tbody>
ClaveTipo

Amostras de código

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

Rendimentos

Crea una o más PartOperations desde la geometría intersección de la parte principal y otras partes en el matriz/listade datos dado. Solo son admitidas las primitivas Parts y

Las siguientes propiedades de la parte principal ( part ) se aplican a la resultante PartOperations :

En la siguiente comparación de imágenes, IntersectAsync() es llamado usando el bloque morado y un conjunto de bloques que contienen el bloque azul. El resultado PartOperation resuelve en una forma de la geometría de intersección de ambas partes.

Two block parts overlapping

<figcaption>Separate parts.</figcaption>
Parts intersected into a new solid model

<figcaption>Operación de Clase.PartResultante</figcaption>

Notas

  • En comparación con BasePart:IntersectAsync() , este método difiere de la siguiente manera:

    • Las partes de entrada no necesitan ser padreas para la escena, lo que permite operaciones de fondo.
    • Cuando la opción SplitApart está configurada como true (por defecto), cada cuerpo distinto se devolverá en su propio PartOperation .
    • Cada una de las partes devueltas está en el espacio de coordenada de la parte principal. Esto significa que el (0, 0, 0) de cualquier parte devuelta no está necesariamente en el centro de su cuerpo.
    • Es posible llamar este método en el cliente, pero con algunas limitaciones. Primero, actualmente debe hacerse con objetos creados en el cliente. Segundo, no hay replicación disponible desde el cliente al servidor.
  • Las partes originales se mantienen intactas después de un éxito. En la mayoría de los casos, deberías padre el PartOperations devuelto en el mismo lugar que la parte principal, luego Destroy() todas las partes originales.

  • Por defecto, las colores de la cara de los resultados PartOperations se借gan de la propiedad Color de las partes originales, aunque puede habilitar su propiedad UsePartColor para cambiarlas a un color específico.

  • Si una operación de intersección resultara en cualquier PartOperations con más de 20,000 triángulos, se simplificarán a 20,000. Esto resultará en un error con el código -14 .

  • Si la parte principal se está moviendo durante la計算 de la operación, puede establecer las partes resultantes en el resultado CFrame de la parte principal, ya que las partes devueltas están en el mismo espacio de coordenadas que la parte principal.

  • Si está utilizando este método con un PartOperation como parte principal, puede sustituir la ge

Parâmetros

part: Instance

Main Part o PartOperation para operar en.

parts: Array

Matriz de partes para intersección con la parte principal.

options: Dictionary

Tabla de opciones que contiene todos los controles para el método:

  • CollisionFidelity – El valor de CollisionFidelity en las partes resultantes.
  • RenderFidelity – El valor de RenderFidelity en las partes resultantes.
  • FluidFidelity – El valor de FluidFidelity en las partes resultantes.
  • SplitApart –Booleano para controlar si los objetos deben mantenerse juntos o dividirse correctamente. Por defecto es true ( dividir).
Valor Padrão: "nil"

Devolução

Una o más PartOperations de la geometría intersección de la parte principal ( part ) y las otras partes.

Amostras de código

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

Rendimentos

Crea una o más PartOperations desde la parte principal minuscula la geometría ocupada por otras partes en el matriz/listadado. Solo son compatibles con Parts o

Las siguientes propiedades de la parte principal ( part ) se aplican a la resultante PartOperations :

En la siguiente comparación de imágenes, SubtractAsync() es llamado utilizando el cilindro azul y un conjunto de arreglos que contienen el bloquesmorado. El resultado PartOperation resuelve en una forma que omite la geometría del bloquesde ese del cilindro.

Longer block overlapping a cylinder

<figcaption>Separate parts.</figcaption>
Block part subtracted from cylinder

<figcaption>Operación de Clase.PartResultante</figcaption>

Notas

  • En comparación con BasePart:SubtractAsync() , este método difiere de la siguiente manera:

    • Las partes de entrada no necesitan ser padreas para la escena, lo que permite operaciones de fondo.
    • Cuando la opción SplitApart está configurada como true (por defecto), cada cuerpo distinto se devolverá en su propio PartOperation .
    • Cada una de las partes devueltas está en el espacio de coordenada de la parte principal. Esto significa que el (0, 0, 0) de cualquier parte devuelta no está necesariamente en el centro de su cuerpo.
    • Es posible llamar este método en el cliente, pero con algunas limitaciones. Primero, actualmente debe hacerse con objetos creados en el cliente. Segundo, no hay replicación disponible desde el cliente al servidor.
  • Las partes originales se mantienen intactas después de un éxito. En la mayoría de los casos, deberías padre el PartOperations devuelto en el mismo lugar que la parte principal, luego Destroy() todas las partes originales.

  • Por defecto, las colores de la cara de los resultados PartOperations se借gan de la propiedad Color de las partes originales, aunque puede habilitar su propiedad UsePartColor para cambiarlas a un color específico.

  • Si una operación de restar resultara en cualquier PartOperations con más de 20,000 triángulos, se simplificarán a 20,000. Esto resultará en un error con el código -14 .

  • Si la parte principal se está moviendo durante la計算 de la operación, puede establecer las partes resultantes en el resultado CFrame de la parte principal, ya que las partes devueltas están en el mismo espacio de coordenadas que la parte principal.

  • Si está utilizando este método con un PartOperation como parte principal, puede sustituir la ge

Parâmetros

part: Instance

Main Part o PartOperation para operar en.

parts: Array

Matriz de partes para restar de la parte principal.

options: Dictionary

Tabla de opciones que contiene todos los controles para el método:

  • CollisionFidelity – El valor de CollisionFidelity en las partes resultantes.
  • RenderFidelity – El valor de RenderFidelity en las partes resultantes.
  • FluidFidelity – El valor de FluidFidelity en las partes resultantes.
  • SplitApart –Booleano para controlar si los objetos deben mantenerse juntos o dividirse correctamente. Por defecto es true ( dividir).
Valor Padrão: "nil"

Devolução

Uno o más PartOperations de la geometría de la parte principal ( part ) minuscula la geometría ocupada por las otras partes.

Amostras de código

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

Rendimentos

Crea una o más PartOperations desde la parte principal más la geometría ocupada por otras partes en el matriz/listadado. Solo son compatibles con Parts y Class

Las siguientes propiedades de la parte principal ( part ) se aplican a la resultante PartOperations :

En la siguiente comparación de imágenes, UnionAsync() se llama utilizando el bloque azul y un conjunto de bloques que contiene el cilindro morado. El resultado PartOperation se resuelve en una forma de la geometría combinada de ambas partes.

Block and cylinder parts overlapping

<figcaption>Separate parts.</figcaption>
Parts joined together into a single solid union

<figcaption>Operación de Clase.PartResultante</figcaption>

Notas

  • En comparación con BasePart:UnionAsync() , este método difiere de la siguiente manera:

    • Las partes de entrada no necesitan ser padreas para la escena, lo que permite operaciones de fondo.
    • Cuando la opción SplitApart está configurada como true (por defecto), cada cuerpo distinto se devolverá en su propio PartOperation .
    • Cada una de las partes devueltas está en el espacio de coordenada de la parte principal. Esto significa que el (0, 0, 0) de cualquier parte devuelta no está necesariamente en el centro de su cuerpo.
    • Es posible llamar este método en el cliente, pero con algunas limitaciones. Primero, actualmente debe hacerse con objetos creados en el cliente. Segundo, no hay replicación disponible desde el cliente al servidor.
  • Las partes originales se mantienen intactas después de un éxito. En la mayoría de los casos, deberías padre el PartOperations devuelto en el mismo lugar que la parte principal, luego Destroy() todas las partes originales.

  • Por defecto, los colores de los resultados de PartOperations se prestan de la propiedad Color de las partes originales, aunque puede habilitar su propiedad UsePartColor para cambiarlos a un color específico.

  • Si una operación de unión resultara en cualquier PartOperations con más de 20,000 triángulos, se simplificarán a 20,000. Esto resultará en un error con el código -14 .

  • Si la parte principal se está moviendo durante la計算 de la operación, puede establecer las partes resultantes en el resultado CFrame de la parte principal, ya que las partes devueltas están en el mismo espacio de coordenadas que la parte principal.

  • Si está utilizando este método con un PartOperation como parte principal, puede sustituir la ge

Parâmetros

part: Instance

Main Part o PartOperation para operar en.

parts: Array

Matriz de partes para unirse con la parte principal.

options: Dictionary

Tabla de opciones que contiene todos los controles para el método:

  • CollisionFidelity – El valor de CollisionFidelity en las partes resultantes.
  • RenderFidelity – El valor de RenderFidelity en las partes resultantes.
  • FluidFidelity – El valor de FluidFidelity en las partes resultantes.
  • SplitApart –Booleano para controlar si los objetos deben mantenerse juntos o dividirse correctamente. Por defecto es true ( dividir).
Valor Padrão: "nil"

Devolução

Uno o más PartOperations de la geometría de la parte principal ( part ) más la geometría ocupada por las otras partes.

Amostras de código

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

Eventos