GeometryService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Dienst, der geometrische Operationen enthält, die nicht direkt mit bestimmten Objekten verwandt sind.
Zusammenfassung
Methoden
Gibt eine Tabelle von Constraints und Attachments zurück, die du behalten kannst, zusammen mit ihren jeweiligen Eltern.
Erzeugt einen oder mehrere PartOperations aus der Intersektionsgeometrie eines Teils und anderen Teilen.
Erzeugt einen oder mehrere PartOperations von einem Teil, minus der Geometrie, die von anderen Teilen belegt ist.
Erzeugt einen oder mehrere PartOperations von einem Teil plus die Geometrie, die von anderen Teilen belegt ist.
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
Ein ursprüngliches Objekt, auf dem die Festkörpermodellierung ausgeführt wurde, z. B. part in UnionAsync() .
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.
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üssel | Typ |
---|
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üssel | Typ |
---|
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üssel | Typ |
---|
Code-Beispiele
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
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:
- 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.Base
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.
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
Haupt Part oder PartOperation zum Betrieb.
Matrix von teilen, mit denen die hauptfigur mit dem teilen interagiert.
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).
Rückgaben
Eine oder mehrere PartOperations von der Intersektionsgeometrie der Hauptteil ( part ) und der anderen Teile.
Code-Beispiele
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
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:
- 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.Base
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.
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
Haupt Part oder PartOperation zum Betrieb.
Matrix von teilen, die vom hauptteil abgezogen werden.
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).
Rückgaben
Eine oder mehrere PartOperations von der Geometrie des Hauptteils ( part ) minus der Geometrie der anderen Teile.
Code-Beispiele
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
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:
- 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.Base
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.
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
Haupt Part oder PartOperation zum Betrieb.
Matrix von teilen, mit denen die hauptfigur mit dem union-block verwendet wird.
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).
Rückgaben
Eine oder mehrere PartOperations von der Geometrie des Hauptteils ( part ) plus der Geometrie der anderen Teile.
Code-Beispiele
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