Explosion

Pokaż przestarzałe

*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

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

Podsumowanie

Właściwości

Zdarzenia

Właściwości

BlastPressure

Odczyt równoległy

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

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

Odczyt równoległy

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

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

Odczyt równoległy

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

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

Odczyt równoległy

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

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

Ukryte
Bez replikacji
Odczyt równoległy

Position

Odczyt równoległy

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

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

Odczyt równoległy

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

Odczyt równoległy

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

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

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

part: BasePart

Class.BasePart dotknięty przez Explosion.

distance: number

Odległość trafienia z Explosion.Position .


Przykłady kodu

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)