Explosion

Artık kullanılmayanları göster

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Bir patlama, patlamanın BaseParts içindeki BlastRadius ile uygulanır. Bu güç,

Eğer deneyim çalışırken herhangi bir yerde bir Explosion ebeveyni varsa, derhal başlar ve birkaç saniye içinde un親 olur. Bu durumda, Instance:Destroy() ile bağlantılar kesilmez ve ebeveyn kilitlenmez. Tü

Not et Explosion tırmanışının patlama görüntüleri oynayabilmesi ve fiziksel/hasar veren etkilerinin etkisi için Class.Workspace olmalıdır.

Patlama Efektleri

Humanoids patlarlar, patlama karakteri Model boyun kısmını kırduğu için öldürür. Bir Class.ForceField'i bir modelle ilişkilendirerek tüm çocukları patlama öldürme etkisinden korur.

Class.BasePart|BaseParts içindeki eşyalar bozulmak istemiyorsanız veya Humanoids için kendi formülünüzü uygulamak istiyorsanız, şu önerilir ki Class.Explosion.DestroyJ

Patlamalar ayrıca Terrain gibi hasara vermek için yapılandırılabilir ve kraterler oluşturur, ExplosionType özelliği aracılığıyla yapılandırıldığı gibi.

Bir patlamanın etkisi dis olarak engellere değil hala etkilenir, yani diğer parçalar / terreno arkasındaki parçalar / terreno etkilenir.

Kod Örnekleri

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

Özet

Özellikler

Etkinlikler

Özellikler

BlastPressure

Paralel oku

Kapatıldığında BaseParts içine uygulanan gücün miktarını belirlemek için kullanılır.

Mevcut bu güç seviyesi, Explosion.Position 'den mesafe bağımsız olarak değiştirilmez. Unanchored BaseParts , patlama çevresindeki mesafeye bağlı olarak eşit mesafede hızlanacaktır.

Patlama basıncı, patlamaya neden olan parçaların hızlanmasını belirler. Ayrıca, ortakların kırılma derecesini belirlemez. Explosion.DestroyJointRadiusPercent 0 ile eşit olduğunda, ortaklar arasındaki tüm ortaklar yok edilir. Patlama basıncı 0'den daha büyük olduğunda

Ayrıca, BlastPressure ayrıca Terrain 'e verilen hasar miktarını belirlemiyor. Sağlanan BlastPressure 0'den daha büyük ve Explosion.ExplosionType kaynağı oluşturulan küreğin boyutu sadece Class.Explosion

BlastPressure'ı 0 olarak ayarlamak patlama etkisini ortadan kaldırır ve geliştiricilerin kendi özel davranışlarını patlamalar için Explosion.Hit etkinliğini kullanarak kendi özel davranışlarını programlaması için kullanışlıdır.

Kod Örnekleri

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

Paralel oku

Bu özellik, Explosion ın çevresini belirler. Bu özellik, 0 ile 100 arasındaki herhangi bir değeri kabul eder.

Bu çevre, Patlamanın etki alanını belirler, BlastRadius dahil olmak üzere Patlamanın görüntülerinin boyutunu değil. Patlamanın görüntülerinin boyutu BlastRadius'ın (爆破範圍) olmasına rağmen aynıdır.

BaseParts içindeki patlama etkisi altında kalacaktır. Yani, Explosion.BlastPressure 0'den daha büyükse, güç Class.Explos

BaseParts kapsayıcı olarak Explosion.BlastRadius içinde ele alınır, hatta yalnızca menzil içinde parçalarınız varsa bile.

Kod Örnekleri

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

Paralel oku

Yüzde oranını ayarlamak için kullanılır Explosion.BlastRadius , arasında 0 ve 1 arasında, tüm katlar yok edilecek. Bu menzil dışındaki her şey sadece Explosion gücüne sahip olacaktır.

Örneğin, Explosion.BlastRadius 100 olarak ayarlandı ve DestroyJointRadiusPercent 0.5 olarak ayarlandıysa, 50 stud arasındaki herhangi bir ortak bozulurdu. 50 ve 100 stud arasındaki herhangi bir ortak bozulmaz

Bu özellik, geliştiricilerin Explosions 'i Class.Humanoid|Humanoids'a yapabilmesine izin verir, yoksa DestroyJointRadiusPercent'i 0 olarak ayarlayarak boyun kısmı kırılmaz. Bu, karakterlerin Class.Explosion ile temas ettiğinde kırık olmayacağı an

Kod Örnekleri

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

Paralel oku

Bu özellik, Explosion ile Terrain arasındaki etkileşimi belirler. Bir Enumer.ExplosionType değeri olarak ayarlanabilir ve üç seçeneğden biriyle ayarlanabilir.

  • NoCraters - Patlamalar yer üzerinde hasar vermez
  • Kraterler - Patlamalar yerin yüzeyinde kraterler oluşturur
  • KraterlerVeDebris - Redundant, Kraterlerle aynı davranır

ExplosionType, Terrain içinde kraterler oluşturmak için ayarlanırsa, kraterin çevresi yaklaşık olarak Explosion.BlastRadius ile eşit olacaktır. Kraterler, su dışındaki tüm Terrain malzemeleri içinde oluştur

Kod Örnekleri

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

Gizli
Çoğaltılmamış
Paralel oku

Position

Paralel oku

Bu özellik Explosion 'nın merkez konumudur. Bu, dünya uzayında tanımlanmıştır ve Explosion ebeveyni tarafından etkilenmez.

BaseParts 爆発'ın konumunun Explosion içinde olduğu takdirde patlamanın etkisi altına alınacaktır.

Bir patlamanın etkisi anındır. Bu, patlamanın bir yerini değiştirdikten sonra bile, bir yere etkisi olmayabilir. Bir patlamanın 'patlatıldığı'ndan kısa bir süre sonra, onun aşağıdaki torununa bağlanarak, yine yapmaz. Bazı durumlarda patlamanın görsel etkisi hareket edecektir, ancak etkisi

Bu nedenle, geliştirici bir patlamayı farklı bir konumda görünmesini istiyorsa yeni bir patlama oluşturulmalıdır.

Kod Örnekleri

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

Paralel oku

Parçacık efektinin hızını kontrol eden bir değer. 1'de normal hızda çalışır, 0.5'te yarım hızda çalışır ve 0'da zamandı durdurur.

Visible

Paralel oku

Bu özellik, bir Explosion ın görsel etkisinin gösterileceğini veya gösterilemeyeceğini belirler.

Görünür ayarı false olarak belirlenmişken patlama hala BaseParts içindeki Explosion.BlastRadius , tek farkı görünmez olacaktır.

Bu özellik için bir kullanım, bir geliştirici kendi özel patlama efektlerini oluşturmak için bir ParticleEmitter kullanarak, varsayılan Explosion işlevselliğini korurken.

Kod Örnekleri

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

Yöntemler

Etkinlikler

Hit

Class.ExplosionBasePart içindeki Explosion.BlastRadius içindeki parçaya vurduğunda yanar. Parçanın 1>Class.Explosion.Position1> ile birlikte mesafesine ek olarak döndürür.

Bir Explosion ın etkisi engeller tarafından bozulmaz, bu yüzden önceki bir parçanın arkasındaki parçalar hala vurulur, BasePart ın arkasındaki parçalar olmasına rağmen.

Bu etkinlik ayrıca Explosion.BlastPressure zero ile eşit olduğunda başlar. Bu, geliştiricilerin kendi özel davranışlarını patlamalar için programlayabilirleri anlamına gelir, patlamanın etkisini BaseParts ve Terrain üzerinde ortadan kaldırarak.

Not etkinliği her BasePart vurulduğunda başlayacaktır. Bu, karakterin Model iletişiminden oluşan bir dizi parçadan oluşur. For this reason when dealing custom damage using the Explosion.Hit event it's recommended to implement a check

Parametreler

part: BasePart

Class.BasePartExplosion tarafından vuruldu.

distance: number

Explosion.Position 'dan gelen çarpışmanın mesafesi.


Kod Örnekleri

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)