Explosion
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Sebuah ledakan menerapkan kekuatan untuk BaseParts dalam ledakan BlastRadius . Kekuatan in
Jika Explosion adalah orang tua di mana saja di model data saat pengalaman berjalan, itu segera mengatur dan, dalam beberapa detik, menjadi tidak berdarah dan, dalam beberapa detik, menjadi berdarah. Itu tidak dihancurkan dengan Class.Instance:Destroy()</
Catat bahwa Explosion harus menjadi turunan dari Workspace agar visual eksplosi dimainkan dan efek fisik / merusak yang memiliki dampak.
Efek ledakan
Humanoids dibunuh oleh ledakan, karena ledakan menghancurkan karakter Model leher. Menjadikan ForceField model ke model akan melindungi semua anaknya dari efek ledakan bunuh.
Jika Anda tidak ingin joints antara BaseParts untuk dipecahkan, atau Anda ingin menerapkan formula Anda sendiri untuk menyebabkan kerusakan Humanoids , itu direkomendasikan bahwa Anda menetapkan Class
Explosi juga dapat dikonfigurasi untuk menyebabkan kerusakan Terrain, menyebabkan crater, seperti yang dikonfigurasi melalui properti ExplosionType.
Catat bahwa efek ledakan tidak tidak terganggu oleh penghalang, yang berarti bahwa bagian/terrain yang terlindungi di belakang bagian/terrain lainnya masih akan terpengaruh.
Contoh Kode
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- damages terrain
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspace
Rangkuman
Properti
Digunakan untuk menentukan jumlah kekuatan yang diterapkan kepada BaseParts yang terjebak dalam Explosion.BlastRadius .
Properti ini menentukan radius dari Explosion, dalam studs. Radius ini menentukan area efek ledakan, bukan ukuran visual efek ledakan.
Digunakan untuk menetapkan proporsi dari Explosion.BlastRadius , antara 0 dan 1, di mana semua join akan dihancurkan. Apa pun di luar rentang ini hanya akan memiliki Explosion kekuatan diterapkan kepada itu.
Properti ini menentukan cara Explosion akan berinteraksi dengan Terrain . Digunakan untuk menetapkan apakah ledakan akan menyebabkan kerusakan pada tanah atau tidak.
Propinsi ini adalah posisi pusat dari Explosion. Ini di definisi dalam ruang dunia dan tidak terpengaruh oleh Explosion orang tua.
Nilai antara 0 dan 1 yang mengontrol kecepatan efek partikel.
Elemen ini menentukan apakah atau tidak efek visual dari Explosion ditunjukkan atau tidak.
Acara
Mengaktifkan ketika Explosion menghantam Class.BasePart dalam BasePart nya. Mengembalikan bagian yang dihantam bersama dengan jarak bagian dari Explosion.BlastRadius.
Properti
BlastPressure
Digunakan untuk menentukan jumlah kekuatan yang diterapkan kepada BaseParts yang terjebak dalam Explosion.BlastRadius .
Saat ini, tingkat kekuatan yang diterapkan tidak bervariasi berdasarkan jarak dari Explosion.Position. Unanchored BaseParts akan meningkat sama jauhnya dari asalnya terlepas dari jarak yang diberikan mereka berada dalam radius ledakan.
Tekanan ledakan menentukan akselerasi bagian karena ledakan. Ini tidak menentukan derajat pemecahan joints karena ada ledakan. Saat Explosion.DestroyJointRadiusPercent sama dengan 1 semua joints antara part dalam Explosion.BlastRadius akan hancur jika Tekanan ledakan lebih besar dari 0.
Tekanan ledakan juga tidak menentukan jumlah kerusakan yang diberikan kepada Terrain . Tekanan ledakan yang disediakan lebih besar dari 0 dan Explosion.ExplosionType tidak ditetapkan secara kolektif oleh Class.Explosion.BlastRadius
Mengatur BlastPressure ke 0 menghilangkan efek ledakan dan berguna ketika pengembang ingin mengprogram perilaku khusus mereka untuk ledakan menggunakan acara Explosion.Hit.
Contoh Kode
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- this could be set higher to still apply velocity to parts
explosion.DestroyJointRadiusPercent = 0 -- joints are safe
explosion.BlastRadius = radius
explosion.Position = position
-- set up a table to track the models hit
local modelsHit = {}
-- listen for contact
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- check to see if this model has already been hit
if modelsHit[parentModel] then
return
end
-- log this model as hit
modelsHit[parentModel] = true
-- look for a humanoid
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- get the distance as a value between 0 and 1
distanceFactor = 1 - distanceFactor -- flip the amount, so that lower == closer == more damage
humanoid:TakeDamage(maxDamage * distanceFactor) -- TakeDamage to respect ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox removes explosions after a few seconds, but does not destroy them.
-- To ensure our .Hit connection gets disconnected, destroy the explosion once it's removed.
explosion.AncestryChanged:Connect(function()
if not explosion.Parent then
explosion:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0), 12, 50)
BlastRadius
Properti ini menentukan radius dari Explosion, dalam studs. Properti ini menerima nilai apa pun antara 0 dan 100.
Radius ini menentukan area efek ledakan, bukan ukuran visual ledakan. Ukuran efek visual ledakan adalah sama, terlepas dari BlastRadius (bahkan jika BlastRadius adalah 0).
BaseParts dalam BlastRadius akan terpengaruh oleh ledakan. Artinya, jika Explosion.BlastPressure lebih besar dari 0, kekuatan akan diterapkan ke bagian.
BaseParts dianggap dalam Explosion.BlastRadius bahkan jika mereka hanya berada dalam jangkauan.
Contoh Kode
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- damages terrain
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspace
DestroyJointRadiusPercent
Digunakan untuk menetapkan proporsi dari Explosion.BlastRadius , antara 0 dan 1, di mana semua join akan dihancurkan. Apa pun di luar rentang ini hanya akan memiliki Explosion kekuatan diterapkan kepada itu.
Misalnya, jika Explosion.BlastRadius di set ke 100 dan DestroyJointRadiusPercent di set ke 0,5, kedua ujung dalam radius 50 studs akan rusak. Ujung-ujung antara jangkauan 50 dan 100 studs tidak akan dihancurkan, tetapi
Properti ini memungkinkan pengembang untuk membuat Explosions 'non-lethal' ke Humanoids dengan menetapkan DestroyJointRadiusPercent ke 0. Ini berarti jaringan leher tidak akan rusak ketika karakter berinteraksi dengan Explosion .
Contoh Kode
local function onDescendantAdded(instance)
if instance:IsA("Explosion") then
local explosion = instance
explosion.DestroyJointRadiusPercent = 0
local destroyJointRadiusPercent = 1
explosion.Hit:Connect(function(part, distance)
-- check the part is in range to break joints
if distance <= destroyJointRadiusPercent * explosion.BlastRadius then
-- make sure the part does not belong to a character
if not game.Players:GetPlayerFromCharacter(part.Parent) then
part:BreakJoints()
end
end
end)
end
end
workspace.DescendantAdded:Connect(onDescendantAdded)
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- this could be set higher to still apply velocity to parts
explosion.DestroyJointRadiusPercent = 0 -- joints are safe
explosion.BlastRadius = radius
explosion.Position = position
-- set up a table to track the models hit
local modelsHit = {}
-- listen for contact
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- check to see if this model has already been hit
if modelsHit[parentModel] then
return
end
-- log this model as hit
modelsHit[parentModel] = true
-- look for a humanoid
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- get the distance as a value between 0 and 1
distanceFactor = 1 - distanceFactor -- flip the amount, so that lower == closer == more damage
humanoid:TakeDamage(maxDamage * distanceFactor) -- TakeDamage to respect ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox removes explosions after a few seconds, but does not destroy them.
-- To ensure our .Hit connection gets disconnected, destroy the explosion once it's removed.
explosion.AncestryChanged:Connect(function()
if not explosion.Parent then
explosion:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0), 12, 50)
ExplosionType
Properti ini menentukan bagaimana Explosion akan berinteraksi dengan Terrain. Ini adalah nilai Enum.ExplosionType dan dapat diatur ke salah satu dari tiga opsi.
- Tidak ada pemain yang bisa melihat ke bawah. - ledakan tidak akan merusak tanah
- Krater - ledakan akan menciptakan krater di Tanah
- CratersAndDebris - Redundant, berperilaku sama seperti Craters
Jika ExplosionType di set untuk menghasilkan lubang gunung berapi di Terrain, radius lubang gunung berapi akan sekitar sama dengan Explosion.BlastRadius. Lubang gunung berapi dibuat dari semua bahan Terrain selain air. Ukuran lubang gunung berapi tidak terpengaruh ole
Contoh Kode
local function onDescendantAdded(instance)
if instance:IsA("Explosion") then
instance.ExplosionType = Enum.ExplosionType.NoCraters
instance:GetPropertyChangedSignal("ExplosionType"):Connect(function()
instance.ExplosionType = Enum.ExplosionType.NoCraters
end)
end
end
workspace.DescendantAdded:Connect(onDescendantAdded)
LocalTransparencyModifier
Position
Propinsi ini adalah posisi pusat dari Explosion. Ini di definisi dalam ruang dunia dan tidak terpengaruh oleh Explosion orang tua.
BaseParts akan terpengaruh oleh Explosion jika mereka berada dalam Explosion.BlastRadius studs dari posisi eksplosi.
Efek ledakan instan. Ini berarti bahwa meskipun posisi ledakan dapat diubah setelah diatur, itu tidak dapat mengubah dua daerah yang berbeda. Setelah ledakan 'dinamai' setelah menyertakan kecenderungan ke keturunan dari Workspace, itu tidak akan melakukannya lagi. Dalam beberapa kasus, efek visual ledakan akan bergerak
Untuk alasan ini, sebuah ledakan baru harus dibuat jika pengembang ingin ledakan muncul di lokasi yang berbeda.
Contoh Kode
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- damages terrain
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspace
TimeScale
Nilai antara 0 dan 1 yang mengontrol kecepatan efek partikel. Pada 1 dijalankan dengan kecepatan normal, pada 0,5 dijalankan dengan kecepatan setengah, dan pada 0 dijeda waktu.
Visible
Elemen ini menentukan apakah atau tidak efek visual dari Explosion ditunjukkan atau tidak.
Ketika Visible di set ke false, ledakan masih akan meng影响 BaseParts dalam Explosion.BlastRadius , satu-satunya perbedaan adalah tidak akan terlihat.
Satu penggunaan untuk properti ini akan menjadi bagi pengembang untuk membuat efek eksplosi khusus mereka sendiri menggunakan ParticleEmitter , sementara menyimpan fungsionalitas Explosion default.
Contoh Kode
local function customExplosion(position)
local explosion = Instance.new("Explosion")
explosion.Position = position
explosion.Visible = false
local attachment = Instance.new("Attachment")
attachment.Position = position
attachment.Parent = workspace.Terrain
local particleEmitter = Instance.new("ParticleEmitter")
particleEmitter.Enabled = false
particleEmitter.Parent = attachment
particleEmitter.Speed = NumberRange.new(5, 30)
particleEmitter.SpreadAngle = Vector2.new(-90, 90)
explosion.Parent = workspace
particleEmitter:Emit(20)
task.delay(5, function()
if attachment then
attachment:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0))
Metode
Acara
Hit
Mengaktifkan ketika Explosion menghantam Class.BasePart dalam BasePart nya. Mengembalikan bagian yang dihantam bersama dengan jarak bagian dari Explosion.BlastRadius.
Catat bahwa efek dari Class.Explosion Explosion tidak terganggu oleh penghalang, ini berarti bagian-bagian yang dilindungi di belakang bagian lain masih akan dihantam, bahkan jika BasePart mereka yang dihantam terancang.
Acara ini juga akan diaktifkan ketika Explosion.BlastPressure sama dengan nol. Ini berarti pengembang dapat mengaktifkan perilaku khusus mereka untuk ledakan dengan menghilangkan pengaruh ledakan pada BaseParts dan Terrain .
Catat bahwa acara ini akan menembak setiap BasePart hit. Ini berarti itu dapat menembak berkali-kali untuk karakter yang sama (sebagai karakter Model terdiri dari beberapa bagian). Untuk alasan ini ketika menangani kerusakan k
Parameter
Jarak dari hit dari Explosion.Position .
Contoh Kode
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- this could be set higher to still apply velocity to parts
explosion.DestroyJointRadiusPercent = 0 -- joints are safe
explosion.BlastRadius = radius
explosion.Position = position
-- set up a table to track the models hit
local modelsHit = {}
-- listen for contact
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- check to see if this model has already been hit
if modelsHit[parentModel] then
return
end
-- log this model as hit
modelsHit[parentModel] = true
-- look for a humanoid
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- get the distance as a value between 0 and 1
distanceFactor = 1 - distanceFactor -- flip the amount, so that lower == closer == more damage
humanoid:TakeDamage(maxDamage * distanceFactor) -- TakeDamage to respect ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox removes explosions after a few seconds, but does not destroy them.
-- To ensure our .Hit connection gets disconnected, destroy the explosion once it's removed.
explosion.AncestryChanged:Connect(function()
if not explosion.Parent then
explosion:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0), 12, 50)