Explosion

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.

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

Explosion Instantiation

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

Acara

Properti

BlastPressure

Baca Paralel

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

Custom Explosion

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

Baca Paralel

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

Explosion Instantiation

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

Baca Paralel

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

Non lethal explosions

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)
Custom Explosion

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

Baca Paralel

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

Stop Explosions from Damaging Terrain

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

Tersembunyi
Tidak Direplikasi
Baca Paralel

Position

Baca Paralel

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

Explosion Instantiation

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

Baca Paralel

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

Baca Paralel

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

Explosion Custom Visuals

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

part: BasePart

The BasePart hit by the Explosion .

distance: number

Jarak dari hit dari Explosion.Position .


Contoh Kode

Custom Explosion

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)