Explosion
*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
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
Kapatıldığında BaseParts içine uygulanan gücün miktarını belirlemek için kullanılır.
Bu özellik, Explosion ın çevresini belirler. Bu çevre, patlamanın etki alanını belirler, patlamanın görüntülerinin boyutunu değil.
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.
Bu özellik, patlamaların zeminle etkileşimini belirler. Explosion ile zemin arasında hasar verip vermeyi ayarlar.
Bu özellik Explosion 'nın merkez konumudur. Bu, dünya uzayında tanımlanmıştır ve Explosion ebeveyni tarafından etkilenmez.
Parçacık efektinin hızını kontrol eden 0 ile 1 arasındaki değer.
Bu özellik, bir Explosion ın görsel etkisinin gösterileceğini veya gösterilemeyeceğini belirler.
Etkinlikler
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.
Özellikler
BlastPressure
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
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
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
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
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
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
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
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
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
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
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
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
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
Explosion.Position 'dan gelen çarpışmanın mesafesi.
Kod Örnekleri
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)