GeometryService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Belirli nesnelerle ilgisi olmayan geometrik işlemleri içeren hizmet.
Özet
Özellikler
Yöntemler
Class.Constructor|Constraints ve Attachments tablosunu döndürür, bunların ebeveynleriyle birlikte korunmasını seçebilirsiniz.
Bir veya daha fazla PartOperations bir parçanın ve diğer parçaların kesişiminde oluşturur.
Diğer parçalardan alınan geometriyi azaltarak bir veya daha fazla PartOperations oluşturur.
Bir veya daha fazla PartOperations oluşturur, diğer parçaların kapladığı geometri dahil.
Özellikler
Yöntemler
CalculateConstraintsToPreserve
Onu korumak için Constraints ve Attachments tablosunu içerir. Bu tabloyu itecek etkisiyle gezinmek, onların ebeveynleriyle birlikte korumak için tavsiye edilen kısıtlamaları ve eklentileri etkiler. Bu tabloyu gezinmek, onların ebeveynleriyle birlikte korumak için tavsiye edilen kısıtlam
Not et ki options tabelası bir tolerance değeri (sayı) ve/veya bir WeldConstraintPreserve değeri ( 1>Enumerate.WeldConstraintsPreserve1> ) içerebilir.
- tolerance – mesafe toleransı, bağlantı ve en yakın nokta arasındaki mesafe korumasına ilişkin olarak, Attachment koruması arasındaki mesafe korumasına ilişkin olarak, Parent ba
- weldConstraintPreserve – Bir Enum.WeldConstraintPreserve öneri tablosunda korunan şekli ifade eden bir WeldConstraints kaydı.
Parametreler
Solids olarak adlandırılan özgün bir nesne, örneğin part içinde UnionAsync() içinde yapıldı.
Yöntem için seçenek tablosu:
- tolerance – mesafe toleransı, bağlantı ve en yakın nokta arasındaki mesafe korumasına ilişkin olarak, Attachment koruması arasındaki mesafe korumasına ilişkin olarak, Parent ba
- weldConstraintPreserve – Bir Enum.WeldConstraintPreserve öneri tablosunda korunan şekli ifade eden bir WeldConstraints kaydı.
Dönüşler
Genel kasa için bilgi içeren masa Constraints , NoCollisionConstraints ve WeldConstraints . İstek düşürüldüğünde, onun ebeveyni 1> nil1> olacaktır.
Genel durumda Constraints türüne sahip olmak gibi şeyler için genel kullanım.
<tbody><tr><td>Eklentiler</td><td><code>Class.Attachment</code></td></tr><tr><td>Kısıtlayıcı</td><td><code>Sınıf Sınırı</code></td></tr><tr><td>Eklentilerin Ailesi</td><td><code>Class.BasePart</code> veya <code>nil</code></td></tr><tr><td>SınırAbi</td><td><code>Class.BasePart</code> veya <code>nil</code></td></tr></tbody>
Anahtar | Tür |
---|
For WeldConstraints :
<tbody><tr><td>Kaynak约束</td><td><code>Class.WeldConstraint</code></td></tr><tr><td>Kaynak Şekillendirici Ebeveyn</td><td><code>Class.BasePart</code> veya <code>nil</code></td></tr><tr><td>Kaynaklama Kısıtlayıcı Parçası0</td><td><code>Class.BasePart</code></td></tr><tr><td>Kaynaklama Kısıtlayıcı Parçası1</td><td><code>Class.BasePart</code></td></tr></tbody>
Anahtar | Tür |
---|
For NoCollisionConstraints :
<tbody><tr><td>Çarpışma Olmaz</td><td><code>Class.NoCollisionConstraint</code></td></tr><tr><td>Çarpışma Olmaz</td><td><code>Class.BasePart</code> veya <code>nil</code></td></tr><tr><td>Çarpışma Olmazının Parçası0</td><td><code>Class.BasePart</code></td></tr><tr><td>Çarpışma Kısıtlayıcısı 1</td><td><code>Class.BasePart</code></td></tr></tbody>
Anahtar | Tür |
---|
Kod Örnekleri
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
Ana bölümün ve diğer bölümlerin geometrisinin kesiştiği noktadan PartOperations oluşturur. Sadece ilkel Class.Part|
Aşağıdaki özelliklerden ana kısımdan ( part ) uygulanan sonuç PartOperations :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|ElasticityWeight0> , 3> Class.BasePart.
Aşağıdaki görsel karşılaştırmasında, IntersectAsync() purple blok ve bir blue blok içeren bir matris kullanarak adlandırılır. Sonuçta PartOperation şekillenir, her iki parçanın da kesişen geometrisinin şeklini alır.
Notlar
Class.BasePart:IntersectAsync() ile karşılaştırıldığında, bu yöntem şu şekilde farklı:
- Giriş parçalarının sahneye bağlanması gerekmez, böylece arka plan işlemleri için izin verilir.
- SplitApart seçeneği true (Varsayılan) olarak ayarlandığında, her bir ayrı beden kendi PartOperation 'ında döndürülür.
- Döndürülen her bir parçanın yerleştirme alanı ana bölümün koordinat alanındadır. Bu, her döndürülen herhangi bir parçanın (0, 0, 0) merkezinde olmadığı anlamına gelir.
- Bu yöntemi kliyente çağırmanız mümkündür, ancak bazı sınırlamalarla. İlk olarak, kliyente oluşturulan nesneler ile şimdi yapılmalıdır. İkincisi, kliyente sunucuya kopyalama mevcut değildir.
Orijinal parçalar başarılı bir işlemden sonra hasar görmez. Çoğu durumda, önbelleğe döndürülen PartOperations ile aynı yere ebeveyn olmalısınız, ardından tüm orijinal parçaları yok etmek için Destroy() .
Varsayılan olarak, sonuçta oluşturulan PartOperations 'in yüz renkleri, orijinal parçaların Color özelliğinden ödünç alınmıştır, ancak onları belirli bir renge değiştirmek için UsePartColor özelliğini etkinleşt
Eğer bir kesişim işlemi 20.000'den fazla üçgenle sonuçlanırsa, kesişim işlemi 20.000 olarak basitlendiğinde hata oluşurur. Bu, kod ile PartOperations arasında bir hata oluşur.
Ana bölümün işlemini hesaplarken hareket ediyorsa, döndürülen bölümleri ana bölümün güncellenmiş CFrame ile ayarlayabilirsiniz, çünkü döndürülen bölümler ana bölümün aynı koordinat alanındadır.
Bu yöntemi kullanırken bir PartOperation kullanarak
Parametreler
Ana Part veya PartOperation üzerinde çalışmak için.
Ana bölümle etkileşim kuracak parçaların matrisi.
Yöntem için tüm kontrolleri içeren seçenek tablosu:
- CollisionFidelity – Sonuçta bölümlerde CollisionFidelity ile olan çarpışma değerini.
- RenderFidelity – Sonuçta oluşturulan parçalardaki RenderFidelity değerinin.
- FluidFidelity – Sonuçta bir parçadaki FluidFidelity değerinin.
- SplitApart – Booletoğlu objelerin bütünü bir arada tutulupya dağıtılmasını mı kontrol edecek yoksa ayrı ayrı dağıtılmasını mı kontrol edecek.Varsayılan true (ayrılma).
Dönüşler
Ana bölümün ( PartOperations ) ve diğer bölümlerin ortak geometrisinden bir veya daha fazla part .
Kod Örnekleri
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
Ana parçadan önceki PartOperations den bir veya daha fazla Parts veya PartOperations oluşt
Aşağıdaki özelliklerden ana kısımdan ( part ) uygulanan sonuç PartOperations :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|ElasticityWeight0> , 3> Class.BasePart.
Aşağıdaki görsel karşılaştırmasında, SubtractAsync() küresi mavi silindir ve mor bloğu içeren bir matris kullanarak adlandırılır. Sonuçta PartOperation şekillenir, bu blokun küresi üzerindeki geometriden oluşan bir şekle şekillenir.
Notlar
Class.BasePart:SubtractAsync() ile karşılaştırıldığında, bu yöntem şu şekilde farklı:
- Giriş parçalarının sahneye bağlanması gerekmez, böylece arka plan işlemleri için izin verilir.
- SplitApart seçeneği true (Varsayılan) olarak ayarlandığında, her bir ayrı beden kendi PartOperation 'ında döndürülür.
- Döndürülen her bir parçanın yerleştirme alanı ana bölümün koordinat alanındadır. Bu, her döndürülen herhangi bir parçanın (0, 0, 0) merkezinde olmadığı anlamına gelir.
- Bu yöntemi kliyente çağırmanız mümkündür, ancak bazı sınırlamalarla. İlk olarak, kliyente oluşturulan nesneler ile şimdi yapılmalıdır. İkincisi, kliyente sunucuya kopyalama mevcut değildir.
Orijinal parçalar başarılı bir işlemden sonra hasar görmez. Çoğu durumda, önbelleğe döndürülen PartOperations ile aynı yere ebeveyn olmalısınız, ardından tüm orijinal parçaları yok etmek için Destroy() .
Varsayılan olarak, sonuçta oluşturulan PartOperations 'in yüz renkleri, orijinal parçaların Color özelliğinden ödünç alınmıştır, ancak onları belirli bir renge değiştirmek için UsePartColor özelliğini etkinleşt
Eğer bir çıkarma işlemi 20.000'den fazla üçgenle sonuçlanırsa, onlar 20.000 olarak basitlendi. Bu, kod ile PartOperations sonucunu verir.
Ana bölümün işlemini hesaplarken hareket ediyorsa, döndürülen bölümleri ana bölümün güncellenmiş CFrame ile ayarlayabilirsiniz, çünkü döndürülen bölümler ana bölümün aynı koordinat alanındadır.
Bu yöntemi kullanırken bir PartOperation kullanarak
Parametreler
Ana Part veya PartOperation üzerinde çalışmak için.
Ana parçadan düşürülmesi gereken parçaların matrisi.
Yöntem için tüm kontrolleri içeren seçenek tablosu:
- CollisionFidelity – Sonuçta bölümlerde CollisionFidelity ile olan çarpışma değerini.
- RenderFidelity – Sonuçta oluşturulan parçalardaki RenderFidelity değerinin.
- FluidFidelity – Sonuçta bir parçadaki FluidFidelity değerinin.
- SplitApart – Booletoğlu objelerin bütünü bir arada tutulupya dağıtılmasını mı kontrol edecek yoksa ayrı ayrı dağıtılmasını mı kontrol edecek.Varsayılan true (ayrılma).
Dönüşler
Ana parçanın geometrisinden bir veya daha fazla PartOperations kaynaklanan bir parçadır ( part ) diğer parçaların geometrisinden düşük.
Kod Örnekleri
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
Ana parçadan veya verilen arkadaşın başka bir parçasının işgali alanından bir veya daha fazla PartOperations oluşturur. Sadece il
Aşağıdaki özelliklerden ana kısımdan ( part ) uygulanan sonuç PartOperations :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|ElasticityWeight0> , 3> Class.BasePart.
Aşağıdaki görsel karşılaştırmasında, UnionAsync() ün mor silindir içeren bir matrisi kullanarak adlandırılır. Sonuçta PartOperation şekillenir, her iki parçanın birleşik geometrisinin bir şeklini oluşturur.
Notlar
Class.BasePart:UnionAsync() ile karşılaştırıldığında, bu yöntem şu şekilde farklı:
- Giriş parçalarının sahneye bağlanması gerekmez, böylece arka plan işlemleri için izin verilir.
- SplitApart seçeneği true (Varsayılan) olarak ayarlandığında, her bir ayrı beden kendi PartOperation 'ında döndürülür.
- Döndürülen her bir parçanın yerleştirme alanı ana bölümün koordinat alanındadır. Bu, her döndürülen herhangi bir parçanın (0, 0, 0) merkezinde olmadığı anlamına gelir.
- Bu yöntemi kliyente çağırmanız mümkündür, ancak bazı sınırlamalarla. İlk olarak, kliyente oluşturulan nesneler ile şimdi yapılmalıdır. İkincisi, kliyente sunucuya kopyalama mevcut değildir.
Orijinal parçalar başarılı bir işlemden sonra hasar görmez. Çoğu durumda, önbelleğe döndürülen PartOperations ile aynı yere ebeveyn olmalısınız, ardından tüm orijinal parçaları yok etmek için Destroy() .
Varsayılan olarak, sonuçta oluşturulan renkler, orijinal parçaların PartOperations özelliğinden ödünç alınır, ancak onları Color özelliğine değiştirmek için onları özel bir renge değiştirebilirsiniz.
Bir Birliğin işlemi 20.000'den fazla üçgenle sonuçlandıysa, işlem 20.000 olarak basitleştirilecek. Bu, kod ile PartOperations ile sonuçlanacaktır.
Ana bölümün işlemini hesaplarken hareket ediyorsa, döndürülen bölümleri ana bölümün güncellenmiş CFrame ile ayarlayabilirsiniz, çünkü döndürülen bölümler ana bölümün aynı koordinat alanındadır.
Bu yöntemi kullanırken bir PartOperation kullanarak
Parametreler
Ana Part veya PartOperation üzerinde çalışmak için.
Ana bölümle birleştirilecek parçaların matrisi.
Yöntem için tüm kontrolleri içeren seçenek tablosu:
- CollisionFidelity – Sonuçta bölümlerde CollisionFidelity ile olan çarpışma değerini.
- RenderFidelity – Sonuçta oluşturulan parçalardaki RenderFidelity değerinin.
- FluidFidelity – Sonuçta bir parçadaki FluidFidelity değerinin.
- SplitApart – Booletoğlu objelerin bütünü bir arada tutulupya dağıtılmasını mı kontrol edecek yoksa ayrı ayrı dağıtılmasını mı kontrol edecek.Varsayılan true (ayrılma).
Dönüşler
Ana parçanın geometrisinden bir veya daha fazla PartOperations plus diğer parçaların geometrisinden.
Kod Örnekleri
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