GeometryService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Layanan yang berisi operasi geometris tidak terkait langsung dengan objek tertentu.
Rangkuman
Metode
Mengembalikan tabel Constraints dan Attachments yang Anda pilih untuk disimpan, bersama dengan orang tua mereka masing-masing.
Menciptakan satu atau lebih PartOperations dari geometri persilangan satu bagian dan bagian lainnya.
Menciptakan satu atau lebih PartOperations dari satu bagian minus geometri yang ditempati oleh bagian lain.
Menciptakan satu atau lebih PartOperations dari satu bagian plus geometri yang diambil oleh bagian lain.
Properti
Metode
CalculateConstraintsToPreserve
Mengembalikan tabel dari Constraints dan Attachments yang mungkin Anda pilih untuk disimpan, bersama dengan orang tua mereka masing-masing. Iterating melalui tabel ini memungkinkan Anda untuk memutuskan apakah akan reparent rekomendasi batasan dan lampiran ke orang tua mereka masing-masing.
Catat bahwa tabel options dapat berisi nilai tolerance (nomor) dan/atau nilai WeldConstraintPreserve ( 2>Enumerate.WeldConstraintPreserve2> ).
- tolerance – Jarak toleransi, dalam hal Attachment preservasi, antara lampiran dan titik terdekat di permukaan bagian asli versi paling dekat. Jika jarak toleransi setelah operasi pemodelan padat lebih besar dari nilai ini, Class.Instance.Parent|Parent</
- weldConstraintPreserve – A Enum.WeldConstraintPreserve nilai枚值 menggambarkan cara WeldConstraints dipertahankan dalam tabel rekomendasi yang muncul.
Parameter
Objek asli yang objek solidifikasi dilakukan, misalnya part di UnionAsync() .
Tabel opsi untuk metode:
- tolerance – Jarak toleransi, dalam hal Attachment preservasi, antara lampiran dan titik terdekat di permukaan bagian asli versi paling dekat. Jika jarak toleransi setelah operasi pemodelan padat lebih besar dari nilai ini, Class.Instance.Parent|Parent</
- weldConstraintPreserve – A Enum.WeldConstraintPreserve nilai枚值 menggambarkan cara WeldConstraints dipertahankan dalam tabel rekomendasi yang muncul.
Memberikan nilai
Tabel berisi informasi untuk kasus umum Constraints , NoCollisionConstraints , dan WeldConstraints . Dalam kasus di mana sebuah 1> Class.Attribution1> atau 4> Class.Limit4> harus dijatuhkan, orang
Untuk kasus umum Constraints seperti HingeConstraint :
<tbody><tr><td>Aksesori</td><td><code>Klas.Pendingekatan</code></td></tr><tr><td>Konstruksi</td><td><code>Batas Klasik</code></td></tr><tr><td>OrangTerikat</td><td><code>Class.BasePart</code> atau <code>nol</code></td></tr><tr><td>Orang Tua Batas</td><td><code>Class.BasePart</code> atau <code>nol</code></td></tr></tbody>
Kunci | Jenis |
---|
Untuk WeldConstraints :
<tbody><tr><td>Kontraksi</td><td><code>Batangan Klas.Weld</code></td></tr><tr><td>Batangan Bendera</td><td><code>Class.BasePart</code> atau <code>nol</code></td></tr><tr><td>Batangan Tindik Tangan</td><td><code>Klas.BasePart</code></td></tr><tr><td>Batangkan Batangan 1</td><td><code>Klas.BasePart</code></td></tr></tbody>
Kunci | Jenis |
---|
Untuk NoCollisionConstraints :
<tbody><tr><td>Tidak ada batasan bertabrakan</td><td><code>Class.NoCollisionConstraint.</code></td></tr><tr><td>Tidak ada batasan ketidakkolision</td><td><code>Class.BasePart</code> atau <code>nol</code></td></tr><tr><td>Tidak ada persyaratan kollisi</td><td><code>Klas.BasePart</code></td></tr><tr><td>Tidak ada persyaratan kollisi bagian1</td><td><code>Klas.BasePart</code></td></tr></tbody>
Kunci | Jenis |
---|
Contoh Kode
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
Menciptakan satu atau lebih PartOperations dari geometri persilangan bagian utama dan bagian lain dalam array yang diberikan. Hanya Class.Part|Parts
Berikut adalah property dari bagian utama ( part ) yang diterapkan ke PartOperations :
- 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.
Dalam gambar perbandingan berikut, IntersectAsync() disebut menggunakan blok ungu dan sebuah matriksi yang berisi blok biru. Hasil PartOperation resolves menjadi bentuk geometri intersecting dari kedua bagian.
Catatan
Dibandingkan dengan BasePart:IntersectAsync(), metode ini berbeda sebagai berikut:
- Bagian masuk tidak perlu menjadi orang tua ke panggung, memungkinkan operasi latar belakang.
- Ketika opsi SplitApart ditetapkan ke true (default), setiap tubuh yang berbeda akan dikembalikan dalam PartOperation masing-masing.
- Masing-masing dari bagian yang dikembalikan berada di ruang koordinat bagian utama. Ini berarti bahwa (0, 0, 0) dari setiap bagian yang dikembalikan tidak harus selalu berada di tengah tubuhnya.
- Mungkin untuk memanggil metode ini di klien, tetapi dengan beberapa batasan. Pertama, saat ini harus dilakukan dengan objek dibuat di klien. Kedua, tidak ada replikasi tersedia dari klien ke server.
Bagian asli tetap utuh setelah operasi yang berhasil. Dalam kebanyakan kasus, Anda harus menjadikan PartOperations yang dikembalikan ke tempat utama, lalu Destroy() semua bagian asli.
Secara default, warna wajah dari hasil PartOperations diambil dari property Color dari bagian asli, meskipun Anda dapat mengaktifkan kepemilikan mereka UsePartColor untuk mengubah mereka menjadi warna tertentu.
Jika operasi persilangan menghasilkan lebih dari 20.000 segi tiga lebih dari 20.000, mereka akan dibersihkan menjadi 20.000. Ini akan menyebabkan kesalahan dengan kode PartOperations.
Jika bagian utama bergerak selama perhitungan operasi, Anda dapat menetapkan bagian yang dihasilkan ke dalam CFrame utama, karena bagian yang dihasilkan berada dalam ruang koordinat yang sama dengan bagian utama.
Jika menggunakan metode ini dengan PartOperation sebagai bag
Parameter
Utama Part atau PartOperation untuk beroperasi pada.
Objek pemotongan dengan bagian utama.
Tabel opsi berisi semua kontrol untuk metode:
- CollisionFidelity –Nilai dari CollisionFidelity di bagian yang dihasilkan.
- RenderFidelity –Nilai dari RenderFidelity di bagian yang dihasilkan.
- FluidFidelity –Nilai dari FluidFidelity di bagian yang dihasilkan.
- SplitApart – Mengontrol apakah semua objek harus tetap bersama atau benar-benar dibagi kembali. Standar adalah true (# split).
Memberikan nilai
Satu atau lebih PartOperations dari geometri persilangan bagian utama ( part ) dan bagian lainnya.
Contoh Kode
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
Menciptakan satu atau lebih PartOperations dari bagian utama minus geometri yang ditempati oleh bagian lain dalam array yang diberikan. Hanya primitif
Berikut adalah property dari bagian utama ( part ) yang diterapkan ke PartOperations :
- 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.
Dalam gambar perbandingan berikut, SubtractAsync() disebut menggunakan silinder biru dan sebuah matriks yang berisi blok ungu. Hasil PartOperation resolves menjadi bentuk yang menghilangkan geometri blok dari geometri silinder.
Catatan
Dibandingkan dengan BasePart:SubtractAsync(), metode ini berbeda sebagai berikut:
- Bagian masuk tidak perlu menjadi orang tua ke panggung, memungkinkan operasi latar belakang.
- Ketika opsi SplitApart ditetapkan ke true (default), setiap tubuh yang berbeda akan dikembalikan dalam PartOperation masing-masing.
- Masing-masing dari bagian yang dikembalikan berada di ruang koordinat bagian utama. Ini berarti bahwa (0, 0, 0) dari setiap bagian yang dikembalikan tidak harus selalu berada di tengah tubuhnya.
- Mungkin untuk memanggil metode ini di klien, tetapi dengan beberapa batasan. Pertama, saat ini harus dilakukan dengan objek dibuat di klien. Kedua, tidak ada replikasi tersedia dari klien ke server.
Bagian asli tetap utuh setelah operasi yang berhasil. Dalam kebanyakan kasus, Anda harus menjadikan PartOperations yang dikembalikan ke tempat utama, lalu Destroy() semua bagian asli.
Secara default, warna wajah dari hasil PartOperations diambil dari property Color dari bagian asli, meskipun Anda dapat mengaktifkan kepemilikan mereka UsePartColor untuk mengubah mereka menjadi warna tertentu.
Jika operasi subtract akan mengakibatkan lebih dari 20.000 triangles dengan lebih dari 20.000, mereka akan dibuat kembali menjadi 20.000. Ini akan mengakibatkan kesalahan dengan kode -14 .
Jika bagian utama bergerak selama perhitungan operasi, Anda dapat menetapkan bagian yang dihasilkan ke dalam CFrame utama, karena bagian yang dihasilkan berada dalam ruang koordinat yang sama dengan bagian utama.
Jika menggunakan metode ini dengan PartOperation sebagai bag
Parameter
Utama Part atau PartOperation untuk beroperasi pada.
Matriks dari bagian untuk dikurangkan dari bagian utama.
Tabel opsi berisi semua kontrol untuk metode:
- CollisionFidelity –Nilai dari CollisionFidelity di bagian yang dihasilkan.
- RenderFidelity –Nilai dari RenderFidelity di bagian yang dihasilkan.
- FluidFidelity –Nilai dari FluidFidelity di bagian yang dihasilkan.
- SplitApart – Mengontrol apakah semua objek harus tetap bersama atau benar-benar dibagi kembali. Standar adalah true (# split).
Memberikan nilai
Satu atau lebih PartOperations dari geometri bagian utama ( part ) minus geometri yang ditempati oleh bagian lain.
Contoh Kode
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
Menciptakan satu atau lebih PartOperations dari bagian utama plus geometri yang ditempati oleh bagian lain dalam array yang diberikan. Hanya Class.Part|Parts
Berikut adalah property dari bagian utama ( part ) yang diterapkan ke PartOperations :
- 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.
Dalam gambar perbandingan berikut, UnionAsync() disebut menggunakan blok biru dan sebuah matriks yang berisi silinder ungu. Hasil PartOperation resolves menjadi bentuk geometri kombinasi dari kedua bagian.
Catatan
Dibandingkan dengan BasePart:UnionAsync(), metode ini berbeda sebagai berikut:
- Bagian masuk tidak perlu menjadi orang tua ke panggung, memungkinkan operasi latar belakang.
- Ketika opsi SplitApart ditetapkan ke true (default), setiap tubuh yang berbeda akan dikembalikan dalam PartOperation masing-masing.
- Masing-masing dari bagian yang dikembalikan berada di ruang koordinat bagian utama. Ini berarti bahwa (0, 0, 0) dari setiap bagian yang dikembalikan tidak harus selalu berada di tengah tubuhnya.
- Mungkin untuk memanggil metode ini di klien, tetapi dengan beberapa batasan. Pertama, saat ini harus dilakukan dengan objek dibuat di klien. Kedua, tidak ada replikasi tersedia dari klien ke server.
Bagian asli tetap utuh setelah operasi yang berhasil. Dalam kebanyakan kasus, Anda harus menjadikan PartOperations yang dikembalikan ke tempat utama, lalu Destroy() semua bagian asli.
Secara default, warna dari PartOperations yang dihasilkan diambil dari property Color dari bagian asli, meskipun Anda dapat mengaktifkan UsePartColor property mereka untuk mengubahnya menjadi warna tertentu.
Jika operasi persatuan akan menghasilkan lebih dari 20.000 segi tiga lebih dari 20.000, mereka akan dibersihkan menjadi 20.000. Ini akan menyebabkan kesalahan dengan kode PartOperations.
Jika bagian utama bergerak selama perhitungan operasi, Anda dapat menetapkan bagian yang dihasilkan ke dalam CFrame utama, karena bagian yang dihasilkan berada dalam ruang koordinat yang sama dengan bagian utama.
Jika menggunakan metode ini dengan PartOperation sebagai bag
Parameter
Utama Part atau PartOperation untuk beroperasi pada.
Array of parts to union dengan bagian utama.
Tabel opsi berisi semua kontrol untuk metode:
- CollisionFidelity –Nilai dari CollisionFidelity di bagian yang dihasilkan.
- RenderFidelity –Nilai dari RenderFidelity di bagian yang dihasilkan.
- FluidFidelity –Nilai dari FluidFidelity di bagian yang dihasilkan.
- SplitApart – Mengontrol apakah semua objek harus tetap bersama atau benar-benar dibagi kembali. Standar adalah true (# split).
Memberikan nilai
Satu atau lebih PartOperations dari geometri bagian utama ( part ) plus geometri yang ditempati oleh bagian lainnya.
Contoh Kode
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