GeometryService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan

Layanan yang berisi operasi geometris tidak terkait langsung dengan objek tertentu.

Rangkuman

Metode

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

source: Instance

Objek asli yang objek solidifikasi dilakukan, misalnya part di UnionAsync() .

destination: Array
options: Dictionary

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.
Nilai Default: "nil"

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>
KunciJenis

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>
KunciJenis

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>
KunciJenis

Contoh Kode

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

Hasil

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 :

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.

Two block parts overlapping

<figcaption>Bagian yang berdiri sendiri</figcaption>
Parts intersected into a new solid model

Menghasilkan Class.PartOperation ”

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

part: Instance

Utama Part atau PartOperation untuk beroperasi pada.

parts: Array

Objek pemotongan dengan bagian utama.

options: Dictionary

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).
Nilai Default: "nil"

Memberikan nilai

Satu atau lebih PartOperations dari geometri persilangan bagian utama ( part ) dan bagian lainnya.

Contoh Kode

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

Hasil

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 :

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.

Longer block overlapping a cylinder

<figcaption>Bagian yang berdiri sendiri</figcaption>
Block part subtracted from cylinder

Menghasilkan Class.PartOperation ”

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

part: Instance

Utama Part atau PartOperation untuk beroperasi pada.

parts: Array

Matriks dari bagian untuk dikurangkan dari bagian utama.

options: Dictionary

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).
Nilai Default: "nil"

Memberikan nilai

Satu atau lebih PartOperations dari geometri bagian utama ( part ) minus geometri yang ditempati oleh bagian lain.

Contoh Kode

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

Hasil

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 :

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.

Block and cylinder parts overlapping

<figcaption>Bagian yang berdiri sendiri</figcaption>
Parts joined together into a single solid union

Menghasilkan Class.PartOperation ”

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

part: Instance

Utama Part atau PartOperation untuk beroperasi pada.

parts: Array

Array of parts to union dengan bagian utama.

options: Dictionary

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).
Nilai Default: "nil"

Memberikan nilai

Satu atau lebih PartOperations dari geometri bagian utama ( part ) plus geometri yang ditempati oleh bagian lainnya.

Contoh Kode

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

Acara