BasePart

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
Tidak Dapat Dijelajahi

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:

Rangkuman

Properti

Properti diwarisi dari PVInstance

Metode

Metode diwarisi dari PVInstance

Acara

Properti

Anchored

Baca Paralel

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).

Part Anchored Toggle

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

Tidak Direplikasi
Baca Paralel

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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

Tidak Direplikasi
Baca Paralel

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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

Baca Paralel

BackSurface

Baca Paralel

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.

Show All SurfaceTypes

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

Baca Paralel

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.

Show All SurfaceTypes

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

Tidak Direplikasi
Baca Paralel

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).

Part Anchored Toggle

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

Baca Paralel

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.

Setting Part CFrame

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

Baca Paralel

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.

Fade 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

Baca Paralel

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

Baca Paralel

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

Baca Paralel

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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

Tidak Direplikasi
Baca Paralel

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().

PhysicsService:RegisterCollisionGroup

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

Tidak Direplikasi
Baca Paralel

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.

Character Health Body Color

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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

Baca Paralel

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.

Set CustomPhysicalProperties

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

Baca Paralel

Ketika benar, dan ketika Workspace.FluidForces diaktifkan, menyebabkan mesin fisika menghitung gaya aerodinamik pada ini BasePart .

ExtentsCFrame

Hanya Baca
Tidak Direplikasi
Baca Paralel

The CFrame dari ekstensi fisik dari BasePart , mewakili pusat fisiknya.

ExtentsSize

Hanya Baca
Tidak Direplikasi
Baca Paralel

Ukuran fisik aktual dari BasePart sebagai dianggap oleh mesin fisika, misalnya dalam deteksi kolisi .

FrontSurface

Baca Paralel

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.

Show All SurfaceTypes

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

Baca Paralel

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.

Show All SurfaceTypes

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

Tersembunyi
Tidak Direplikasi
Baca Paralel

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

Baca Paralel

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.

Recursive Unlock

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

Mass adalah properti baca-hanya yang menggambarkan produk volume dan kepadatan bagian. Ini dikembalikan oleh fungsi GetMass.

Massless

Baca Paralel

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.

Baca Paralel

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).

Part Anchored Toggle

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

Tidak Direplikasi
Baca Paralel

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

Tersembunyi
Tidak Direplikasi
Baca Paralel

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.

Part Spinner

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

Baca Paralel

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.BluePart
local 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.

Reset Pivot

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.

Clock Hands

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

Tersembunyi
Tidak Direplikasi
Baca Paralel

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

Tersembunyi
Hanya Baca
Tidak Direplikasi
Baca Paralel

Ini mengembalikan waktu dalam detik sejak fisika bagian terakhir diperbarui di klien lokal (atau server).Kembalikan 0 saat bagian tidak memiliki fisika (Tertahan)

Reflectance

Baca Paralel

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.

Touch Blink

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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.

Resize Handles

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

Hanya Baca
Tidak Direplikasi
Baca Paralel

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.

Resize Handles

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

Baca Paralel

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.

Show All SurfaceTypes

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

Baca Paralel

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

Tidak Direplikasi
Baca Paralel

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.

Tidak Direplikasi
Baca Paralel

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.

Pyramid Builder

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
Baca Paralel

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.

Show All SurfaceTypes

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

Baca Paralel

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.

Fade 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.

X-Ray Vision

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

angAcceleration: Vector3
Nilai Default: ""
angVelocity: Vector3
Nilai Default: "0, 0, 0"

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

impulse: Vector3

Vektor impuls sudut untuk diterapkan ke kumpulan.

Nilai Default: ""

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

impulse: Vector3

Vektor impuls linier untuk diterapkan ke kumpulan.

Nilai Default: ""

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

impulse: Vector3

Vektor impuls yang harus diterapkan ke kumpulan.

Nilai Default: ""
position: Vector3

Posisi, di ruang dunia, untuk menerapkan impuls.

Nilai Default: ""

Memberikan nilai

()

CanCollideWith

Tulis Paralel

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

part: BasePart

Bagian yang ditentukan diperiksa untuk kemungkinan tabrakan.

Nilai Default: ""

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.

Check if a Part's Network Ownership 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

GetClosestPointOnSurface

Parameter

position: Vector3
Nilai Default: ""

Memberikan nilai

GetConnectedParts

Instances
Tulis Paralel

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

recursive: boolean

Meja bagian yang terhubung ke objek dengan jenis joint apa pun.

Nilai Default: false

Memberikan nilai

Instances

GetJoints

Instances
Tulis Paralel

Kembalikan semua Persyaratan atau Batasan yang terhubung ke Bagian ini.


Memberikan nilai

Instances

Sebuah array dari semua Joint atau Constraints yang terhubung ke Part.

GetMass

Tulis Paralel

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

Finding a Part's Mass

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

Tulis Paralel

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

Tulis Paralel

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

Instances

Memberikan nilai

Instances

GetRootPart

Tulis Paralel

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

Instances

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

Instances

Meja dari semua bagian yang berpotongan dan dapat bertabrakan dengan bagian ini.

GetVelocityAtPosition

Tulis Paralel

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

position: Vector3
Nilai Default: ""

Memberikan nilai

IsGrounded

Tulis Paralel

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

normalId: Enum.NormalId

Sisi untuk diubah ukurannya.

Nilai Default: ""
deltaAmount: number

Berapa banyak untuk tumbuh/menyusut di sisi yang ditentukan.

Nilai Default: ""

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

playerInstance: Player

Pemain diberi kepemilikan jaringan bagian.

Nilai Default: "nil"

Memberikan nilai

()

SetNetworkOwnershipAuto

()

Membiarkan mesin permainan dinamis memutuskan siapa yang akan menangani fisika bagian (salah satu klien atau server).


Memberikan nilai

()

TorqueToAngularAcceleration

Parameter

torque: Vector3
Nilai Default: ""
angVelocity: Vector3
Nilai Default: "0, 0, 0"

Memberikan nilai

IntersectAsync

Hasil

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.

Two block parts overlapping

<figcaption>Bagian terpisah</figcaption>
Parts intersected into a new solid model

<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

parts: Instances

Objek yang berpartisipasi dalam persimpangan.

Nilai Default: ""
collisionfidelity: Enum.CollisionFidelity
Nilai Default: "Default"
renderFidelity: Enum.RenderFidelity
Nilai Default: "Automatic"

Memberikan nilai

Hasilnya IntersectOperation dengan nama default Terpotong .

SubtractAsync

Hasil

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.

Longer block overlapping a cylinder

<figcaption>Bagian terpisah</figcaption>
Block part subtracted from cylinder

<figcaption>Hasil <code>Klasifikasi.UnionOperation</code></figcaption>

Parameter

parts: Instances

Objek yang berpartisipasi dalam pengurangan.

Nilai Default: ""
collisionfidelity: Enum.CollisionFidelity
Nilai Default: "Default"
renderFidelity: Enum.RenderFidelity
Nilai Default: "Automatic"

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.

BasePart:SubtractAsync()

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

Hasil

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.

Block and cylinder parts overlapping

<figcaption>Bagian terpisah</figcaption>
Parts joined together into a single solid union

<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

parts: Instances

Objek yang berpartisipasi dalam serikat dengan bagian yang memanggil.

Nilai Default: ""
collisionfidelity: Enum.CollisionFidelity
Nilai Default: "Default"
renderFidelity: Enum.RenderFidelity
Nilai Default: "Automatic"

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.

BasePart:UnionAsync()

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

otherPart: BasePart

Contoh Kode

This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.

Touching Parts Count

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

otherPart: BasePart

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.

Touching Parts Count

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.

Model Touched

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