BasePart
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
BasePart adalah kelas k
Untuk informasi tentang cara BaseParts diatur menjadi tubuh kaku, lihat Assemblies .
Ada banyak objek yang berinteraksi dengan BasePart (selain Terrain ) termasuk:
- Beberapa BaseParts dapat dikumpulkan dalam satu Model dan digerakkan pada saat yang sama menggunakan PVInstance:PivotTo(). Lihat 2> Model2> .
- ParticleEmitter objek mengemudi partikel secara seragam dalam volume BasePart ke mana mereka berasal. Lihat Pengeluar Partikel .
- Objek cahaya seperti PointLight memancarkan cahaya dari pusat BasePart seperti yang ditunjukkan dalam Sumber Cahaya .
Rangkuman
Properti
Menentukan apakah bagian itu tidak dapat dipindahkan oleh fisika.
Kecepatan sudut dari pemasangan bagian.
Pusat massa pemasangan bagian di ruang dunia.
Kecepatan liniasi bagian.
Jumlah total pemasangan bagian.
Sebuah referensi ke bagian akhir dari pemasangan.
Mendeterminas jenis permukaan untuk Wajah Belakang sebuah bagian (+Z arah).
Mendeterminas jenis permukaan untuk Wajah Bawah bagian (-Y).
Mengubah warna bagian.
Mengidentifikasi posisi dan orientasi BasePart di dunia.
Menentukan apakah bagian dapat bertabrakan dengan bagian lain.
Mengukur apakah bagian dianggap selama operasi pencarian ruang.
Menentukan apakah acara Touched dan TouchEnded di pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri pihak kiri
Menentukan apakah atau tidak bagian menggunakan bayangan.
Menggambarkan lokasi posisi dunia di mana pusat massa bagian berada.
Menggambarkan nama gruptabrakan bagian.
Mengubah warna bagian.
Menunjukkan proporsi fisik saat ini dari bagian.
Mengidentifikasi beberapa sifat fisik bagian.
Digunakan untuk mengaktifkan atau menonaktifkan kekuatan aerodinamik pada bagian dan asal.
Datatype.CFrame dari ekstensi fisik Class.BasePart .
Ukuran fisik sebenarnya dari BasePart seperti yang dilihat oleh mesin fisika.
Mendeterminas jenis permukaan untuk Wajah Depan sebuah bagian (-Z arah).
Mendeterminas jenis permukaan untuk Wajah Kiri sebuah bagian (-X arah).
Mengidentifikasi pengganda untuk BasePart.Transparency yang hanya terlihat bagi klien lokal.
Mengesokkan apakah bagian dapat dipilih di Studio.
Menggambarkan massa bagian, produk dari kedensitas dan volume.
Menentukan apakah bagiannya berkontribusi pada total massa atau inersia tubuh kerasnya.
Mengidentifikasi tekstur dan proporsi fisik default sebuah bagian.
Nama dari MaterialVariant .
Menggambarkan rotasi bagian di dunia.
MengukurOffset bagian dari pivotnya dari CFrame nya.
Menggambarkan posisi bagian di dunia.
Waktu sejak updatefisika terakhir.
Menentukan seberapa banyak bagian mencerminkan langit.
Menggambarkan perubahan ukuran terkecil yang diizinkan oleh metode Resize.
Menggambarkan wajah mana yang dapat diubah ukurannya.
Mengidentifikasi jenis permukaan untuk Wajah Kanan bagian (+X arah).
Aturan utama dalam menentukan bagian akar dari sebuahAssembly.
Rotasi bagian dalam derajat untuk tiga sumbu.
Mengukur dimensi sebuah bagian (panjang, lebar, tinggi).
Mendeterminas jenis permukaan untuk Wajah Atas bagian (+Y arah).
Menentukan seberapa banyak bagian dapat dilihat melalui (kebalikan dari keopakean bagian).
Metode
Terapkan dorongan sudut ke kumpulan.
Terapkan dorongan ke kumpulan pada kumpulan pemasangan di pemasangan's center of mass .
Terapkan dorongan ke kumpulan pada posisi yang ditentukan.
Mengembalikan apakah bagian dapat bertabrakan satu sama lain.
Memeriksa apakah Anda dapat menetapkan kepemilikan jaringan bagian.
Mengembalikan tabel bagian yang terhubung ke objek dengan jenis tali keras apa pun.
Kembalikan semua Joints atau Constraint yang terhubung ke Bagian ini.
Mengembalikan nilai dari properti Mass .
Mengembalikan pemain saat ini yang merupakan pemilik jaringan bagian ini, atau nol dalam kasus server.
Mengembalikan benar jika mesin game secara otomatis memutuskan pemilik jaringan untuk bagian ini.
Mengembalikan bagian dasar dari pengumpulan bagian.
Mengembalikan tabel semua BasePart.CanCollide bagian yang benar yang berintervensi dengan bagian ini.
Mengembalikan kecepatan lini bagian yang diberikan relatif terhadap posisi ini.
Mengembalikan benar jika objek terhubung ke bagian yang akan menahan objek tersebut (eg bagian Anchored), jika tidak mengembalikan salah.
Mengubah ukuran objek hanya seperti menggunakan alat resize Studio.
Tetapkan pemain yang diberikan sebagai pemilik jaringan untuk ini dan semua bagian yang terhubung.
Memungkinkan mesin game secara dinamis memutuskan siapa yang akan menangani fisika bagian (salah satu klien atau server).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Menciptakan IntersectOperation baru dari geometri yang bertumpang-tindih dari bagian dan bagian lain dalam array yang diberikan.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Menciptakan UnionOperation baru dari bagian, minus geometri yang ditempati oleh bagian dalam array yang diberikan.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Menciptakan UnionOperation baru dari bagian, plus geometri yang ditempati oleh bagian dalam array yang diberikan.
Mendapatkan pivot dari Class.PVInstance .
Mengubah PVInstance bersama dengan semua anaknya PVInstances sehingga pivot sekarang berada di CFrame yang ditentukan.
Acara
Berdapi saat bagian berhenti menyentuh bagian lain sebagai hasil dari gerakan fisik.
Berdapi saat bagian menyentuh bagian lain sebagai hasil dari gerakan fisik.
Properti
Anchored
Properti Terancam menentukan apakah bagian akan tetap tidak bergerak oleh fisika. Saat diaktifkan, bagian tidak akan pernah berubah posisi karena gravitasi, tabrakan bagian lain, menggabungkan bagian lain, atau karena penyebab fisik lainnya. Sebagai hasilnya, dua bagian yang terancam tidak akan pernah mengaktifkan acara Class.BasePart
Sebuah bagian yang dipasang dapat masih diubah dengan mengubah CFrame atau Position, dan itu masih mungkin memiliki AssemblyLinearVelocity dan 1> Class.BasePart.RotationAngularVelocity|RotationAngular
Akhirnya, jika bagian yang tidak berancang dikaitkan dengan bagian yang berancang melalui objek seperti Weld, itu juga akan bertindak bersama. Jika bagian tersebut rusak, bagian itu mungkin akan terpengaruh oleh fisika lagi. Lihat Assemblies untuk lebih banyak rincian.
Kecakapan jaringan tidak dapat ditetapkan pada bagian yang terancang. Jika status jaringan bagian berganti di server, maka kedudukan jaringan bagian itu akan terpengaruh.
Contoh Kode
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 ini dari penggabungan bagian ini. Ini adalah tingkat perubahan orientasi per detik.
Kecepatan sudut adalah sama di setiap titik pemasangan.
Mengatur kecepatan secara langsung dapat menyebabkan gerakan yang tidak realistis. Menggunakan batasan Torque atau AngularVelocity adalah preferensi, atau gunakan Class.BasePart:ApplyAngularImpulse() jika Anda ingin perubahan instan dalam kecepatan.
Jika bagian adalah dimiliki oleh server, property ini harus diubah dari server Script (bukan dari
AssemblyCenterOfMass
Posisi dihitung melalui mass dan position dari semua bagian dalam pengaturan.
Jika komponen pada dasar pemasangan memiliki bagian tertancap, pusat massa bagian itu akan menjadi pusat massa komponen, dan komponen akan memiliki massa tak terbatas.
Mengetahui pusat massa dapat membantu pemasangan mempertahankan stabilitas. Sebuah kekuatan diterapkan ke pusat massa tidak akan menyebabkan peluatan tarikan, hanya linier. Sebuah pemasangan dengan pusat massa rendah akan memiliki waktu yang lebih baik tetap berdiri di bawah efek gravitasi.
AssemblyLinearVelocity
Vektor kecepatan lini dari pemasangan bagian ini. Ini adalah tingkat perubahan posisi dari pemasangan bagian's center of mass dalam stud per detik.
Jika Anda ingin tahu kecepatan pada titik lain selain pusat massa pemasangan, gunakan BasePart:GetVelocityAtPosition().
Mengatur kecepatan secara langsung dapat menyebabkan gerakan yang tidak realistis. Menggunakan batas VectorForce adalah preferensi, atau menggunakan Class.BasePart:ApplyImpulse() jika Anda ingin perubahan instan dalam kecepatan.
Jika bagian adalah dimiliki oleh server, property ini harus diubah dari server Script (bukan dari
AssemblyMass
Jumlah mass dari semua parts di bagian ini. Bagian yang Massless dan bukan bagian akar pengumpulan tidak akan berkontribusi pada Massasi.
Jika asasi memiliki bagian yang tersentuh, maka massa asasi dianggap tidak terbatas. Batas dan interaksi fisik lainnya antara asasi yang tidak terancang dengan perbedaan massa yang besar dapat menyebabkan ketidakstabilan.
AssemblyRootPart
Properti ini menunjukkan bahwa BasePart secara otomatis dipilih untuk mewakili bagian akar assemblage. Ini adalah bagian yang sama yang dikembalikan ketika pengguna menelepon GetRootPart() .
Bagian akar dapat diubah dengan mengubah RootPriority dari bagian-bagian dalamAssembly.
Bagian yang semua berbagi AssemblerRootPart berada di dalam assemble sama.
Untuk lebih banyak informasi tentang bagian akar, lihat Assemblies .
BackSurface
Prop BackSurface menentukan jenis permukaan yang digunakan untuk arah +Z dari bagian. Ketika dua wajah bagian ditempatkan satu sama lain, mereka mungkin menciptakan persamaan di antara mereka. Jika diatur ke Motor, BasePart.BackSurfaceInput menentukan cara bagian bergabungan harus bersikap.
Sebagian besar jenis permukaan menyajikan tekstur pada wajah bagian jika BasePart.Material ditetapkan ke Plastik. Beberapa jenis permukaan - Hinge, Motor dan SteppingMotor - akan menyajikan adornment 3D alih-alih. Jika elemen ini dipilih di jendela Propinsi, itu akan ditampilkan di dunia game yang mirip dengan Class.SurfaceSelection
Contoh Kode
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
Propiedad BottomSurface menentukan jenis permukaan yang digunakan untuk arah -Y dari bagian. Ketika dua wajah bagian ditempatkan satu sama lain, mereka dapat menciptakan persamaan di antara mereka. Jika diatur ke Motor, BasePart.BottomSurfaceInput menentukan cara bagian bergabungan harus bersikap.
Sebagian besar jenis permukaan menyajikan tekstur pada wajah bagian jika BasePart.Material ditetapkan ke Plastik. Beberapa jenis permukaan - Hinge, Motor dan SteppingMotor - akan menyajikan adornment 3D alih-alih. Jika elemen ini dipilih di jendela Propinsi, itu akan ditampilkan di dunia game yang mirip dengan Class.SurfaceSelection
Contoh Kode
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
Prop Color bata menentukan warna bagian. Jika bagian memiliki BasePart.Material, ini juga menentukan warna yang digunakan saat mengekspor tekstur material. Untuk lebih banyak mengontrol warna, prop Color dapat digunakan (itu adalah varian Color3 dari prop ini). Jika Color atur, prop Color akan menggunakan warna terdekat.
プロット lainnya dari sebuah bagian ditentukan oleh BasePart.Transparency dan BasePart.Reflectance.
Contoh Kode
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 Class.BasePart di dunia. Ini bertindak sebagai lokasi referensi arbitrer di geometri, tetapi BasePart mewakili Datatype.CFrame fisik pusatnya.
Ketika menetapkan CFrame di bagian, bagian lain yang bergabung juga diangkat relatif terhadap bagian, tetapi disarankan agar Anda menggunakan PVInstance:PivotTo() untuk menggerakkan seluruh model, seperti saat mengirim karakter pemain.
Tidak seperti menetapkan BasePart.Position, menetapkan BasePart.CFrame akan selalu menggerakkan bagian ke bagian yang tepat; dengan kata lain: CFrame dan solver fisika akan mencoba untuk menyelesaikan persel
Untuk menjaga posisi relatif terhadap bagian CFrame , an Attachment mungkin berguna.
Contoh Kode
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 bagian akan berinteraksi secara fisik dengan bagian lain. Saat dinonaktifkan, bagian lain dapat melewati pintu bata tanpa gangguan. Bagian yang digunakan untuk dekorasi biasanya memiliki CanCollide dinonaktifkan, karena mereka tidak perlu dianggap oleh mesin fisika.
Jika bagian tidak BasePart.Anchored dan memiliki CanCollide dinonaktifkan, itu mungkin jatuh dari dunia untuk akhirnya dihancurkan oleh Workspace.FallenPartsDestroyHeight .
Ketika CanCollide dinonaktifkan, bagian masih dapat menjalankan acara BasePart.Touched (juga bagian lain yang menyentuh mereka). Anda dapat menonaktifkan ini dengan BasePart.CanTouch .
Untuk lebih banyak informasi tentang tabrakan, lihat Tabrakan .
Contoh Kode
-- 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 dianggap selama operasi pencarian ruang, seperti GetPartBoundsInBox atau Raycast. CanCollide juga harus dinonaktifkan ketika menonaktifkan CanQuery. Fungsi-fungsi ini tid
Selainnya, juga mungkin untuk mengecualikan bagian yang merupakan anak dari daftar bagian yang diberikan menggunakan objek OverlapParams atau RaycastParams ketika memanggil fungsi pencarian fisik.
CanTouch
Properti ini menentukan apakah Class.BasePart.Touched|
Catat bahwa logika tabrakan ini dapat diatur untuk menghormati kumpulan tabrakan melalui properti Workspace.TouchesUseCollisionGroups. Jika true, bagian dalam kumpulan non-tabrakan akan mengabaikan kedua tabrakan 1> dan1> touch event, sehingga properti ini tidak relevan.
Kinerja
Ada kenaikan performa kecil pada bagian yang memiliki kedua CanTouch dan CanCollide tetap pada false, karena bagian ini tidak pernah perlu menghitung jenis
CastShadow
Menentukan apakah atau tidak bagian menggunakan bayangan.
Catat bahwa fitur ini tidak tidak dirancang untuk meningkatkan kinerja. Ini hanya boleh dinonaktifkan di bagian di mana Anda ingin menyembunyikan bayangan yang dibuat bagian. Menonaktifkan prop ini untuk bagian tertentu dapat menyebabkan artifak visual di bayangan yang dibuat pada bagian itu.
CenterOfMass
Properti CenterOfMass menjelaskan lokasi lokal posisi pusat mass sebuah bagian. Jika ini adalah pengumpulan bagian tunggal, ini adalah AssemblyCenterOfMass yang dikonversi dari ruang dunia ke lokal. Pada Parts yang
CollisionGroup
Properti CollisionGroup menggambarkan nama kelompok kollisi part (maksimum 100 karakter). Bagian dimulai dengan grup kelompok default (maximum 100 karakter). Valuasi ini tidak dapat kosong.
Meskipun property ini sendiri tidak dapat diklon, mesin secara internal mengkloning nilai melalui property pribadi lain untuk menyelesaikan masalah kompatibilitas mundur.
Contoh Kode
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
Prop warna menentukan warna bagian. Jika bagian memiliki BasePart.Material, ini juga menentukan warna yang digunakan saat mengekspor tekstur material. Jika prop ini diatur, BasePart.BrickColor akan menggunakan warna terdekat dengan nilai Color3.
プロット lainnya dari sebuah bagian ditentukan oleh BasePart.Transparency dan BasePart.Reflectance.
Contoh Kode
-- 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 prop fisik saat ini dari bagian. Anda dapat menetapkan nilai khusus untuk prop fisik per bagian, materi khusus , dan overwrite material. Engine men prioritaskan lebih banyak definisi granular saat menentukan prop fisik efektif dari bagian.Nilai dalam daftar berikut dalam urutan dari tinggi ke rendah:
- Properti fisik khusus dari bagian
- Properti fisik khusus dari bahan khusus bagian
- Properti fisik khusus dari material overlay bagian
- Properti fisik default dari bahan bagian
CustomPhysicalProperties
CustomPhysicalProperties memungkinkan Anda untuk menyesuaikan berbagai aspek fisik dari Part, seperti kepadatan, gesekan, dan elastisitasnya.
Jika diaktifkan, property ini memungkinkan Anda untuk mengkonfigurasi kepribadian fizikal ini. Jika dinonaktifkan, kepribadian fizikal ini ditentukan oleh BasePart.Material dari bagian. Halaman untuk Enum.Material berisi daftar dari berbagai bahan bagian.
Contoh Kode
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 untuk menghitung kekuatan aerodinamik di BasePart ini.
ExtentsSize
Ukuran fisik sebenarnya dari BasePart seperti yang dilihat oleh mesin fisika, misalnya dalam deteksi kolisi.
FrontSurface
Propiedad FrontSurface menentukan jenis permukaan yang digunakan untuk arah -Z dari bagian. Ketika dua wajah bagian ditempatkan satu sama lain, mereka mungkin menciptakan persamaan di antara mereka. Jika diatur ke Motor, BasePart.FrontSurfaceInput menentukan cara bagian bergabungan harus bersikap.
Sebagian besar jenis permukaan menyajikan tekstur pada wajah bagian jika BasePart.Material ditetapkan ke Plastik. Beberapa jenis permukaan, termasuk Hinge, Motor, dan SteppingMotor, menyajikan adornment 3D alih-alih. Jika elemen ini dipilih di jendela Propinsi, itu akan ditampilkan dalam dunia game yang mirip dengan jenis <
Contoh Kode
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
Propiedad LeftSurface menentukan jenis permukaan yang digunakan untuk arah -X dari bagian. Ketika dua wajah bagian ditempatkan satu sama lain, mereka mungkin menciptakan persamaan di antara mereka. Jika diatur ke Motor, BasePart.LeftSurfaceInput menentukan cara bagian bergabungan harus bersikap.
Sebagian besar jenis permukaan menyajikan tekstur pada wajah bagian jika BasePart.Material ditetapkan ke Plastik. Beberapa jenis permukaan, termasuk Hinge, Motor, dan SteppingMotor, menyajikan adornment 3D alih-alih. Jika elemen ini dipilih di jendela Propinsi, itu akan ditampilkan dalam dunia game yang mirip dengan jenis <
Contoh Kode
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 mengkloning dari klien ke server dan berguna ketika bagian yang seharusnya tidak rendah ketika rendah ke klien spesifik, seperti bagaimana pemain tidak melihat tubuh bagian tubuh p
Item ini mengubah transparansi bagian lokal melalui formula berikut, dengan hasil nilai yang diubah antara 0 dan 1.
clientTransparency = 1 - ((1 - part.Transparency) * (1 - part.LocalTransparencyModifier))
<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 | Pengubah Transparansi Lokal | Transparansi Sisi Server | Transparansi Pihak Klient |
---|
Locked
Properti Terkunci menentukan apakah part (atau model itu terkandung dalam) dapat dipilih di Roblox Studio dengan mengklik di atasnya. Properti ini paling sering diaktifkan di bagian-bagian dalam model lingkungan yang tidak sedang diedit saat ini. Roblox
Contoh Kode
-- 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
Massa adalah property yang hanya dibaca yang menggambarkan produk volume dan kedensitas bagian. Ini dikembalikan oleh fungsi GetMass.
- Kepadatan bagian ditentukan oleh Material atau CustomPhysicalProperties , jika di spesifikasi.
Massless
Jika property ini diaktifkan, BasePart tidak akan berkontribusi terhadap total massa atau inersia pemasangannya selama itu dibungkus ke bagian lain yang memiliki massa.
Jika bagian itu adalah bagian akar sendiri menurut AssemblyRootPart, ini akan diabaikan untuk bagian itu, dan masih akan berkontribusi massa dan inersia ke bagiannya seperti bagian normal. Bagian yang tidak ber massa seharusnya tidak pernah menjadi bagian akar bagian lain kecuali semua bagian lain dalam konstruksi juga tidak ber massa.
Ini mungkin berguna untuk hal-hal seperti aksesori opsi pada kendaraan yang tidak Anda inginkan untuk mempengaruhi penanganan mobil atau meshes rendah yang dibentuk untuk menghasilkan kolision yang lebih sederhana.
Lihat juga Assemblies, artikel yang mendokumentasikan apa bagian akar dan cara menggunakannya.
Material
Propietas Material memungkinkan seorang pembangun untuk menetapkan tekstur dan proporsi fisik bagian (dalam kasus bahwa BasePart.CustomPhysicalProperties tidak ditetapkan). Material Plastik default memiliki tekstur sangat ringan, dan material SmoothPlastic tidak memiliki tekstur sama semua. Beberapa material tekstur seperti DiamondPlate dan Granite memiliki tekstur yang sangat terlihat
Mengatur property ini kemudian mengaktifkan BasePart.CustomPhysicalProperties akan menggunakan prop fisik default dari sebuah bahan. kejadian, DiamondPlate adalah bahan yang sangat padat sementara Wood sangat ringan. Kepadatan sebuah bagian menentukan apakah itu akan mengapung dalam air tanah.
Bahan Kaca mengubah perilaku render pada pengaturan grafis sedang. Ini menerapkan sedikit refleksi (similar dengan BasePart.Reflectance ) dan perspektif distorsi. Efeknya terutama terlihat pada bola-bola berbentuk kubus (set BasePart.Shape untuk Bola). Objek dan Glass part behind Glass tidak terlihat.
Contoh Kode
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 itu berhasil menemukan kejadianMaterialVariant yang cocok, itu menggunakan instansi MaterialVariant ini untuk mengganti material bawaan. Material bawaan dapat menjadi material bawaan atau jenis overlay yang ditentukan dalam MaterialService
Orientation
Prop Orientasi menggambarkan rotasi bagian dalam derajat di sekitar sumbu X, Y dan Z menggunakan Vector3. Rotasi diterapkan dalam urutan Y → X → Z
Ketika menetapkan property ini, apa pun Welds atau Motor6Ds yang terhubung ke bagian ini akan memiliki property yang cocok C0 atau 2>Class.JointInstance.C1|C12> yang
WeldSeconds juga akan dinonaktifkan sementara dan direaktifkan kembali selama pindahan.
Contoh Kode
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 menentukanOffset bagian dari pivotnya dari CFrame, yang adalah part:GetPivot() sama dengan part.CFrame * part.PivotOffset .
Ini mudah untuk menetapkan pivot ke lokasi di ruang lokal , tetapi menetapkan pivot bagian ke lokasi di ruang dunia dapat dilakukan sebagai berikut:
local part = workspace.BluePartlocal desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)
Contoh Kode
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)
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
Propiedad Posisi menjelaskan koordinat dari sebuah part menggunakan Datatype.Vector3 . Ini mengambil posisi dari bagian's Vector3 , namun itu juga dapat diatur.
Ketika menetapkan property ini, apa pun Welds atau Motor6Ds yang terhubung ke bagian ini akan memiliki property yang cocok C0 atau 2>Class.JointInstance.C1|C12> yang
WeldSeconds juga akan dinonaktifkan sementara dan direaktifkan kembali selama pindahan.
ReceiveAge
Ini mengembalikan waktu dalam detik karena fisika bagian terakhir diperbarui pada klien lokal (atau server). Mengembalikan 0 ketika bagian tidak memiliki fisika (terancang)
Reflectance
Propietas Refleksi menentukan seberapa banyak part mengambil langit.Nilai 0 menunjukkan bahwa bagian tidak mencerminkan sama semua, dan nilai 1 menunjukkan bahwa bagian seharusnya mencerminkan sepenuhnya.
Refleksi tidak terpengaruh oleh BasePart.Transparency, kecuali jika bagian itu benar-benar transparan, dalam hal ini refleksi tidak akan rendah sama semua. Refleksi mungkin atau mungkin tidak diabaikan tergantung pada BasePart.Material bagian.
Contoh Kode
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
Prop ResizeIncrement adalah prop yang hanya dibaca yang menggambarkan perubahan kecil dalam ukuran yang diizinkan oleh metode BasePart:Resize(). Ini berbeda antara implementasi dari BasePart kelas abstrak. kejadian, Part memiliki
Contoh Kode
-- 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 ResizeableFaces (dengan sebuah e , bukan ResizeableFaces) menggambarkan menggunakan objek Wajah untuk menunjukkan
Contoh Kode
-- 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
Propiedad RightSurface menentukan jenis permukaan yang digunakan untuk arah +X dari bagian. Ketika dua wajah bagian ditempatkan satu sama lain, mereka dapat menciptakan persamaan di antara mereka. Jika diatur ke Motor, BasePart.RightSurfaceInput menentukan cara bagian bergabungan harus bersikap.
Sebagian besar jenis permukaan menyajikan tekstur pada wajah bagian jika BasePart.Material ditetapkan ke Plastik. Beberapa jenis permukaan, termasuk Hinge, Motor, dan SteppingMotor, akan menyajikan adornment 3D alih-alih. Jika elemen ini dipilih di jendela Propinsi, itu akan ditampilkan dalam dunia game yang mirip dengan j
Contoh Kode
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 angka antara -127 dan 127 yang mengambil prioritas atas semua aturan lain untuk urutkanbagian akar. Saat mengconsiderasi beberapa bagian yang bukan Anchored dan berbagi nilai Massless yang sama, bag
Anda dapat menggunakan property ini untuk mengontrol bagian mana dari sebuahAssembly yang merupakan bagian akar dan menjaga bagian akar tetap stabil jika ukuran berubah.
Lihat juga Assemblies, artikel yang mendokumentasikan apa bagian akar dan cara menggunakannya.
Rotation
Rotasi bagian dalam derajat untuk tiga sumbu.
Ketika menetapkan property ini, apa pun Welds atau Motor6Ds yang terhubung ke bagian ini akan memiliki property yang cocok C0 atau 2>Class.JointInstance.C1|C12> yang
WeldSeconds juga akan dinonaktifkan sementara dan direaktifkan kembali selama pindahan.
Size
Properti Size sebuah bagian menentukan dimensi visual nya, sementara ExtentsSize mewakili ukuran yang sebenarn
Ukuran bagian menentukan massanya yang diberikan oleh BasePart:GetMass() . Sebuah bagian's Size digunakan oleh berbagai objek lainnya:
- ParticleEmitter untuk menentukan area dari mana partikel dibuat.
- BlockMesh untuk menentukan sebagian prisma persegi yang di render.
- SpecialMesh untuk beberapa MeshTypes , untuk menentukan ukuran mesh yang di render.
- SurfaceLight untuk menentukan ruang untuk dibercahaya.
Contoh Kode
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
Prop TopSurface menentukan jenis permukaan yang digunakan untuk arah +Y dari bagian. Ketika dua wajah bagian ditempatkan satu sama lain, mereka mungkin menciptakan persamaan di antara mereka. Jika diatur ke Motor, BasePart.TopSurfaceInput menentukan cara bagian bergabungan harus bersikap.
Sebagian besar jenis permukaan menyajikan tekstur pada wajah bagian jika BasePart.Material ditetapkan ke Plastik. Beberapa jenis permukaan - Hinge, Motor dan SteppingMotor - akan menyajikan adornment 3D alih-alih. Jika elemen ini dipilih di jendela Propinsi, itu akan ditampilkan di dunia game yang mirip dengan Class.SurfaceSelection
Contoh Kode
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
Propinsi Transparansi mengontrol keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluruhan keseluru
BasePart.Reflectance dapat mengurangi keseluruhan transparansi sebuah bata jika diatur pada nilai dekat 1.
Sementara bagian yang benar-benar transparan tidak rendah sama semua, objek yang transparan sebagian memiliki beberapa biaya rendah. Memiliki banyak bagian translucent dapat memperlambat pelaksanaangame.
Ketika bagian transparan bertabrakan, urutan render dapat bertindak tidak dapat diprediksi - cobalah untuk menjaga bagian semi-transparan tetap bertabrakan untuk menghindari ini.
Class.BasePart.LocalTransparencyModifier adalah pengganda Transparansi yang hanya terlihat bagi klien lokal.
Contoh Kode
-- 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()
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 dorongan kekuatan sudut instan ke bagian ini, menyebabkan bagian ini berputar.
Kecepatan sudut yang dihasilkan dari impuls bergantung pada mass . Jadi, impuls yang lebih besar diperlukan untuk menghindari lebih banyak assemblei yang lebih besar. Impuls berguna untuk kasus di mana Anda ingin menerapkan kekuatan secara instan, seperti ledakan atau tabrakan.
Jika bagian adalah dimiliki oleh server, fungsi ini harus dipanggil dari server Script (bukan
Parameter
Sebuah vektor kekuatan yang akan diterapkan ke pengumpulan sebagai impuls.
Memberikan nilai
ApplyImpulse
Fungsi ini menerapkan dorongan kekuatan instan ke penggunaan bagian ini.
Kekuatan diterapkan di pusat center of mass , jadi gerakan yang dihasilkan hanya akan lineer.
Kecepatan yang dihasilkan dari impuls bergantung pada mass . Jadi, impuls yang lebih besar diperlukan untuk menghindari lebih banyak assemblei yang lebih besar. Impuls berguna untuk kasus di mana Anda ingin menerapkan kekuatan secara instan, seperti ledakan atau tabrakan.
Jika bagian adalah dimiliki oleh server, fungsi ini harus dipanggil dari server Script (bukan
Parameter
Sebuah vektor kekuatan yang akan diterapkan ke pengumpulan sebagai impuls.
Memberikan nilai
ApplyImpulseAtPosition
Fungsi ini menerapkan dorongan kekuatan instan ke pengaturan bagian ini, di posisi yang ditentukan dalam ruang dunia.
Jika posisi tidak di pusat pemasangan center of mass, impuls akan menyebabkan gerakan posisi dan rotasi.
Kecepatan yang dihasilkan dari impuls bergantung pada mass . Jadi, impuls yang lebih besar diperlukan untuk menghindari lebih banyak assemblei yang lebih besar. Impuls berguna untuk kasus di mana pengembang ingin menerapkan kekuatan secara instan, seperti ledakan atau tabrakan.
Jika bagian adalah dimiliki oleh server, fungsi ini harus dipanggil dari server Script (bukan
Parameter
Sebuah vektor kekuatan yang akan diterapkan ke pengumpulan sebagai impuls.
Posisi, di ruang dunia, untuk menerapkan impuls.
Memberikan nilai
CanCollideWith
Mengembalikan apakah bagian dapat bertabrakan satu sama lain atau tidak. Fungsi ini mengambil kelompok tabrakan dari dua bagian. Fungsi ini akan berhasil jika bagian yang ditentukan bukan Bagian Dasar.
Parameter
Bagian yang ditentukan diperiksa untuk kesesuaian.
Memberikan nilai
Apakah bagian dapat bertabrakan satu sama lain.
CanSetNetworkOwnership
Fungsi CanSetNetworkOwnership memeriksa apakah Anda dapat mengatur kepemilikan jaringan bagian.
Nilai kembali fungsi mengevaluasi apakah Anda dapat memanggil BasePart:SetNetworkOwner() atau BasePart:SetNetworkOwnershipAuto() tanpa menghadapi kesalahan. Itu mengembalikan true jika Anda dapat mengubah/membaca kepemilikan jaringan, atau mengembalikan false dan alasan Anda tidak bisa, sebagai string.
Memberikan nilai
Apakah Anda dapat mengubah atau membaca kepemilikan jaringan dan alasan.
Contoh Kode
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
Mengembalikan tabel bagian yang terhubung ke objek dengan jenis tali keras apa pun.
Jika recursive benar, fungsi ini akan mengembalikan semua bagian dalam pengaturan yang kuat terhubung ke BasePart.
Gerakan yang kaku
Ketika koneksi bersama menghubungkan dua bagian bersama-sama (Part0 → Part1) , koneksi bersama kaku jika fisika Part1 benar-benar terkunci oleh 1> Part01> . Ini hanya berlaku untuk jenis koneksi berikut:
Parameter
Memberikan nilai
GetJoints
Kembalikan semua Joints atau Constraint yang terhubung ke Bagian ini.
Memberikan nilai
Sebuah matriks阵 dari semua Joints atau Constraint yang terhubung ke Part.
GetMass
DapatkanMass mengembalikan nilai dari property Mass yang hanya dibaca.
Fungsi ini lebih tua dari Mass property. Itu tetap didukung untuk kesesuaian belakangan; Anda harus menggunakan property Mass secara langsung.
Memberikan nilai
Massa bagian.
Contoh Kode
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
Mengembalikan pemain saat ini yang merupakan pemilik jaringan bagian ini, atau nol dalam kasus server.
Memberikan nilai
Pemain saat ini yang adalah pemilik jaringan bagian ini, atau nol dalam kasus server.
GetNetworkOwnershipAuto
Mengembalikan benar jika mesin game 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
Mengembalikan bagian dasar dari sebuahAssembly. Saat pindahkan sebuahAssembly of parts menggunakan a CFrame . penting untuk pindahkan bagian dasar ini (ini akan pindahkan semua bagian lainnya yang terhubung dengan itu sesuai). Lebih banyak informasi dapat diperoleh dalam artikel Assemblies.
Fungsi ini mengacaukan propinsi AssemblyRootPart . Ini tetap didukung untuk kompatibilitas mundur, tetapi Anda harus menggunakan AssemblyRootPart langsung.
Memberikan nilai
Bagian dasar dari pengumpulan (koleksi) bagian yang terhubung bersama-sama.
GetTouchingParts
Mengembalikan tabel dari semua bagian yang berinteraksi secara fisik dengan bagian ini. Jika bagian itu sendiri memiliki CanCollide tetap pada false, maka fun
Memberikan nilai
Tabel semua bagian yang bertindak dan dapat bertabrakan dengan bagian ini.
GetVelocityAtPosition
Mengembalikan kecepatan lini bagian dalam posisi yang diberikan relatif terhadap posisi ini. Ini dapat digunakan untuk mengidentifikasi kecepatan lini bagian dalam penggabungan selain bagian akar. Jika penggabungan tidak memiliki kecepatan sudut, maka kecepatan lini akan selalu sama untuk setiap posisi.
Parameter
Memberikan nilai
IsGrounded
Mengembalikan benar jika objek terhubung ke bagian yang akan menahan itu (eg sebuah bagian Anchored , misalnya), jika tidak mengembalikan false. Dalam sebuah penggabungan yang memiliki bagian Anchored , setiap bagian lainnya diangkat.
Memberikan nilai
Apakah objek terhubung ke bagian yang akan menahan itu di tempatnya.
Resize
Mengubah ukuran objek hanya seperti menggunakan alat resize Studio.
Parameter
Sisi untuk diubah.
Berapa banyak untuk tumbuh / mencrut di sisi yang ditentukan.
Memberikan nilai
Apakah bagiannya diubah.
SetNetworkOwner
Tetapkan pemain yang diberikan sebagai pemilik jaringan untuk ini dan semua bagian terhubung. Saat playerInstance nol, server akan menjadi pemilik alih-alih pemain.
Parameter
Pemain diberi kepemilikan jaringan bagian.
Memberikan nilai
SetNetworkOwnershipAuto
Memungkinkan mesin game secara dinamis memutuskan siapa yang akan menangani fisika bagian (salah satu klien atau server).
Memberikan nilai
TorqueToAngularAcceleration
Parameter
Memberikan nilai
IntersectAsync
Menciptakan IntersectOperation baru dari geometri intersecting dari bagian dan bagian lain dalam array yang diberikan. Hanya Parts yang didukung, bukan Terrain atau 1> Class.
Berikut adalah propperti dari bagian yang dipanggil diberlaku pada IntersectOperation yang dihasilkan:
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3> Class.
Dalam gambar perbandingan berikut, IntersectAsync() dipanggil pada blok ungu menggunakan tabel yang berisi blok biru. Hasilnya IntersectOperation resolves menjadi bentuk geometri intersecting dari kedua bagian.
Catatan
- Bagian asli tetap utuh setelah operasi persilangan yang berhasil. Dalam kebanyakan kasus, Anda harus Destroy() semua bagian asli dan orangtua IntersectOperation ke tempat yang sama dengan panggilan BasePart .
- Secara default, warna wajah dari persamaan yang dihasilkan diambil dari propinsi asli. Untuk mengubah seluruh persamaan menjadi warna tertentu, atur propinsi Color ke UsePartColor .
- Jika operasi persilangan menghasilkan bagian dengan lebih dari 20.000 segi tiga, itu akan dibersihkan menjadi 20.000 segi tiga.
Parameter
Objek-objek yang berpartisipasi dalam persimpangan.
Nilai Enum.CollisionFidelity yang dihasilkan untuk IntersectOperation .
Nilai Enum.RenderFidelity yang dihasilkan dari PartOperation .
Memberikan nilai
Mengakibatkan IntersectOperation dengan nama default Intersect .
SubtractAsync
Menciptakan UnionOperation baru dari bagian, minus geometri yang ditempati oleh bagian dalam array yang diberikan. Hanya Parts yang didukung, bukan Terrain atau 1>
Catat bahwa persamaan yang dihasilkan tidak dapat kosong karena pengurangan. Jika operasi akan menghasilkan geometri yang benar-benar kosong, itu akan gagal.
Dalam gambar perbandingan berikut, SubtractAsync() dipanggil di atas silinder biru menggunakan tabel yang berisi blok ungu. Hasil UnionOperation resolves menjadi bentuk yang menghilangkan geometri blok dari silinder.
Parameter
Objek-objek yang mengambil bagian dalam subtraksi.
Nilai Enum.CollisionFidelity yang dihasilkan dari UnionOperation .
Nilai Enum.RenderFidelity yang dihasilkan dari PartOperation .
Memberikan nilai
Mengasuh UnionOperation dengan nama default Union .
Contoh Kode
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
Menciptakan UnionOperation baru dari bagian, plus geometri yang ditempati oleh bagian dalam array yang diberikan. Hanya Parts yang didukung, bukan Terrain atau 1>
Berikut adalah propperti dari bagian panggilan yang diterapkan ke UnionOperation :
- Class.BasePart.Color|Color , Material , MaterialVariant , 0> Class.BasePart.Reflectance|Reflectance0> , Color3>
- Class.BasePart.Anchored|Anchored , Density , Elasticity , 0> Class.BasePart.ElasticityWeight|Elasticity0> , 3> Class.
Dalam gambar perbandingan berikut, UnionAsync() dipanggil pada blok biru menggunakan tabel yang berisi silinder ungu. Hasilnya UnionOperation resolves menjadi bentuk geometri kombinasi dari kedua bagian.
Catatan
- Bagian asli tetap utuh setelah operasi uni yang berhasil. Dalam kebanyakan kasus, Anda harus Destroy() semua bagian asli dan menjadikan UnionOperation yang dikembalikan ke tempat yang sama dengan panggilan BasePart .
- Secara default, persatuan yang dihasilkan menghormati Color property masing-masing dari setiap bagiannya. Untuk mengubah seluruh persatuan menjadi warna tertentu, tetapkan persyaratan UsePartColor ke true .
- Jika operasi persatuan akan menghasilkan bagian dengan lebih dari 20.000 segi tiga, itu akan dibersihkan menjadi 20.000 segi tiga.
Parameter
Objek-objek yang terlibat dalam uni dengan bagian panggilan.
Nilai Enum.CollisionFidelity yang dihasilkan dari UnionOperation .
Nilai Enum.RenderFidelity yang dihasilkan dari PartOperation .
Memberikan nilai
Mengasuh UnionOperation dengan nama default Union .
Contoh Kode
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
Berdapi saat bagian berhenti menyentuh bagian lain dalam kondisi serupa dengan BasePart.Touched .
Acara ini bekerja bersama dengan Workspace.TouchesUseCollisionGroups untuk menentukan apakah kumpulan tabrakan diakui untuk deteksi.
Parameter
Contoh Kode
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
Acara Touched terjadi ketika bagian berada dalam kontak dengan bagian lain. kejadian, jika PartA bumper ke PartB , maka 1> Class.BasePart.Touched|PartA.Touched1> akan menyala dengan <
Acara ini hanya diaktifkan sebagai hasil dari gerakan fisik, jadi tidak akan diaktifkan jika properti CFrame diubah sehingga bagian itu menggabungkan bagian lain. Ini juga berarti bahwa setidaknya salah satu dari bagian yang terlibat harus tidak menjadi Class.BasePart.Anchored
Acara ini bekerja bersama dengan Workspace.TouchesUseCollisionGroups untuk menentukan apakah kumpulan tabrakan diakui untuk deteksi.
Parameter
Bagian lain yang berhubungan dengan bagian yang diberikan.
Contoh Kode
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)
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