GeometryService

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Dienst

Dienst, der geometrische Operationen enthält, die nicht direkt mit bestimmten Objekten verwandt sind.

Zusammenfassung

Methoden

Eigenschaften

Methoden

CalculateConstraintsToPreserve

Gibt eine Tabelle von Constraints und Attachments zurück, die du behalten kannst, zusammen mit ihren jeweiligen Eltern. Wenn du über diese Tabelle Iteriere, kannst du entscheiden, ob du die empfohlenen Einschränkungen und Anbauten an ihre jeweiligen Eltern anstecken möchtest.

Beachten Sie, dass die options-Tabelle ein tolerance-Wert (Nummer) und/oder einen WeldConstraintPreserve-Wert ( 2> Enumerate.WeldConstraintsPreserve2> ) enthalten kann.

  • tolerance – Die Entfernung-Toleranz, im Zusammenhang mit der Attachment -Erhaltung, zwischen dem Anhang und dem nächsten Punkt auf der Originalteil-Oberfläche im Verhältnis zu dem nächsten Punkt auf der resultierenden Teil-Oberfläche. Wenn die resultierende Distanz nach der Solid-Modeling-Operation größ
  • weldConstraintPreserve – Ein Enum.WeldConstraintPreserve Wert, der beschreibt, wie WeldConstraints in der resultierenden Empfehlungstabelle erhalten bleiben.

Parameter

source: Instance

Ein ursprüngliches Objekt, auf dem die Festkörpermodellierung ausgeführt wurde, z. B. part in UnionAsync() .

destination: Array
options: Dictionary

Optionen-Tabelle für die Methode:

  • tolerance – Die Entfernung-Toleranz, im Zusammenhang mit der Attachment -Erhaltung, zwischen dem Anhang und dem nächsten Punkt auf der Originalteil-Oberfläche im Verhältnis zu dem nächsten Punkt auf der resultierenden Teil-Oberfläche. Wenn die resultierende Distanz nach der Solid-Modeling-Operation größ
  • weldConstraintPreserve – Ein Enum.WeldConstraintPreserve Wert, der beschreibt, wie WeldConstraints in der resultierenden Empfehlungstabelle erhalten bleiben.
Standardwert: "nil"

Rückgaben

Tabelle mit Informationen für allgemeine Fälle Constraints , NoCollisionConstraints und WeldConstraints . In Fällen, in denen ein 1> Class.附1> oder 4> Class.Constraints4> fallen sollte, wird sein jeweil

Für den allgemeinen Fall Constraints wie z. B. HingeConstraint :


<tbody>
<tr>
<td>Zubehör</td>
<td><code>Class.Attachment</code></td>
</tr>
<tr>
<td>Beschränkung</td>
<td><code>Class.Constraint</code></td>
</tr>
<tr>
<td>AnbautenElternteil</td>
<td><code>Class.BasePart</code> oder <code>nil</code></td>
</tr>
<tr>
<td>Konstruktions親</td>
<td><code>Class.BasePart</code> oder <code>nil</code></td>
</tr>
</tbody>
SchlüsselTyp

Für WeldConstraints :


<tbody>
<tr>
<td>Welld约束</td>
<td><code>Class.WeldConstraint</code></td>
</tr>
<tr>
<td>WeldLimit</td>
<td><code>Class.BasePart</code> oder <code>nil</code></td>
</tr>
<tr>
<td>Weld约束零件0</td>
<td><code>Class.BasePart</code></td>
</tr>
<tr>
<td>Welldстриkt1</td>
<td><code>Class.BasePart</code></td>
</tr>
</tbody>
SchlüsselTyp

Für NoCollisionConstraints :


<tbody>
<tr>
<td>NoCollisionLimit</td>
<td><code>Class.NoCollisionConstraint</code></td>
</tr>
<tr>
<td>NoCollisionLimit</td>
<td><code>Class.BasePart</code> oder <code>nil</code></td>
</tr>
<tr>
<td>NoCollisionLimit0</td>
<td><code>Class.BasePart</code></td>
</tr>
<tr>
<td>NoCollisionLimit1</td>
<td><code>Class.BasePart</code></td>
</tr>
</tbody>
SchlüsselTyp

Code-Beispiele

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

Angehalten

Erstellt eine oder mehrere PartOperations aus der übergeordneten Geometrie des Hauptteils und anderer Teile in der angegebenen Array. Nur primitive Parts und Class

Die folgenden Eigenschaften aus dem Hauptbereich ( part ) werden auf das resultierende PartOperations angewendet:

Im folgenden Bildvergleich wird IntersectAsync() mit dem lila Block und einer Reihe mit dem blauen Blöckeaufgerufen. Die resultierende PartOperation löst in eine Form der interessierenden Geometrie beider Teile.

Two block parts overlapping

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

<figcaption>Ergebende <code>Class.PartOperation</code></figcaption>

Notizen

  • Im Vergleich zu BasePart:IntersectAsync() , unterscheidet sich diese Methode wie folgt:

    • Die Eingabe-Teile müssen nicht in der Szene übergeordnet sein, was Hintergrund-Operationen ermöglicht.
    • Wenn die Option SplitApart auf true (Standard) gesetzt ist, wird jedem einzelnen Körper sein eigener PartOperation zurückgegeben.
    • Jeder der zurückgegebenen Teile befindet sich im Koordinatenraum der Hauptteile. Dies bedeutet, dass die (0,0,0) eines zurückgegebenen Teils nicht unbedingt in der Mitte seines Körpers sind.
    • Es ist möglich, diese Methode auf dem Client aufzurufen, aber mit einigen Einschränkungen. Zuerst muss sie mit Objekten erstellt auf dem Client getan werden. Zweitens gibt es keine Replikation auf client-Server.
  • Die ursprünglichen Teile bleiben nach einem erfolgreichen Betrieb intakt. In den meisten Fällen solltest du das zurückgegebene PartOperations an den selben Ort wie die Hauptteile übergeordnet, dann Destroy() alle ursprünglichen Teile.

  • Standardmäßig sind die Gesichtsfarben der resultierenden PartOperations von den Color Eigenschaften der ursprünglichen Teile, obwohl Sie ihre UsePartColor Eigenschaft ändern können, um sie in eine bestimmte Farbe zu ändern.

  • Wenn eine Intersektionser operation mit mehr als 20,000 dreieck ergeben würde, werden sie auf 20,000 beschränkt. Dies wird mit dem code PartOperations geschehen. Dies wird einen fehler mit -14 ergeben.

  • Wenn der Hauptteil während der Berechnung des Betriebs bewegt wird, können Sie die resultierenden Teile auf die aktualisierte CFrame des Hauptteils einstellen, da die zurückgegebenen Teile in demselben Koeordinatenraum wie die Hauptteil sind.

  • Wenn Sie diesen Methoden mit einem PartOperation als Hauptteil verwenden, können Sie die Ge

Parameter

part: Instance

Haupt Part oder PartOperation zum Betrieb.

parts: Array

Matrix von teilen, mit denen die hauptfigur mit dem teilen interagiert.

options: Dictionary

Optionstabelle, die alle Steuerelemente für die Methode enthält:

  • CollisionFidelity – Der Wert von CollisionFidelity in den resultierenden Teilen.
  • RenderFidelity – Der Wert von RenderFidelity in den resultierenden Teilen.
  • FluidFidelity – Der Wert von FluidFidelity in den resultierenden Teilen.
  • SplitApart –Boolean kontrolliert, ob die Objekte alle zusammengehalten oder richtig aufgeteilt werden sollen. Standard ist true (geteilt).
Standardwert: "nil"

Rückgaben

Eine oder mehrere PartOperations von der Intersektionsgeometrie der Hauptteil ( part ) und der anderen Teile.

Code-Beispiele

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

Angehalten

Erstellt eine oder mehrere PartOperations von der Hauptteile minus die Geometrie, die von anderen Teilen in der angegebenen Arraybelegt ist. Nur primitive Parts und

Die folgenden Eigenschaften aus dem Hauptbereich ( part ) werden auf das resultierende PartOperations angewendet:

Im folgenden Bildvergleich wird SubtractAsync() mit dem blauen Zylinder und einer Reihe mit der lila Blöckeenthalten. Die resultierende PartOperation löst in eine Form, die die Geometrie des Blöckeaus demjenigen des Zylinders enthält.

Longer block overlapping a cylinder

<figcaption>Separate Teile</figcaption>
Block part subtracted from cylinder

<figcaption>Ergebende <code>Class.PartOperation</code></figcaption>

Notizen

  • Im Vergleich zu BasePart:SubtractAsync() , unterscheidet sich diese Methode wie folgt:

    • Die Eingabe-Teile müssen nicht in der Szene übergeordnet sein, was Hintergrund-Operationen ermöglicht.
    • Wenn die Option SplitApart auf true (Standard) gesetzt ist, wird jedem einzelnen Körper sein eigener PartOperation zurückgegeben.
    • Jeder der zurückgegebenen Teile befindet sich im Koordinatenraum der Hauptteile. Dies bedeutet, dass die (0,0,0) eines zurückgegebenen Teils nicht unbedingt in der Mitte seines Körpers sind.
    • Es ist möglich, diese Methode auf dem Client aufzurufen, aber mit einigen Einschränkungen. Zuerst muss sie mit Objekten erstellt auf dem Client getan werden. Zweitens gibt es keine Replikation auf client-Server.
  • Die ursprünglichen Teile bleiben nach einem erfolgreichen Betrieb intakt. In den meisten Fällen solltest du das zurückgegebene PartOperations an den selben Ort wie die Hauptteile übergeordnet, dann Destroy() alle ursprünglichen Teile.

  • Standardmäßig sind die Gesichtsfarben der resultierenden PartOperations von den Color Eigenschaften der ursprünglichen Teile, obwohl Sie ihre UsePartColor Eigenschaft ändern können, um sie in eine bestimmte Farbe zu ändern.

  • Wenn eine Subtraktionser operation mit mehr als 20.000 dreieck mit mehr als 20.000 ergebnis, wird sie auf 20.000 beschleunigt. Dies wird mit code PartOperations einen fehler ergeben.

  • Wenn der Hauptteil während der Berechnung des Betriebs bewegt wird, können Sie die resultierenden Teile auf die aktualisierte CFrame des Hauptteils einstellen, da die zurückgegebenen Teile in demselben Koeordinatenraum wie die Hauptteil sind.

  • Wenn Sie diesen Methoden mit einem PartOperation als Hauptteil verwenden, können Sie die Ge

Parameter

part: Instance

Haupt Part oder PartOperation zum Betrieb.

parts: Array

Matrix von teilen, die vom hauptteil abgezogen werden.

options: Dictionary

Optionstabelle, die alle Steuerelemente für die Methode enthält:

  • CollisionFidelity – Der Wert von CollisionFidelity in den resultierenden Teilen.
  • RenderFidelity – Der Wert von RenderFidelity in den resultierenden Teilen.
  • FluidFidelity – Der Wert von FluidFidelity in den resultierenden Teilen.
  • SplitApart –Boolean kontrolliert, ob die Objekte alle zusammengehalten oder richtig aufgeteilt werden sollen. Standard ist true (geteilt).
Standardwert: "nil"

Rückgaben

Eine oder mehrere PartOperations von der Geometrie des Hauptteils ( part ) minus der Geometrie der anderen Teile.

Code-Beispiele

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

Angehalten

Erstellt eine oder mehrere PartOperations von der Hauptteile plus der Geometrie, die von anderen Teilen in der angegebenen Arraybelegt sind. Nur primitive Parts und Class.

Die folgenden Eigenschaften aus dem Hauptbereich ( part ) werden auf das resultierende PartOperations angewendet:

Im folgenden Bildvergleich wird UnionAsync() mit dem blauen Block und einer Reihe mit der lila Zylinder aufgerufen. Die resultierende PartOperation löst in eine Form der kombinierten Geometrie beider Teile.

Block and cylinder parts overlapping

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

<figcaption>Ergebende <code>Class.PartOperation</code></figcaption>

Notizen

  • Im Vergleich zu BasePart:UnionAsync() , unterscheidet sich diese Methode wie folgt:

    • Die Eingabe-Teile müssen nicht in der Szene übergeordnet sein, was Hintergrund-Operationen ermöglicht.
    • Wenn die Option SplitApart auf true (Standard) gesetzt ist, wird jedem einzelnen Körper sein eigener PartOperation zurückgegeben.
    • Jeder der zurückgegebenen Teile befindet sich im Koordinatenraum der Hauptteile. Dies bedeutet, dass die (0,0,0) eines zurückgegebenen Teils nicht unbedingt in der Mitte seines Körpers sind.
    • Es ist möglich, diese Methode auf dem Client aufzurufen, aber mit einigen Einschränkungen. Zuerst muss sie mit Objekten erstellt auf dem Client getan werden. Zweitens gibt es keine Replikation auf client-Server.
  • Die ursprünglichen Teile bleiben nach einem erfolgreichen Betrieb intakt. In den meisten Fällen solltest du das zurückgegebene PartOperations an den selben Ort wie die Hauptteile übergeordnet, dann Destroy() alle ursprünglichen Teile.

  • Standardmäßig sind die Farben des resultierenden PartOperations von den Color Eigenschaften der ursprünglichen Teile, obwohl Sie ihre UsePartColor Eigenschaft aktivieren können, um sie in eine bestimmte Farbe zu ändern.

  • Wenn eine UnionOperation in irgendeiner PartOperations mit mehr als 20.000 Dreieck ergibt, werden sie auf 20.000 beschränkt. Dies wird mit dem Code -14 zu einem Fehler führen.

  • Wenn der Hauptteil während der Berechnung des Betriebs bewegt wird, können Sie die resultierenden Teile auf die aktualisierte CFrame des Hauptteils einstellen, da die zurückgegebenen Teile in demselben Koeordinatenraum wie die Hauptteil sind.

  • Wenn Sie diesen Methoden mit einem PartOperation als Hauptteil verwenden, können Sie die Ge

Parameter

part: Instance

Haupt Part oder PartOperation zum Betrieb.

parts: Array

Matrix von teilen, mit denen die hauptfigur mit dem union-block verwendet wird.

options: Dictionary

Optionstabelle, die alle Steuerelemente für die Methode enthält:

  • CollisionFidelity – Der Wert von CollisionFidelity in den resultierenden Teilen.
  • RenderFidelity – Der Wert von RenderFidelity in den resultierenden Teilen.
  • FluidFidelity – Der Wert von FluidFidelity in den resultierenden Teilen.
  • SplitApart –Boolean kontrolliert, ob die Objekte alle zusammengehalten oder richtig aufgeteilt werden sollen. Standard ist true (geteilt).
Standardwert: "nil"

Rückgaben

Eine oder mehrere PartOperations von der Geometrie des Hauptteils ( part ) plus der Geometrie der anderen Teile.

Code-Beispiele

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

Ereignisse