BasePart
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
BasePart adalah kelas dasar abstrak untuk objek di dunia yang menampilkan dan disimulasikan secara fisik saat berada di Workspace .Ada beberapa implementasi dari BasePart , yang paling umum adalah Part dan MeshPart .Lainnya termasuk WedgePart , SpawnLocation , dan objek tunggal Terrain .Secara umum, ketika dokumentasi merujuk pada "bagian," sebagian besar implementasi BasePart akan berfungsi dan tidak hanya Part .
Untuk informasi tentang bagaimana BaseParts dikumpulkan menjadi tubuh kaku simulasi, lihat Assemblies .
Ada banyak objek berbeda yang berinteraksi dengan BasePart (selain Terrain ), termasuk:
- Beberapa BaseParts mungkin dikumpulkan dalam sebuah Model dan dipindahkan pada saat yang sama menggunakan PVInstance:PivotTo() . Lihat Model .
- A Decal menerapkan tekstur gambar tertarik ke wajah BasePart , sementara A Texture menerapkan tekstur gambar berbalok ke wajah.Lihat Tekstur dan Decal .
- Attachments dapat ditambahkan ke BasePart untuk menentukan CFrames relatif terhadap bagian.Ini sering digunakan oleh objek fisik Constraint seperti yang dinyatakan dalam Batasan Mekanik dan Batasan Penggerak.
- ParticleEmitter objek memancarkan partikel secara merata di volume BasePart yang menjadi orang tuanya. Lihat Pemancar Partikel .
- Objek ringan seperti PointLight memancarkan cahaya dari pusat BasePart seperti yang digambarkan di Sumber Cahaya .
- Jika diasuh ke Tool dan diberi nama Handle , BasePart dapat dipegang oleh karakter. Lihat Alat dalam Pengalaman.
Rangkuman
Properti
Menentukan apakah suku cadang tidak dapat dipindahkan oleh fisika.
Kecepatan sudut dari penggabungan bagian.
Pusat massa dari pengumpulan bagian di ruang dunia.
Kecepatan linier dari penggabungan bagian.
Massa total dari penggabungan bagian.
Referensi ke bagian akar dari kumpulan.
Menentukan jenis permukaan untuk Sisi Belakang suku cadang (+Z arah).
Menentukan jenis permukaan untuk wajah Bawah dari suku cadang (-Y arah).
Menentukan warna suku cadang.
Menentukan posisi dan orientasi BasePart di dunia.
Menentukan apakah bagian dapat bertabrakan dengan bagian lain.
Menentukan apakah bagian tersebut dianggap selama operasi pencarian spasial.
Menentukan apakah Touched dan TouchEnded peristiwa terbakar di bagian.
Menentukan apakah bagian itu melemparkan bayangan atau tidak.
Menggambarkan posisi dunia di mana pusat massa bagian terletak.
Menggambarkan nama grup tabrakan bagian.
Menentukan warna suku cadang.
Menunjukkan properti fisik saat ini dari bagian.
Menentukan beberapa properti fisik dari suku cadang.
Digunakan untuk mengaktifkan atau menonaktifkan kekuatan aerodinamik pada bagian dan kumpulan.
Ukuran fisik aktual dari BasePart sebagai dianggap oleh mesin fisika.
Menentukan jenis permukaan untuk wajah depan suku cadang (-Z arah).
Menentukan jenis permukaan untuk wajah Kiri dari suku cadang (-X arah).
Menentukan pengganda untuk BasePart.Transparency yang hanya terlihat oleh klien lokal.
Menentukan apakah bagian dapat dipilih di Studio.
Menggambarkan massa bagian, produk dari kepadatan dan volumenya.
Menentukan apakah bagian berkontribusi pada massa total atau inersia tubuh kaku.
Menentukan tekstur dan properti fisik default dari suku cadang.
Nama MaterialVariant .
Menggambarkan rotasi bagian di dunia.
Mengidentifikasi offset pivot bagian dari CFrame nya.
Menggambarkan posisi bagian di dunia.
Waktu sejak pembaruan fisika terakhir update.
Menentukan seberapa banyak bagian mencerminkan skybox.
Menggambarkan perubahan terkecil dalam ukuran yang diizinkan oleh metode Resize.
Menggambarkan wajah di mana bagian dapat diubah ukurannya.
Menentukan jenis permukaan untuk wajah Kanan dari suku cadang (+X arah).
Aturan utama dalam menentukan bagian akar dari sebuah kumpulan.
Rotasi bagian dalam derajat untuk tiga sumbu.
Menentukan dimensi suku cadang (panjang, lebar, tinggi).
Menentukan jenis permukaan untuk bagian atas wajah suku cadang (+Y arah).
Menentukan berapa banyak bagian yang dapat dilihat melalui (kebalikan dari oposisi bagian).
Metode
Terapkan dorongan sudut ke kumpulan.
Terapkan impuls ke kumpulan di kumpulan center of mass .
Terapkan impuls ke kumpulan di posisi yang ditentukan.
Kembalikan apakah bagian dapat bertabrakan satu sama lain.
Memeriksa apakah Anda dapat mengatur kepemilikan jaringan bagian.
Kembalikan tabel bagian yang terhubung ke objek dengan jenis persambungan kaku apa pun.
Kembalikan semua Persyaratan atau Batasan yang terhubung ke Bagian ini.
Kembalikan nilai properti Mass .
Kembalikan pemain saat ini yang merupakan pemilik jaringan dari bagian ini, atau nil dalam kasus server.
Kembali benar jika mesin permainan secara otomatis memutuskan pemilik jaringan untuk bagian ini.
Kembalikan bagian dasar dari kumpulan bagian.
Kembalikan tabel semua bagian BasePart.CanCollide nyata yang berpotongan dengan bagian ini.
Kembalikan kecepatan linier penggabungan bagian pada posisi yang diberikan relatif terhadap bagian ini.
Kembalikan benar jika objek terhubung ke bagian yang akan menahan di tempatnya (sebagai contoh bagian Anchored), jika tidak maka kembalikan false.
Mengubah ukuran objek seperti menggunakan alat perubah ukuran Studio.
Atur pemain yang diberikan sebagai pemilik jaringan untuk ini dan semua bagian yang terhubung.
Membiarkan mesin permainan dinamis memutuskan siapa yang akan menangani fisika bagian (salah satu klien atau server).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Membuat baru IntersectOperation dari geometri tumpang tindih dari bagian dan bagian lain dalam array yang diberikan.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Membuat baru UnionOperation dari bagian, minus geometri yang ditempati oleh bagian dalam array yang diberikan.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Membuat baru UnionOperation dari bagian, plus geometri yang ditempati oleh bagian dalam array yang diberikan.
Mendapatkan pivot dari PVInstance .
Mengubah PVInstance bersama dengan semua keturunannya PVInstances sehingga pivot sekarang terletak di lokasi yang ditentukan CFrame .
Acara
Melepaskan api ketika bagian berhenti menyentuh bagian lain sebagai hasil dari gerakan fisik.
Melepaskan api ketika bagian menyentuh bagian lain sebagai hasil dari gerakan fisik.
Properti
Anchored
Properti Diamankan menentukan apakah bagian akan tidak dapat dipindahkan oleh fisika.Saat diaktifkan, bagian tidak akan pernah berubah posisi karena gravitasi, tabrakan bagian lain, penumpangan bagian lain, atau penyebab fisika lainnya.Sebagai hasilnya, dua bagian yang diikat tidak akan pernah menembakkan acara BasePart.Touched pada satu sama lain.
Bagian yang diikat masih dapat dipindahkan dengan mengubah CFrame atau Position nya, dan masih mungkin memiliki nol AssemblyLinearVelocity dan AssemblyAngularVelocity .
Akhirnya, jika bagian yang tidak diikat bergabung dengan bagian yang diikat melalui objek seperti Weld, itu juga akan bertindak diikat.Jika perkecualian seperti itu pecah, bagian mungkin terpengaruh oleh fisika lagi.Lihat Kumpulan untuk lebih banyak rincian.
Kepemilikan jaringan tidak dapat ditetapkan pada bagian yang diikat.Jika status pengait bagian berubah di server, kepemilikan jaringan bagian itu akan terpengaruh.
Contoh Kode
This code sample will allow a part to be clicked to toggle its anchored property. When toggled, the visual appearance of the part is updated (red means anchored, yellow means free).
local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)
AssemblyAngularVelocity
Vektor kecepatan sudut dari pengumpulan bagian ini. Ini adalah tingkat perubahan orientasi dalam radian per detik.
Kecepatan sudut sama di setiap titik penggabungan.
Mengatur kecepatan langsung dapat menyebabkan gerakan yang tidak realistis.Menggunakan Torque atau AngularVelocity batasan disarankan, atau gunakan BasePart:ApplyAngularImpulse() jika Anda ingin perubahan instan dalam kecepatan.
Jika bagiannya adalah dimiliki oleh server, properti ini harus diubah dari server Script (bukan dari LocalScript atau Script dengan RunContext diatur ke Enum.RunContext.Client ).Jika bagian dimiliki oleh klien melalui kepemilikan otomatis automatic , properti ini dapat diubah dari skrip klien atau skrip server; mengubahnya dari skrip klien untuk bagian yang dimiliki oleh server tidak akan berpengaruh.
AssemblyCenterOfMass
Posisi yang dihitung melalui mass dan position dari semua bagian dalam kumpulan.
Jika kumpulan memiliki bagian yang diikat, pusat massa bagian itu akan menjadi pusat massa kumpulan, dan kumpulan akan memiliki massa tak terbatas.
Mengetahui pusat massa dapat membantu pemeliharaan stabilitas kumpulan.Kekuatan yang diterapkan ke pusat massa tidak akan menyebabkan akselerasi sudut, hanya linear.Sebuah kumpulan dengan pusat massa rendah akan memiliki waktu yang lebih baik tetap berdiri di bawah efek gravitasi.
AssemblyLinearVelocity
Vektor kecepatan linier dari pengumpulan bagian ini. Ini adalah tingkat perubahan posisi kumpulan center of mass dalam stud per detik.
Jika Anda ingin tahu kecepatan di titik lain selain pusat massa kumpulan, gunakan BasePart:GetVelocityAtPosition().
Mengatur kecepatan langsung dapat menyebabkan gerakan yang tidak realistis.Menggunakan batasan VectorForce digunakan, atau gunakan BasePart:ApplyImpulse() jika Anda ingin perubahan langsung dalam kecepatan.
Jika bagiannya adalah dimiliki oleh server, properti ini harus diubah dari server Script (bukan dari LocalScript atau Script dengan RunContext diatur ke Enum.RunContext.Client ).Jika bagian dimiliki oleh klien melalui kepemilikan otomatis automatic , properti ini dapat diubah dari skrip klien atau skrip server; mengubahnya dari skrip klien untuk bagian yang dimiliki oleh server tidak akan berpengaruh.
AssemblyMass
Jumlah massa dari semua parts di bagian ini montase.Bagian yang Massless dan bukan bagian akar dari kumpulan tidak akan berkontribusi pada AssemblyMass.
Jika kumpulan memiliki bagian yang diikat, massa kumpulan dianggap tak terbatas.Kontraksi dan interaksi fisik lainnya antara kumpulan yang tidak terikat dengan perbedaan besar dalam massa dapat menyebabkan ketidakstabilan.
AssemblyRootPart
Properti ini menunjukkan BasePart secara otomatis dipilih untuk mewakili bagian akar assemblasi.Ini adalah bagian yang sama yang dikembalikan saat pengembang memanggil GetRootPart() .
Bagian akar dapat diubah dengan mengubah RootPriority dari bagian dalam kumpulan.
Bagian yang semuanya berbagi root bagian yang sama ada di dalam asam yang sama.
Untuk informasi lebih lanjut tentang bagian akar, lihat Kumpulan.
AudioCanCollide
BackSurface
Properti BackSurface menentukan jenis permukaan yang digunakan untuk arah +Z suku cadang.Ketika wajah dua bagian ditempatkan di samping satu sama lain, mereka dapat membuat kesepakatan bersama di antara mereka.Jika diatur ke Motor, BasePart.BackSurfaceInput menentukan bagaimana koneksi motor harus berperilaku.
Kebanyakan SurfaceType menampilkan tekstur di bagian wajah jika BasePart.Material diatur ke Plastik.Beberapa Tipe Permukaan - Hinge, Motor, dan SteppingMotor - akan menampilkan dekorasi 3D sebagai gantinya.Jika properti ini dipilih di jendela Properti, itu akan disorot di dunia permainan yang mirip dengan SurfaceSelection .
Contoh Kode
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
BottomSurface
Properti BottomSurface menentukan jenis permukaan yang digunakan untuk arah -Y bagian.Ketika wajah dua bagian ditempatkan di samping satu sama lain, mereka dapat membuat kesepakatan bersama di antara mereka.Jika diatur ke Motor, BasePart.BottomSurfaceInput menentukan bagaimana koneksi motor harus berperilaku.
Kebanyakan SurfaceType menampilkan tekstur di bagian wajah jika BasePart.Material diatur ke Plastik.Beberapa Tipe Permukaan - Hinge, Motor, dan SteppingMotor - akan menampilkan dekorasi 3D sebagai gantinya.Jika properti ini dipilih di jendela Properti, itu akan disorot di dunia permainan yang mirip dengan SurfaceSelection .
Contoh Kode
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
BrickColor
Properti BrickColor menentukan warna suku cadang.Jika bagian memiliki BasePart.Material, ini juga menentukan warna yang digunakan saat menyajikan tekstur bahan.Untuk lebih banyak kontrol atas warna, properti BasePart.Color dapat digunakan (itu adalah varian Color3 dari properti ini).Jika aturWarna, properti ini akan menggunakan BrickColor terdekat.
Properti visual lain dari suku cadang ditentukan oleh BasePart.Transparency dan BasePart.Reflectance .
Contoh Kode
This code sample will allow a part to be clicked to toggle its anchored property. When toggled, the visual appearance of the part is updated (red means anchored, yellow means free).
local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)
CFrame
Properti CFrame menentukan posisi dan orientasi BasePart di dunia.Ini bertindak sebagai lokasi referensi arbitrer pada geometri, tetapi ExtentsCFrame mewakili CFrame yang sebenarnya dari pusat fisiknya.
Saat mengatur CFrame pada bagian, bagian lain yang bergabung juga dipindahkan relatif terhadap bagian, tetapi disarankan agar Anda menggunakan PVInstance:PivotTo() untuk memindahkan seluruh model, seperti saat teleporting karakter pemain.
Tidak seperti mengatur BasePart.Position , pengaturan BasePart.CFrame akan selalu memindahkan bagian ke CFrame yang tepat; dengan kata lain: tidak ada pengecekan overlap yang dilakukan dan solver fisika akan berusaha memecahkan setiap overlap kecuali kedua bagian adalah Anchored .
Untuk melacak posisi relatif terhadap bagian CFrame, Attachment mungkin berguna.
Contoh Kode
This code sample demonstrates setting a part's CFrame in many different ways. It showcases how to create and compose CFrame values. It references a sibling part called "OtherPart" for demonstrating relative positioning.
local part = script.Parent:WaitForChild("Part")
local otherPart = script.Parent:WaitForChild("OtherPart")
-- Reset the part's CFrame to (0, 0, 0) with no rotation.
-- This is sometimes called the "identity" CFrame
part.CFrame = CFrame.new()
-- Set to a specific position (X, Y, Z)
part.CFrame = CFrame.new(0, 25, 10)
-- Same as above, but use a Vector3 instead
local point = Vector3.new(0, 25, 10)
part.CFrame = CFrame.new(point)
-- Set the part's CFrame to be at one point, looking at another
local lookAtPoint = Vector3.new(0, 20, 15)
part.CFrame = CFrame.lookAt(point, lookAtPoint)
-- Rotate the part's CFrame by pi/2 radians on local X axis
part.CFrame = part.CFrame * CFrame.Angles(math.pi / 2, 0, 0)
-- Rotate the part's CFrame by 45 degrees on local Y axis
part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(45), 0)
-- Rotate the part's CFrame by 180 degrees on global Z axis (note the order!)
part.CFrame = CFrame.Angles(0, 0, math.pi) * part.CFrame -- Pi radians is equal to 180 degrees
-- Composing two CFrames is done using * (the multiplication operator)
part.CFrame = CFrame.new(2, 3, 4) * CFrame.new(4, 5, 6) --> equal to CFrame.new(6, 8, 10)
-- Unlike algebraic multiplication, CFrame composition is NOT communitative: a * b is not necessarily b * a!
-- Imagine * as an ORDERED series of actions. For example, the following lines produce different CFrames:
-- 1) Slide the part 5 units on X.
-- 2) Rotate the part 45 degrees around its Y axis.
part.CFrame = CFrame.new(5, 0, 0) * CFrame.Angles(0, math.rad(45), 0)
-- 1) Rotate the part 45 degrees around its Y axis.
-- 2) Slide the part 5 units on X.
part.CFrame = CFrame.Angles(0, math.rad(45), 0) * CFrame.new(5, 0, 0)
-- There is no "CFrame division", but instead simply "doing the inverse operation".
part.CFrame = CFrame.new(4, 5, 6) * CFrame.new(4, 5, 6):Inverse() --> is equal to CFrame.new(0, 0, 0)
part.CFrame = CFrame.Angles(0, 0, math.pi) * CFrame.Angles(0, 0, math.pi):Inverse() --> equal to CFrame.Angles(0, 0, 0)
-- Position a part relative to another (in this case, put our part on top of otherPart)
part.CFrame = otherPart.CFrame * CFrame.new(0, part.Size.Y / 2 + otherPart.Size.Y / 2, 0)
CanCollide
CanCollide menentukan apakah suku cadang akan berinteraksi secara fisik dengan bagian lain.Saat dinonaktifkan, bagian lain dapat melewati batu bata tanpa gangguan.Bagian yang digunakan untuk dekorasi biasanya memiliki CanCollide dinonaktifkan, karena tidak perlu dipertimbangkan oleh mesin fisika.
Jika suku tidak BasePart.Anchored dan memiliki CanCollide dinonaktifkan, itu mungkin jatuh dari dunia untuk akhirnya dihancurkan oleh Workspace.FallenPartsDestroyHeight .
Ketika CanCollide dinonaktifkan, bagian mungkin masih menembakkan acara BasePart.Touched (seperti juga bagian lain yang menyentuhnya).Anda dapat menonaktifkan ini dengan BasePart.CanTouch .
Untuk informasi lebih lanjut tentang tabrakan, lihat Tabrakan.
Contoh Kode
This code sample shows how a part can fade away when touched by a Humanoid then reappear a moment after to create a passable door.
-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()
CanQuery
CanQuery menentukan apakah bagian tersebut dianggap selama operasi pencarian spasial, seperti GetPartBoundsInBox atau Raycast .CanCollide juga harus dinonaktifkan saat menonaktifkan CanQuery.Fungsi ini tidak akan pernah termasuk bagian yang mana CanQuery dan CanCollide adalah false.
Selain properti ini, juga dimungkinkan untuk mengecualikan bagian yang merupakan keturunan dari daftar bagian tertentu menggunakan objek OverlapParams atau RaycastParams saat memanggil fungsi pencarian spasial.
CanTouch
Properti ini menentukan apakah Touched dan TouchEnded peristiwa terbakar di bagian.Jika true , bagian sentuh lainnya juga harus memiliki CanTouch diatur ke true untuk peristiwa sentuhan untuk ditembak.Jika false , peristiwa sentuhan tidak dapat dibuat untuk bagian dan mencoba melakukannya akan menyebabkan kesalahan.Demikian pula, jika properti diatur ke false setelah event sentuhan terhubung, event akan terputus dan TouchTransmitter dihapus.
Perhatikan bahwa logika tabrakan ini dapat disetel untuk menghormati kelompok tabrakan melalui properti Workspace.TouchesUseCollisionGroups.Jika true , bagian dalam kelompok non-tabrakan akan mengabaikan kedua tabrakan dan sentuhan, sehingga membuat properti ini tidak relevan.
Performance
Ada peningkatan kinerja kecil pada bagian yang memiliki kedua CanTouch dan CanCollide diatur ke false , karena bagian-bagian ini tidak akan pernah perlu menghitung jenis kolisi bagian ke bagian.Namun, mereka masih bisa dipukul oleh Raycasts dan OverlapParams pencarian.
CastShadow
Menentukan apakah bagian itu melemparkan bayangan atau tidak.
Perhatikan bahwa fitur ini tidak dirancang untuk peningkatan kinerja.Ini hanya harus dinonaktifkan pada bagian di mana Anda ingin menyembunyikan bayangan yang dipancarkan bagian.Menonaktifkan properti ini untuk bagian tertentu dapat menyebabkan artefak visual pada bayangan yang dilemparkan pada bagian itu.
CenterOfMass
Properti CenterOfMass menggambarkan posisi lokal pusat massa suku cadang.Jika ini adalah penggabungan bagian tunggal, ini adalah AssemblyCenterOfMass dikonversi dari ruang dunia ke lokal.Pada sederhana Parts, pusat massa selalu (0,0,0).Ini bisa bervariasi untuk WedgePart atau MeshPart namun.
CollisionGroup
Properti CollisionGroup menggambarkan nama kelompok tabrakan bagian (maksimum 100 karakter).Bagian dimulai di grup default yang namanya adalah "Default" .Nilai ini tidak bisa kosong.
Meskipun properti ini sendiri tidak direplikasi, mesin secara internal mereplikasi nilai melalui properti pribadi lain untuk memecahkan masalah kompatibilitas mundur.
Contoh Kode
This example demonstrates one basic use of collision groups. It assigns BallPart to "CollisionGroupBall" and DoorPart to "CollisionGroupDoor", then makes the two groups non-collidable using PhysicsService:CollisionGroupSetCollidable().
local PhysicsService = game:GetService("PhysicsService")
local collisionGroupBall = "CollisionGroupBall"
local collisionGroupDoor = "CollisionGroupDoor"
-- Register collision groups
PhysicsService:RegisterCollisionGroup(collisionGroupBall)
PhysicsService:RegisterCollisionGroup(collisionGroupDoor)
-- Assign parts to collision groups
script.Parent.BallPart.CollisionGroup = collisionGroupBall
script.Parent.DoorPart.CollisionGroup = collisionGroupDoor
-- Set groups as non-collidable with each other and check the result
PhysicsService:CollisionGroupSetCollidable(collisionGroupBall, collisionGroupDoor, false)
print(PhysicsService:CollisionGroupsAreCollidable(collisionGroupBall, collisionGroupDoor)) --> false
Color
Properti Warna menentukan warna suku cadang.Jika bagian memiliki BasePart.Material, ini juga menentukan warna yang digunakan saat menyajikan tekstur bahan.Jika properti ini diatur, BasePart.BrickColor akan menggunakan BrickColor terdekat ke nilai Color3.
Properti visual lain dari suku cadang ditentukan oleh BasePart.Transparency dan BasePart.Reflectance .
Contoh Kode
This code sample colors a player's entire character based on how much health they have. It generates a color based on their max health, then sets the color properties of objects within their character, removing any extra objects.
-- Paste into a Script within StarterCharacterScripts
-- Then play the game, and fiddle with your character's health
local char = script.Parent
local human = char.Humanoid
local colorHealthy = Color3.new(0.4, 1, 0.2)
local colorUnhealthy = Color3.new(1, 0.4, 0.2)
local function setColor(color)
for _, child in pairs(char:GetChildren()) do
if child:IsA("BasePart") then
child.Color = color
while child:FindFirstChildOfClass("Decal") do
child:FindFirstChildOfClass("Decal"):Destroy()
end
elseif child:IsA("Accessory") then
child.Handle.Color = color
local mesh = child.Handle:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh.TextureId = ""
end
elseif child:IsA("Shirt") or child:IsA("Pants") then
child:Destroy()
end
end
end
local function update()
local percentage = human.Health / human.MaxHealth
-- Create a color by tweening based on the percentage of your health
-- The color goes from colorHealthy (100%) ----- > colorUnhealthy (0%)
local color = Color3.new(
colorHealthy.R * percentage + colorUnhealthy.r * (1 - percentage),
colorHealthy.G * percentage + colorUnhealthy.g * (1 - percentage),
colorHealthy.B * percentage + colorUnhealthy.b * (1 - percentage)
)
setColor(color)
end
update()
human.HealthChanged:Connect(update)
CurrentPhysicalProperties
CurrentPhysicalProperties menunjukkan properti fisik saat ini dari bagian.Anda dapat mengatur nilai khusus untuk properti fisik per bagian, materi khusus , dan penghapusan materi.Mesin memprioritaskan definisi yang lebih granular saat menentukan properti fisik yang efektif dari suku cadang.Nilai-nilai dalam daftar berikut adalah dalam urutan dari prioritas tertinggi ke terendah:
- Properti fisik khusus dari bagian
- Properti fisik khusus dari bahan kustom bagian
- Properti fisik khusus dari penghapusan materi bagian dengan materi bagian
- Properti fisik default dari material bagian
CustomPhysicalProperties
CustomPhysicalProperties memungkinkan Anda untuk menyesuaikan berbagai aspek fisik dari Part , seperti kepadatan, gesekan, dan elastisitasnya.
Jika diaktifkan, properti ini memungkinkan Anda untuk mengonfigurasi properti fisik ini.Jika dinonaktifkan, properti fisik ini ditentukan oleh BasePart.Material dari bagian.Halaman untuk Enum.Material berisi daftar berbagai bahan bagian.
Contoh Kode
This code sample demonstrates how to set the CustomPhysicalProperties property of a part.
local part = script.Parent
-- This will make the part light and bouncy!
local DENSITY = 0.3
local FRICTION = 0.1
local ELASTICITY = 1
local FRICTION_WEIGHT = 1
local ELASTICITY_WEIGHT = 1
local physProperties = PhysicalProperties.new(DENSITY, FRICTION, ELASTICITY, FRICTION_WEIGHT, ELASTICITY_WEIGHT)
part.CustomPhysicalProperties = physProperties
EnableFluidForces
Ketika benar, dan ketika Workspace.FluidForces diaktifkan, menyebabkan mesin fisika menghitung gaya aerodinamik pada ini BasePart .
ExtentsSize
Ukuran fisik aktual dari BasePart sebagai dianggap oleh mesin fisika, misalnya dalam deteksi kolisi .
FrontSurface
Properti FrontSurface menentukan jenis permukaan yang digunakan untuk arah -Z dari bagian.Ketika wajah dua bagian ditempatkan di samping satu sama lain, mereka dapat membuat kesepakatan bersama di antara mereka.Jika diatur ke Motor, BasePart.FrontSurfaceInput menentukan bagaimana koneksi motor harus berperilaku.
Kebanyakan SurfaceType menampilkan tekstur di bagian wajah jika BasePart.Material diatur ke Plastik.Beberapa Tipe Permukaan termasuk Hinge, Motor, dan SteppingMotor menampilkan dekorasi 3D sebagai gantinya.Jika properti ini dipilih di jendela Properti, itu akan disorot di dunia permainan yang mirip dengan SurfaceSelection .
Contoh Kode
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
LeftSurface
Properti LeftSurface menentukan jenis permukaan yang digunakan untuk arah -X dari bagian.Ketika wajah dua bagian ditempatkan di samping satu sama lain, mereka dapat membuat kesepakatan bersama di antara mereka.Jika diatur ke Motor, BasePart.LeftSurfaceInput menentukan bagaimana koneksi motor harus berperilaku.
Kebanyakan SurfaceType menampilkan tekstur di bagian wajah jika BasePart.Material diatur ke Plastik.Beberapa Tipe Permukaan termasuk Hinge, Motor, dan SteppingMotor menampilkan dekorasi 3D sebagai gantinya.Jika properti ini dipilih di jendela Properti, itu akan disorot di dunia permainan yang mirip dengan SurfaceSelection .
Contoh Kode
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
LocalTransparencyModifier
Properti LocalTransparencyModifier adalah pengganda untuk BasePart.Transparency yang hanya terlihat oleh klien lokal.Ini tidak menyalin dari klien ke server dan berguna ketika bagian tidak harus dirender untuk klien tertentu, seperti bagaimana pemain tidak melihat bagian tubuh karakter mereka saat mereka memperbesar ke mode orang pertama.
Properti ini mengubah transparansi bagian lokal melalui formula berikut, dengan nilai yang dihasilkan diikat antara 0 dan 1.
clientTransparency = 1 - ((1 - part.Transparency) * (1 - part.LocalTransparencyModifier))
<th>Pengubah Transparansi Lokal</th><th>Transparansi Sisi Server</th><th>Transparansi Sisi Klien</th></tr></thead><tbody><tr><td>0.5</td><td>0</td><td>0.5</td><td>0.5</td></tr><tr><td>0.5</td><td>0.25</td><td>0.5</td><td>0.625</td></tr><tr><td>0.5</td><td>0.5</td><td>0.5</td><td>0.75</td></tr><tr><td>0.5</td><td>0.75</td><td>0.5</td><td>0.875</td></tr><tr><td>0.5</td><td>1</td><td>0.5</td><td>1</td></tr></tbody>
Transparansi |
---|
Locked
Properti Terkunci menentukan apakah part (atau model jika terkandung di dalamnya) dapat dipilih di Roblox Studio dengan mengkliknya.Properti ini paling sering diaktifkan pada bagian dalam model lingkungan yang tidak sedang diedit saat ini.Roblox Studio memiliki alat Lock/Unlock All yang dapat mengubah status Terkunci dari setiap bagian turunan dalam model sekaligus.
Contoh Kode
This code sample uses the concept of recursion to unlock all parts that are a descendant of a model.
-- Paste into a Script within a Model you want to unlock
local model = script.Parent
-- This function recurses through a model's heirarchy and unlocks
-- every part that it encounters.
local function recursiveUnlock(object)
if object:IsA("BasePart") then
object.Locked = false
end
-- Call the same function on the children of the object
-- The recursive process stops if an object has no children
for _, child in pairs(object:GetChildren()) do
recursiveUnlock(child)
end
end
recursiveUnlock(model)
Mass
Mass adalah properti baca-hanya yang menggambarkan produk volume dan kepadatan bagian. Ini dikembalikan oleh fungsi GetMass.
- Kepadatan suku cadang ditentukan oleh Material atau CustomPhysicalProperties jika ditentukan.
Massless
Jika properti ini diaktifkan, BasePart tidak akan berkontribusi pada massa total atau inersia kumpulannya selama disambungkan ke bagian lain yang memiliki massa.
Jika bagian adalah bagian akar sendiri menurut AssemblyRootPart, ini akan diabaikan untuk bagian itu, dan masih akan berkontribusi massa dan inersia ke kumpulannya seperti bagian normal.Bagian yang tidak massal seharusnya tidak pernah menjadi bagian akar assemblasi kecuali semua bagian lain dalam assemblasi juga tidak massal.
Ini mungkin berguna untuk hal-hal seperti aksesori opsional pada kendaraan yang tidak ingin mempengaruhi penanganan mobil atau meshes render tanpa massa yang disambungkan ke meshes tabrakan yang lebih sederhana.
Lihat juga Komponen, sebuah artikel yang dokumentasikan bagian akar apa dan bagaimana menggunakannya.
Material
Properti Material memungkinkan seorang pembangun untuk mengatur tekstur bagian dan properti fisik default (dalam kasus bahwa BasePart.CustomPhysicalProperties tidak diatur).Bahan Plastik default memiliki tekstur yang sangat ringan, dan material SmoothPlastic tidak memiliki tekstur sama semua.Beberapa teks material seperti DiamondPlate dan Granite memiliki teks yang sangat terlihat.Tekstur setiap material mencerminkan sinar matahari secara berbeda, terutama Foil.
Mengatur properti ini kemudian mengaktifkan BasePart.CustomPhysicalProperties akan menggunakan properti fisik default dari materi.Sebagai kejadian, DiamondPlate adalah material yang sangat padat sementara Kayu sangat ringan.Kepadatan bagian menentukan apakah akan mengapung di air medan.
Perubahan materi Kaca mengubah perilaku rendering pada pengaturan grafis sedang.Ini menerapkan sedikit reflektivitas (mirip dengan BasePart.Reflectance ) dan distorsi perspektif.Efeknya terutama terlihat pada bagian berbentuk bulat (atur BasePart.Shape ke Bola).Objek semi-transparan dan bagian Kaca di balik Kaca tidak terlihat.
Contoh Kode
This code sample will allow a part to be clicked to toggle its anchored property. When toggled, the visual appearance of the part is updated (red means anchored, yellow means free).
local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)
MaterialVariant
Sistem mencari instansi MaterialVariant dengan nama MaterialVariant yang ditentukan dan ketikBasePart.Material .Jika berhasil menemukan instansi Varian Material yang cocok, ia menggunakan instansi Varian Material ini untuk menggantikan materi default.Bahan default bisa menjadi bahan yang dibangun atau pengecualian MaterialVariant yang ditentukan di MaterialService .
Orientation
Properti Orientasi menggambarkan rotasi bagian dalam derajat di sekitar sumbu X, Y, dan Z menggunakan Vector3.Rotasi diterapkan dalam urutan Y → X → Z.Ini berbeda dari sudut Euler yang tepat dan sebaliknya sudut Tait-Bryan , yang menggambarkan ketinggian, kemiringan, dan gulungan .Juga patut dicatat bagaimana properti ini berbeda dari konstruktor CFrame.Angles() , yang menerapkan rotasi dalam urutan yang berbeda (Z → Y → X).Untuk kontrol yang lebih baik atas rotasi suku cadang, disarankan untuk mengatur BasePart.CFrame sebagai gantinya.
Saat mengatur properti ini, apa pun Welds atau Motor6Ds yang terhubung ke bagian ini akan memiliki properti yang cocok C0 atau C1 yang diperbarui dan untuk mengizinkan bagian bergerak relatif terhadap bagian lain yang terhubung dengannya.
Kontraksi Las juga akan dinonaktifkan sementara dan diaktifkan kembali selama pindah.
Contoh Kode
This code sample rotates a part continually on the Y axis.
local part = script.Parent
local INCREMENT = 360 / 20
-- Rotate the part continually
while true do
for degrees = 0, 360, INCREMENT do
-- Set only the Y axis rotation
part.Rotation = Vector3.new(0, degrees, 0)
-- A better way to do this would be setting CFrame
--part.CFrame = CFrame.new(part.Position) * CFrame.Angles(0, math.rad(degrees), 0)
task.wait()
end
end
PivotOffset
Properti ini menentukan offset dari pivot bagian dari CFrame , yaitu part:GetPivot() adalah sama dengan part.CFrame * part.PivotOffset .
Ini nyaman untuk menetapkan titik pivot ke lokasi di ruang lokal , tetapi menetapkan titik pivot bagian ke lokasi di ruang dunia dapat dilakukan sebagai berikut:
local Workspace = game:GetService("Workspace")local part = Workspace.BluePartlocal desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)
Contoh Kode
This code sample shows a custom function for resetting the pivot of a model back to the center of that model's bounding box.
local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)
This code sample creates a clock at the origin with a minute, second, and hour hand, and makes it tick, displaying the local time.
local function createHand(length, width, yOffset)
local part = Instance.new("Part")
part.Size = Vector3.new(width, 0.1, length)
part.Material = Enum.Material.Neon
part.PivotOffset = CFrame.new(0, -(yOffset + 0.1), length / 2)
part.Anchored = true
part.Parent = workspace
return part
end
local function positionHand(hand, fraction)
hand:PivotTo(CFrame.fromEulerAnglesXYZ(0, -fraction * 2 * math.pi, 0))
end
-- Create dial
for i = 0, 11 do
local dialPart = Instance.new("Part")
dialPart.Size = Vector3.new(0.2, 0.2, 1)
dialPart.TopSurface = Enum.SurfaceType.Smooth
if i == 0 then
dialPart.Size = Vector3.new(0.2, 0.2, 2)
dialPart.Color = Color3.new(1, 0, 0)
end
dialPart.PivotOffset = CFrame.new(0, -0.1, 10.5)
dialPart.Anchored = true
dialPart:PivotTo(CFrame.fromEulerAnglesXYZ(0, (i / 12) * 2 * math.pi, 0))
dialPart.Parent = workspace
end
-- Create hands
local hourHand = createHand(7, 1, 0)
local minuteHand = createHand(10, 0.6, 0.1)
local secondHand = createHand(11, 0.2, 0.2)
-- Run clock
while true do
local components = os.date("*t")
positionHand(hourHand, (components.hour + components.min / 60) / 12)
positionHand(minuteHand, (components.min + components.sec / 60) / 60)
positionHand(secondHand, components.sec / 60)
task.wait()
end
Position
Properti Posisi menggambarkan koordinat dari part menggunakan Vector3 .Ini mencerminkan posisi bagian BasePart.CFrame , namun juga dapat atur.
Saat mengatur properti ini, apa pun Welds atau Motor6Ds yang terhubung ke bagian ini akan memiliki properti yang cocok C0 atau C1 yang diperbarui dan untuk mengizinkan bagian bergerak relatif terhadap bagian lain yang terhubung dengannya.
Kontraksi Las juga akan dinonaktifkan sementara dan diaktifkan kembali selama pindah.
ReceiveAge
Ini mengembalikan waktu dalam detik sejak fisika bagian terakhir diperbarui di klien lokal (atau server).Kembalikan 0 saat bagian tidak memiliki fisika (Tertahan)
Reflectance
Properti Reflectance menentukan berapa banyak part memantulkan skybox.Nilai 0 menunjukkan bagian tidak reflektif sama semua, dan nilai 1 menunjukkan bagian harus sepenuhnya tercermin.
Refleksi tidak dipengaruhi oleh BasePart.Transparency , kecuali bagiannya benar-benar transparan, dalam hal ini refleksi tidak akan ditampilkan sama semua.Refleksi mungkin atau mungkin tidak diabaikan tergantung pada BasePart.Material dari bagian.
Contoh Kode
This code sample causes a part to blink its Reflectance and a PointLight every time it is touched. It uses a pattern that prevents multiple concurrent function calls from fighting with each other.
local part = script.Parent
local pointLight = Instance.new("PointLight")
pointLight.Brightness = 0
pointLight.Range = 12
pointLight.Parent = part
local touchNo = 0
local function blink()
-- Advance touchNo to tell other blink() calls to stop early
touchNo = touchNo + 1
-- Save touchNo locally so we can tell when it changes globally
local myTouchNo = touchNo
for i = 1, 0, -0.1 do
-- Stop early if another blink started
if touchNo ~= myTouchNo then
break
end
-- Update the blink animation
part.Reflectance = i
pointLight.Brightness = i * 2
task.wait(0.05)
end
end
part.Touched:Connect(blink)
ResizeIncrement
Properti ResizeIncrement adalah properti hanya baca yang menggambarkan perubahan terkecil dalam ukuran yang diizinkan oleh metode BasePart:Resize().Ini berbeda antara implementasi kelas abstrak BasePart .Sebagai kejadian, Part memiliki set ini ke 1 dan TrussPart memiliki set ini ke 2 (karena bagian truss individu adalah 2x2x2 dalam ukuran).
Contoh Kode
This code sample creates a Handles object and shows how to set the Faces property of the object. It also references ResizeableFaces of a part. Try placing this script in multiple kinds of parts to see how ResizeableFaces varies.
-- Put this Script in several kinds of BasePart, like
-- Part, TrussPart, WedgePart, CornerWedgePart, etc.
local part = script.Parent
-- Create a handles object for this part
local handles = Instance.new("Handles")
handles.Adornee = part
handles.Parent = part
-- Manually specify the faces applicable for this handle
handles.Faces = Faces.new(Enum.NormalId.Top, Enum.NormalId.Front, Enum.NormalId.Left)
-- Alternatively, use the faces on which the part can be resized.
-- If part is a TrussPart with only two Size dimensions
-- of length 2, then ResizeableFaces will only have two
-- enabled faces. For other parts, all faces will be enabled.
handles.Faces = part.ResizeableFaces
ResizeableFaces
Properti ResizableFaces (dengan e , bukan ResizableFaces) menggambarkan penggunaan objek Wajah untuk menyesuaikan wajah yang berbeda di mana bagian dapat diubah ukurannya.Untuk sebagian besar implementasi dari BasePart , seperti Part dan WedgePart , properti ini mencakup semua wajah.Namun, akan menetapkan set Wajah yang Dapat diubah menjadi hanya dua wajah karena jenis bagian tersebut harus memiliki dua dimensi panjang 2.Properti ini paling sering digunakan dengan alat yang digunakan untuk membangun dan memanipulasi bagian dan memiliki sedikit penggunaan di luar konteks itu.Kelas Handles dengan properti Handles.Faces dapat digunakan bersama dengan properti ini untuk menampilkan hanya pegangan di wajah yang dapat diubah ukurannya di bagian.
Contoh Kode
This code sample creates a Handles object and shows how to set the Faces property of the object. It also references ResizeableFaces of a part. Try placing this script in multiple kinds of parts to see how ResizeableFaces varies.
-- Put this Script in several kinds of BasePart, like
-- Part, TrussPart, WedgePart, CornerWedgePart, etc.
local part = script.Parent
-- Create a handles object for this part
local handles = Instance.new("Handles")
handles.Adornee = part
handles.Parent = part
-- Manually specify the faces applicable for this handle
handles.Faces = Faces.new(Enum.NormalId.Top, Enum.NormalId.Front, Enum.NormalId.Left)
-- Alternatively, use the faces on which the part can be resized.
-- If part is a TrussPart with only two Size dimensions
-- of length 2, then ResizeableFaces will only have two
-- enabled faces. For other parts, all faces will be enabled.
handles.Faces = part.ResizeableFaces
RightSurface
Properti Surface Kanan menentukan jenis permukaan yang digunakan untuk arah +X suku cadang.Ketika wajah dua bagian ditempatkan di samping satu sama lain, mereka dapat membuat kesepakatan bersama di antara mereka.Jika diatur ke Motor, BasePart.RightSurfaceInput menentukan bagaimana koneksi motor harus berperilaku.
Kebanyakan SurfaceType menampilkan tekstur di bagian wajah jika BasePart.Material diatur ke Plastik.Beberapa Tipe Permukaan termasuk Hinge, Motor, dan SteppingMotor akan menampilkan dekorasi 3D sebagai gantinya.Jika properti ini dipilih di jendela Properti, itu akan disorot di dunia permainan yang mirip dengan SurfaceSelection .
Contoh Kode
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
RootPriority
Properti ini adalah bilangan bulat antara -127 dan 127 yang memiliki prioritas lebih tinggi dari semua aturan lain untuk urutan bagian akar.Saat mempertimbangkan beberapa bagian yang tidak Anchored dan yang berbagi nilai Massless yang sama, bagian dengan prioritas RootPriority yang lebih tinggi akan mendapat prioritas atas mereka yang memiliki prioritas RootPriority yang lebih rendah.
Anda dapat menggunakan properti ini untuk mengontrol bagian mana dari kumpulan yang merupakan bagian akar dan menjaga bagian akar tetap stabil jika perubahan ukuran terjadi.
Lihat juga Komponen, sebuah artikel yang dokumentasikan bagian akar apa dan bagaimana menggunakannya.
Rotation
Rotasi bagian dalam derajat untuk tiga sumbu.
Saat mengatur properti ini, apa pun Welds atau Motor6Ds yang terhubung ke bagian ini akan memiliki properti yang cocok C0 atau C1 yang diperbarui dan untuk mengizinkan bagian bergerak relatif terhadap bagian lain yang terhubung dengannya.
Kontraksi Las juga akan dinonaktifkan sementara dan diaktifkan kembali selama pindah.
Size
Properti bagian menentukan dimensi visualnya, sementara mewakili ukuran aktual yang digunakan oleh mesin fisika, seperti dalam deteksi kolisi .Dimensi individu (panjang, lebar, ketinggian) bisa sekecil 0,001 dan sebagai tinggi 2048.Dimensi ukuran di bawah 0,05 akan menjadi visual diwakili seolah-olah dimensi bagian adalah 0,05.
Ukuran bagian menentukan massanya yang diberikan oleh BasePart:GetMass() . Bagian Size digunakan oleh berbagai objek lain:
- ParticleEmitter untuk menentukan area dari mana partikel dihasilkan.
- BlockMesh untuk sebagian menentukan prisma berbentuk segi panjang yang diterapkan.
- SpecialMesh untuk tertentu MeshTypes , untuk menentukan ukuran meshes yang drender.
- SurfaceLight untuk menentukan ruang untuk diterangi.
Contoh Kode
This code sample constructs a pyramid by stacking parts that get progressively smaller. It also colors the parts so they blend between a start color and end color.
local TOWER_BASE_SIZE = 30
local position = Vector3.new(50, 50, 50)
local hue = math.random()
local color0 = Color3.fromHSV(hue, 1, 1)
local color1 = Color3.fromHSV((hue + 0.35) % 1, 1, 1)
local model = Instance.new("Model")
model.Name = "Tower"
for i = TOWER_BASE_SIZE, 1, -2 do
local part = Instance.new("Part")
part.Size = Vector3.new(i, 2, i)
part.Position = position
part.Anchored = true
part.Parent = model
-- Tween from color0 and color1
local perc = i / TOWER_BASE_SIZE
part.Color = Color3.new(
color0.R * perc + color1.R * (1 - perc),
color0.G * perc + color1.G * (1 - perc),
color0.B * perc + color1.B * (1 - perc)
)
position = position + Vector3.new(0, part.Size.Y, 0)
end
model.Parent = workspace
TopSurface
Properti TopSurface menentukan jenis permukaan yang digunakan untuk arah +Y suku cadang.Ketika wajah dua bagian ditempatkan di samping satu sama lain, mereka dapat membuat kesepakatan bersama di antara mereka.Jika diatur ke Motor, BasePart.TopSurfaceInput menentukan bagaimana koneksi motor harus berperilaku.
Kebanyakan SurfaceType menampilkan tekstur di bagian wajah jika BasePart.Material diatur ke Plastik.Beberapa Tipe Permukaan - Hinge, Motor, dan SteppingMotor - akan menampilkan dekorasi 3D sebagai gantinya.Jika properti ini dipilih di jendela Properti, itu akan disorot di dunia permainan yang mirip dengan SurfaceSelection .
Contoh Kode
This code sample shows what each SurfaceType looks like on a part. In addition, it creates a BillboardGui label on the part with a TextLabel that reflects the name of the current SurfaceType.
local demoPart = script.Parent
-- Create a billboard gui to display what the current surface type is
local billboard = Instance.new("BillboardGui")
billboard.AlwaysOnTop = true
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.Adornee = demoPart
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 50)
textLabel.BackgroundTransparency = 1
textLabel.TextStrokeTransparency = 0
textLabel.TextColor3 = Color3.new(1, 1, 1) -- White
textLabel.Parent = billboard
billboard.Parent = demoPart
local function setAllSurfaces(part, surfaceType)
part.TopSurface = surfaceType
part.BottomSurface = surfaceType
part.LeftSurface = surfaceType
part.RightSurface = surfaceType
part.FrontSurface = surfaceType
part.BackSurface = surfaceType
end
while true do
-- Iterate through the different SurfaceTypes
for _, enum in pairs(Enum.SurfaceType:GetEnumItems()) do
textLabel.Text = enum.Name
setAllSurfaces(demoPart, enum)
task.wait(1)
end
end
Transparency
Properti Transparansi mengontrol visibilitas bagian pada skala 0 hingga 1, di mana 0 sepenuhnya terlihat (tidak transparan), dan nilai 1 sepenuhnya tidak terlihat (tidak disajikan sama semua).
BasePart.Reflectance dapat mengurangi transparansi keseluruhan dari sebuah batu bata jika diatur ke nilai yang dekat dengan 1.
Sementara bagian yang benar-benar transparan tidak ditampilkan sama semua, objek parsial yang transparan memiliki biaya rendering yang signifikan.Memiliki banyak bagian transparan dapat memperlambat pelaksanaangame.
Ketika bagian transparan tumpang tindih, perintah penyajian dapat bertindak tidak dapat diprediksi - cobalah untuk menjaga bagian semi-transparan agar tidak tumpang tindih untuk menghindari ini.
The BasePart.LocalTransparencyModifier adalah pengganda untuk Transparansi yang hanya terlihat oleh klien lokal.
Contoh Kode
This code sample shows how a part can fade away when touched by a Humanoid then reappear a moment after to create a passable door.
-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()
This code sample gives the local client X-ray vision using LocalTransparencyModifier. It allows the player to see through all parts in the Workspace, which are found using recursion.
local function makeXRayPart(part)
-- LocalTransparencyModifier will make parts see-through but only for the local
-- client, and it won't replicate to the server
part.LocalTransparencyModifier = 0.5
end
-- This function uses recursion to search for parts in the game
local function recurseForParts(object)
if object:IsA("BasePart") then
makeXRayPart(object)
end
-- Stop if this object has a Humanoid - we don't want to see-through players!
if object:FindFirstChildOfClass("Humanoid") then
return
end
-- Check the object's children for more parts
for _, child in pairs(object:GetChildren()) do
recurseForParts(child)
end
end
recurseForParts(workspace)
Metode
AngularAccelerationToTorque
Parameter
Memberikan nilai
ApplyAngularImpulse
Menerapkan pulsa gaya sudut instan ke penggabungan bagian ini, menyebabkan penggabungan berputar.
Kecepatan sudut yang dihasilkan dari impuls bergantung pada mass pengumpulan.Jadi dorongan yang lebih tinggi diperlukan untuk memindahkan kumpulan yang lebih besar.Impuls berguna untuk kasus di mana Anda ingin menerapkan kekuatan segera, seperti ledakan atau tabrakan.
Jika bagiannya adalah dimiliki oleh server, fungsi ini harus dipanggil dari server Script (tidak dari LocalScript atau Script dengan RunContext diatur ke Enum.RunContext.Client ).Jika bagian dimiliki oleh klien melalui kepemilikan otomatis automatic , fungsi ini dapat dipanggil dari skrip klien atau skrip server; memanggilnya dari skrip klien untuk bagian yang dimiliki oleh server tidak akan berpengaruh.
Parameter
Vektor impuls sudut untuk diterapkan ke kumpulan.
Memberikan nilai
ApplyImpulse
Fungsi ini menerapkan dorongan kekuatan instan ke pengumpulan bagian ini.
Kekuatan diterapkan pada kumpulan center of mass , jadi gerakan yang dihasilkan hanya akan linier.
Kecepatan yang dihasilkan dari impuls bergantung pada mass pengumpulan.Jadi dorongan yang lebih tinggi diperlukan untuk memindahkan kumpulan yang lebih besar.Impuls berguna untuk kasus di mana Anda ingin menerapkan kekuatan segera, seperti ledakan atau tabrakan.
Jika bagiannya adalah dimiliki oleh server, fungsi ini harus dipanggil dari server Script (tidak dari LocalScript atau Script dengan RunContext diatur ke Enum.RunContext.Client ).Jika bagian dimiliki oleh klien melalui kepemilikan otomatis automatic , fungsi ini dapat dipanggil dari skrip klien atau skrip server; memanggilnya dari skrip klien untuk bagian yang dimiliki oleh server tidak akan berpengaruh.
Parameter
Vektor impuls linier untuk diterapkan ke kumpulan.
Memberikan nilai
ApplyImpulseAtPosition
Fungsi ini menerapkan dorongan kekuatan instan ke pengumpulan bagian ini, di posisi yang ditentukan di ruang dunia.
Jika posisi tidak berada di center of mass pengumpulan, impuls akan menyebabkan gerakan posisi dan rotasi.
Kecepatan yang dihasilkan dari impuls bergantung pada mass pengumpulan.Jadi dorongan yang lebih tinggi diperlukan untuk memindahkan kumpulan yang lebih besar.Impuls berguna untuk kasus di mana pengembang ingin menerapkan kekuatan segera, seperti ledakan atau tabrakan.
Jika bagiannya adalah dimiliki oleh server, fungsi ini harus dipanggil dari server Script (tidak dari LocalScript atau Script dengan RunContext diatur ke Enum.RunContext.Client ).Jika bagian dimiliki oleh klien melalui kepemilikan otomatis automatic , fungsi ini dapat dipanggil dari skrip klien atau skrip server; memanggilnya dari skrip klien untuk bagian yang dimiliki oleh server tidak akan berpengaruh.
Parameter
Vektor impuls yang harus diterapkan ke kumpulan.
Posisi, di ruang dunia, untuk menerapkan impuls.
Memberikan nilai
CanCollideWith
Kembalikan apakah bagian dapat bertabrakan satu sama lain atau tidak.Fungsi ini mempertimbangkan kelompok tabrakan dari dua bagian.Fungsi ini akan gagal jika bagian yang ditentukan bukan BasePart.
Parameter
Bagian yang ditentukan diperiksa untuk kemungkinan tabrakan.
Memberikan nilai
Apakah bagian-bagian dapat bertabrakan satu sama lain.
CanSetNetworkOwnership
Fungsi CanSetNetworkOwnership memeriksa apakah Anda dapat mengatur kepemilikan jaringan bagian.
Nilai pengembalian fungsi memeriksa apakah Anda dapat memanggil BasePart:SetNetworkOwner() atau BasePart:SetNetworkOwnershipAuto() tanpa menemukan kesalahan.Ini mengembalikan benar jika Anda dapat memodifikasi/membaca kepemilikan jaringan, atau mengembalikan false dan alasan Anda tidak bisa, sebagai string.
Memberikan nilai
Apakah Anda dapat memodifikasi atau membaca kepemilikan jaringan dan alasannya.
Contoh Kode
This example checks whether or not the network ownership of the first BasePart named Part in the Workspace can be set.
local part = workspace:FindFirstChild("Part")
if part and part:IsA("BasePart") then
local canSet, errorReason = part:CanSetNetworkOwnership()
if canSet then
print(part:GetFullName() .. "'s Network Ownership can be changed!")
else
warn("Cannot change the Network Ownership of " .. part:GetFullName() .. " because: " .. errorReason)
end
end
GetConnectedParts
Kembalikan tabel bagian yang terhubung ke objek dengan jenis persambungan kaku apa pun.
Jika recursive benar, fungsi ini akan mengembalikan semua bagian dalam kumpulan yang terhubung ketat ke BasePart.
Sendi Tegak
Ketika koneksi bersama menghubungkan dua bagian bersama (Part0 → Part1) , koneksi adalah kaku jika fisika Part1 diblokir sepenuhnya oleh Part0 .Ini hanya berlaku untuk jenis bergabung berikut:
Parameter
Memberikan nilai
GetJoints
Kembalikan semua Persyaratan atau Batasan yang terhubung ke Bagian ini.
Memberikan nilai
Sebuah array dari semua Joint atau Constraints yang terhubung ke Part.
GetMass
DapatkanMass mengembalikan nilai properti read-only Mass.
Fungsi ini mengungguli properti Mass. Ini tetap didukung untuk kompatibilitas mundur; Anda harus menggunakan properti Mass secara langsung.
Memberikan nilai
Massa bagian.
Contoh Kode
This example creates a new part, myPart, in the game's Workspace, with dimensions 4x6x4 studs. The part is also anchored.
Then, myMass is set to equal the mass of the new part. The mass of the part is printed at the end of the print statement:
My part's mass is ...
local myPart = Instance.new("Part")
myPart.Size = Vector3.new(4, 6, 4)
myPart.Anchored = true
myPart.Parent = workspace
local myMass = myPart:GetMass()
print("My part's mass is " .. myMass)
GetNetworkOwner
Kembalikan pemain saat ini yang merupakan pemilik jaringan dari bagian ini, atau nil dalam kasus server.
Memberikan nilai
Pemain saat ini yang merupakan pemilik jaringan dari bagian ini, atau nil dalam kasus server.
GetNetworkOwnershipAuto
Kembali benar jika mesin permainan secara otomatis memutuskan pemilik jaringan untuk bagian ini.
Memberikan nilai
Apakah mesin game secara otomatis memutuskan pemilik jaringan untuk bagian ini.
GetNoCollisionConstraints
Memberikan nilai
GetRootPart
Kembalikan bagian dasar dari sebuah kumpulan.Saat memindahkan kumpulan bagian menggunakan CFrame .penting untuk memindahkan bagian dasar ini (ini akan memindahkan semua bagian lain yang terhubung kepadanya sesuai dengan itu).Lebih banyak informasi tersedia di artikel Kumpulan.
Fungsi ini mengungguli properti AssemblyRootPart sebelumnya. Ini tetap didukung untuk kompatibilitas mundur, tetapi Anda harus menggunakan AssemblyRootPart langsung.
Memberikan nilai
Bagian dasar dari sebuah kumpulan (kumpulan bagian yang terhubung bersama).
GetTouchingParts
Kembalikan tabel semua bagian yang secara fisik berinteraksi dengan bagian ini.Jika bagian itu sendiri memiliki CanCollide diatur ke false, maka fungsi ini akan mengembalikan tabel kosong kecuali bagian memiliki objek TouchInterest yang diberikan kepadanya (berarti sesuatu terhubung ke acara Touched-nya).Bagian yang berdekatan tetapi tidak berpotongan tidak dianggap menyentuh.Fungsi ini mengungguli fungsi WorldRoot:GetPartsInPart() yang memberikan lebih banyak fleksibilitas dan menghindari aturan khusus TouchInterest yang dijelaskan di atas.Gunakan WorldRoot:GetPartsInPart() sebagai gantinya.
Memberikan nilai
Meja dari semua bagian yang berpotongan dan dapat bertabrakan dengan bagian ini.
GetVelocityAtPosition
Kembalikan kecepatan linier penggabungan bagian pada posisi yang diberikan relatif terhadap bagian ini.Ini dapat digunakan untuk mengidentifikasi kecepatan linier bagian dalam penggabungan selain bagian akar.Jika kumpulan tidak memiliki kecepatan sudut, maka kecepatan linier akan selalu sama untuk setiap posisi.
Parameter
Memberikan nilai
IsGrounded
Kembalikan benar jika objek terhubung ke bagian yang akan menahan di tempatnya (sebagai contoh bagian Anchored), jika tidak maka kembalikan false.Dalam sebuah kumpulan yang memiliki bagian Anchored , setiap bagian lainnya diperkuat.
Memberikan nilai
Apakah objek terhubung ke bagian yang akan menahan di tempatnya.
Resize
Mengubah ukuran objek seperti menggunakan alat perubah ukuran Studio.
Parameter
Sisi untuk diubah ukurannya.
Berapa banyak untuk tumbuh/menyusut di sisi yang ditentukan.
Memberikan nilai
Apakah bagiannya diubah ukurannya.
SetNetworkOwner
Atur pemain yang diberikan sebagai pemilik jaringan untuk ini dan semua bagian yang terhubung.Ketika playerInstance adalah nil, server akan menjadi pemilik alih-alih pemain.
Parameter
Pemain diberi kepemilikan jaringan bagian.
Memberikan nilai
SetNetworkOwnershipAuto
Membiarkan mesin permainan dinamis memutuskan siapa yang akan menangani fisika bagian (salah satu klien atau server).
Memberikan nilai
TorqueToAngularAcceleration
Parameter
Memberikan nilai
IntersectAsync
Membuat baru IntersectOperation dari geometri berpotongan dari bagian dan bagian lain dalam array yang diberikan.Hanya Parts yang didukung, bukan Terrain atau MeshParts .Mirip dengan Clone() , objek yang dikembalikan tidak memiliki set Parent .
Properti berikut dari bagian panggil diterapkan pada hasil IntersectOperation :
Dalam perbandingan gambar berikut, IntersectAsync() dipanggil pada blok ungu menggunakan tabel yang berisi blok biru.Hasilnya IntersectOperation memecahkan menjadi bentuk geometri interseks dari kedua bagian.

<figcaption>Bagian terpisah</figcaption>

<figcaption>Hasil <code>Klasifikasi.IntersectOperation</code></figcaption>
Catatan
- Bagian asli tetap utuh setelah operasi intersepsi berhasil.Dalam kebanyakan kasus, Anda harus Destroy() semua bagian asli dan menjadi orang tua kembali IntersectOperation ke tempat yang sama dengan panggilan BasePart .
- Secara default, warna wajah dari persimpangan yang dihasilkan dipinjam dari properti Color dari bagian asli.Untuk mengubah seluruh persimpangan menjadi warna tertentu, atur properti UsePartColor nya menjadi true.
- Jika operasi intersepsi akan menghasilkan bagian dengan lebih dari 20.000 segi, akan disederhanakan menjadi 20.000 segi.
Parameter
Objek yang berpartisipasi dalam persimpangan.
Nilai Enum.CollisionFidelity untuk hasil IntersectOperation .
Nilai Enum.RenderFidelity dari hasil PartOperation .
Memberikan nilai
Hasilnya IntersectOperation dengan nama default Terpotong .
SubtractAsync
Membuat baru UnionOperation dari bagian, minus geometri yang ditempati oleh bagian dalam array yang diberikan.Hanya Parts yang didukung, bukan Terrain atau MeshParts .Mirip dengan Clone() , objek yang dikembalikan tidak memiliki set Parent .
Perhatikan bahwa serikat hasil tidak bisa kosong karena pengurangan. Jika operasi akan menghasilkan geometri yang benar-benar kosong, itu akan gagal.
Dalam perbandingan gambar berikut, SubtractAsync() dipanggil pada silinder biru menggunakan tabel yang berisi blok ungu.Hasilnya UnionOperation memecahkan menjadi bentuk yang menghilangkan geometri blok dari silinder.

<figcaption>Bagian terpisah</figcaption>

<figcaption>Hasil <code>Klasifikasi.UnionOperation</code></figcaption>
Parameter
Objek yang berpartisipasi dalam pengurangan.
Nilai Enum.CollisionFidelity untuk hasil UnionOperation .
Nilai Enum.RenderFidelity dari hasil PartOperation .
Memberikan nilai
Hasilnya UnionOperation dengan nama default Union .
Contoh Kode
This example demonstrates how to subtract part(s) from another BasePart to form a negated UnionOperation.
local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Perform subtract operation
local success, newSubtract = pcall(function()
return mainPart:SubtractAsync(otherParts)
end)
-- If operation succeeds, position it at the same location and parent it to the workspace
if success and newSubtract then
newSubtract.Position = mainPart.Position
newSubtract.Parent = Workspace
end
-- Destroy original parts which remain intact after operation
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end
UnionAsync
Membuat baru UnionOperation dari bagian, plus geometri yang ditempati oleh bagian dalam array yang diberikan.Hanya Parts yang didukung, bukan Terrain atau MeshParts .Mirip dengan Clone() , objek yang dikembalikan tidak memiliki set Parent .
Properti berikut dari bagian panggil diterapkan pada hasil UnionOperation :
Dalam perbandingan gambar berikut, UnionAsync() dipanggil pada blok biru menggunakan tabel yang berisi silinder ungu.Hasilnya UnionOperation memecahkan menjadi bentuk geometri gabungan dari kedua bagian.

<figcaption>Bagian terpisah</figcaption>

<figcaption>Hasil <code>Klasifikasi.UnionOperation</code></figcaption>
Catatan
- Bagian asli tetap utuh setelah operasi persatuan berhasil.Dalam kebanyakan kasus, Anda harus Destroy() semua bagian asli dan menjadi orang tua kembali UnionOperation ke tempat yang sama dengan panggilan BasePart .
- Secara default, serikat hasil menghormati properti Color dari masing-masing bagiannya.Untuk mengubah seluruh serikat menjadi warna tertentu, atur properti UsePartColor nya menjadi true.
- Jika operasi serikat akan menghasilkan bagian dengan lebih dari 20.000 segi, akan disederhanakan menjadi 20.000 segi.
Parameter
Objek yang berpartisipasi dalam serikat dengan bagian yang memanggil.
Nilai Enum.CollisionFidelity untuk hasil UnionOperation .
Nilai Enum.RenderFidelity dari hasil PartOperation .
Memberikan nilai
Hasilnya UnionOperation dengan nama default Union .
Contoh Kode
This example demonstrates how to combine the geometry of one BasePart with the geometry of other part(s) to form a UnionOperation.
local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Perform union operation
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- If operation succeeds, position it at the same location and parent it to the workspace
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- Destroy original parts which remain intact after operation
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end
Acara
TouchEnded
Melepaskan api ketika bagian berhenti menyentuh bagian lain dalam kondisi serupa dengan BasePart.Touched .
Acara ini bekerja bersama dengan Workspace.TouchesUseCollisionGroups untuk menentukan apakah kelompok kolisi diakui untuk deteksi.
Parameter
Contoh Kode
This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.
local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
Touched
Peristiwa Ditouch terjadi ketika bagian berhubungan dengan bagian lain.Sebagai kejadian, jika BagianA bertabrakan dengan BagianB , maka PartA.Touched terbakar dengan BagianB , dan PartB.Touched terbakar dengan BagianA .
Acara ini hanya terbakar sebagai hasil dari gerakan fisik, jadi tidak akan terbakar jika properti CFrame diubah sehingga bagian tumpang tindih bagian lain.Ini juga berarti bahwa setidaknya salah satu bagian yang terlibat harus tidak menjadi Anchored pada saat tabrakan.
Acara ini bekerja bersama dengan Workspace.TouchesUseCollisionGroups untuk menentukan apakah kelompok kolisi diakui untuk deteksi.
Parameter
Bagian lain yang berhubungan dengan bagian yang diberikan.
Contoh Kode
This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.
local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
This code sample demonstrates how to connect the BasePart.Touched event of multiple parts in a Model to one function.
local model = script.Parent
local function onTouched(otherPart)
-- Ignore instances of the model coming in contact with itself
if otherPart:IsDescendantOf(model) then
return
end
print(model.Name .. " collided with " .. otherPart.Name)
end
for _, child in pairs(model:GetChildren()) do
if child:IsA("BasePart") then
child.Touched:Connect(onTouched)
end
end