Explosion
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Eksplozja stosuje siłę do BaseParts w ramach eksplozji BlastRadius . Ta siła łamie
Jeśli Explosion jest powiązany gdziekolwiek w modelu danych, gdy doświadczenie jest uruchomione, natychmiastowo się zatrzymuje i w ciągu kilku sekund staje się niezwiązany. Nie jest to zniszczone za pomocą Instance:Destroy() w tym przypadku, więc połą
Uwaga, że Explosion musi być potomstwem Workspace dla wizualizacji eksplozji i fizycznych/szkodliwych skutków, aby mieć wpływ.
Efekty eksplozji
Humanoids zabici eksplozjami, ponieważ eksplozja rozbiła charakter Model szyi. Rodowanie się aż do modelu ForceField do modelu chroni wszystkie jego dzieci przed efektem eksplozji.
Jeśli nie chcesz, aby połączenia między BaseParts były uszkodzone lub chcesz zaimplementować własną formułę do uszkodzenia Humanoids, zaleca się ustawić Class.Explosion.DestroyJointRadiusPercent|DestroyJointRadius
Wybuchy można również skonfigurować, aby uszkodzić Terrain, tworząc koryta, zgodnie z konfiguracją poprzez właściwość ExplosionType.
Uwaga, że efekt eksplozji nie jest zaburzony przez przeszkody, co oznacza, że części / teren chroniony za innymi częściami / terenu nadal będą dotknięte.
Przykłady kodu
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
Podsumowanie
Właściwości
Używany do określenia mocy stosowanej do BaseParts złapany w Explosion.BlastRadius .
Ta właściwość określa obszar efektu Explosion , w studs. Ten obszar określa obszar efektu eksplozji, a nie rozmiar wizualów eksplozji.
Używany do ustawienia proporcji Explosion.BlastRadius pomiędzy 0 a 1, w którym wszystkie połączenia zostaną zniszczone. Cokolwiek poza tym zakresem będzie miało tylko siłę Explosion zastosowaną do niego.
To właściwość określa, w jaki sposób Explosion będzie interagować z Terrain. Używany do ustawienia, czy eksplozje będą powodować uszkodzenia terenu lub nie.
Ta właściwość jest pozycją centrum Explosion. Jest ona zdefiniowana w przestrzeni świata i nie jest wpływana przez Explosion rodzic.
Wartość pomiędzy 0 i 1, która kontroluje prędkość efektu cząsteczek.
Ta właściwość określa, czy wizualny efekt Explosion jest pokazany lub nie.
Zdarzenia
Wystrzela, gdy Explosion dotyka BasePart w swoim Explosion.BlastRadius . Wystrzela część wraz z dystansem części od 1> Class.Explosion.Position1> .
Właściwości
BlastPressure
Używany do określenia mocy stosowanej do BaseParts złapany w Explosion.BlastRadius .
Obecnie stosowany poziom siły nie różni się w zależności od odległości od Explosion.Position. Niezakorzenione BaseParts będą się równomiernie odlegać od źródła niezależnie od dostarczonej dystansu, jeśli są w obszarze eksplozji.
Napięcie wybuchowe określa przyspieszenie części z powodu eksplozji. Nie określa stopnia, w jakim stłucia są złamane. Gdy Explosion.DestroyJointRadiusPercent jest równy 1, wszystkie łączenia między częściami w Explosion.BlastRadius zostaną zniszczone, jeśli BlastPressure jest większy niż
BlastPressure nie określa również ilości obrażeń danych Terrain . Dostarczony BlastPressure jest większy niż 0 i Explosion.ExplosionType nie jest ustawiony naENSEM.ExplosionType.NoCraters rozmiar kraty stworzonej jest wyłącznie przez Class.Expl
Ustawienie BlastPressure na 0 eliminuje efekt eksplozji i jest użyteczne, gdy programiści chcą zaprogramować własne zachowanie dla eksplozji, używając wydarzenia Explosion.Hit.
Przykłady kodu
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
Ta właściwość określa obszar Explosion , w studs. Ta właściwość akceptuje wszystkie wartości pomiędzy 0 a 100.
Ten promień określa obszar efektu eksplozji, a nie rozmiar wizualnych eksplozji. Rozmiar wizualnego efektu eksplozji jest taki sam bez względu na BlastRadius (nawet jeśli BlastRadius wynosi 0).
BaseParts w obszarze BlastRadius będzie dotknięty eksplozją. Co to znaczy, jeśli Explosion.BlastPressure jest większy niż 0, siła będzie stosow
BaseParts są uważane za Explosion.BlastRadius nawet jeśli są tylko częściowo w zasięgu.
Przykłady kodu
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
Używany do ustawienia proporcji Explosion.BlastRadius pomiędzy 0 a 1, w którym wszystkie połączenia zostaną zniszczone. Cokolwiek poza tym zakresem będzie miało tylko siłę Explosion zastosowaną do niego.
Na przykład, jeśli Explosion.BlastRadius jest ustawiony na 100 i DestroyJointRadiusPercent ustawiony na 0,5, dowolne połączenia w obrębie 50 studs zostaną złamane. dowolne połączenia pomiędzy zakresami 50 i 100 studs nie
Właściwość ta umożliwia rozwój Explosions 'nienajbardziej śmiertelnych' do Humanoids poprzez ustawienie DestroyJointRadiusPercent na 0. Oznacza to, że kiedy postacie kontaktują się z Explosion, nie zostanie złamańca szyi.
Przykłady kodu
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
To właściwość określa, jak Explosion będzie interagować z Terrain. Jest to wartość typu Ennum.ExplosionType i można ją ustawić na jedną z trzech opcji.
- Bezkraterowe eksplozje - Eksplozje nie zadają obrażeń terenu
- Kratery - Eksplozje będą tworzyć kratery w terenie
- Cratery i Debris - Redundantny, zachowuje się tak samo jak Cratery
Jeśli ustawiono ExplosionType, aby tworzyć kratery w Terrain, rozmiar kratery będzie około równy Explosion.BlastRadius. Kratery są tworzone w wszystkich materiałach Terrain poza wodą. Rozmiar kratery nie jest wpływany przez materiał, choć nie
Przykłady kodu
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
Ta właściwość jest pozycją centrum Explosion. Jest ona zdefiniowana w przestrzeni świata i nie jest wpływana przez Explosion rodzic.
BaseParts będzie wpływany przez Explosion jeśli znajdują się w Explosion.BlastRadius studs od pozycji eksplosji.
Efekt eksplozji jest natychmiastowy. Oznacza to, że choć pozycja eksplozji może być zmieniona po ustawieniu, nie może to wpływać na dwa różne obszary. Po ustawieniu eksplozji "zdetonowane" krótko po związaniu z potomstwem Workspace, nie będzie to już tak. W niektórych przypadkach efekt wizualny eksplozji b
Z tego powodu nowy eksplosja powinien zostać stworzony, jeśli rozwój chce, aby eksplosja pojawiła się w innym miejscu.
Przykłady kodu
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
Wartość pomiędzy 0 i 1, która kontroluje prędkość efektu cząsteczek. W 1 jest ona uruchomiona w normalnym tempie, w 0,5 jest ona uruchomiona w halnej prędkości i w 0 zamraża czas.
Visible
Ta właściwość określa, czy wizualny efekt Explosion jest pokazany lub nie.
Gdy Visible ustawiony na false, eksplozja nadal będzie wpływać na BaseParts w jego Explosion.BlastRadius , jedyną różnicą jest to, że nie będzie go widoczny.
Jednym z użyć dla tej właściwości będzie dla rozwójcy, aby stworzyć własne efekty eksplozji używając ParticleEmitter, zachowując jednak domyślną funkcjonalność Explosion.
Przykłady kodu
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))
Metody
Zdarzenia
Hit
Wystrzela, gdy Explosion dotyka BasePart w swoim Explosion.BlastRadius . Wystrzela część wraz z dystansem części od 1> Class.Explosion.Position1> .
Uwaga, że efekt Explosion nie jest przerwany przez przeszkody, co oznacza, że części chronione za innymi częściami nadal będą trafiać, nawet jeśli BasePart są chronione za pomocą łącza.
Ten wąż będzie również się ściągnąć, gdy Explosion.BlastPressure będzie równa zero. Oznacza to, że programiści mogą zaprogramować własne zachowanie dla eksplozji poprzez eliminację wpływu eksplozji na BaseParts i Terrain.
Uwaga, że ten wąż będzie się palił za każdym razem, gdy dotknie BasePart . Oznacza to, że może palić się wiele razy dla tego samego postaci gracza (jako postać Model składa się z wielu części). Dlatego w przypadku używ
Parametry
Odległość trafienia z Explosion.Position .
Przykłady kodu
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)