Explosion

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Un Explosión aplica la fuerza a BaseParts dentro del radio de explosión de BlastRadius . Esto rompe Class.J

Si un Explosion está enlazado en alguna parte del modelo de datos mientras se está ejecutando la experiencia, se activa inmediatamente y, dentro de unos segundos, se vuelve desactivado. No se destruye con Instance:Destroy() en este caso, por lo que las conexiones no se desconectan y el padre no está bloqueado.

Nota que un Explosion debe ser un descendiente de Workspace para que los gráficos de explosión se reproduzcan y los efectos físicos / dañinos tengan un impacto.

Efectos de explosión

Humanoids son asesinados por explosiones, ya que la explosión rompe el personaje Model articulación. El padre de un ForceField a un modelo protegerá todos sus hijos del efecto de muerte de explosión.

Si no desea que se rompan las juntas entre BaseParts para que se rompan, o si desea implementar su propia fórmula para dañar Humanoids , se recomienda que establezca Class.Explosion.DestroyJointRadiusPercent|DestroyJointRadius

Las explosiones también se pueden configurar para dañar Terrain , creando cráteres, como se configura a través de la propiedad ExplosionType .

Nota que el efecto de una explosión no está no alterado por obstáculos, lo que significa que las partes / terreno blindado detrás de otras partes / terreno seguirán siendo afectadas.

Muestras de código

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

Resumen

Propiedades

Eventos

Propiedades

BlastPressure

Leer paralelo

Se utiliza para determinar la cantidad de fuerza aplicada a BaseParts atrapados en el Explosion.BlastRadius .

Actualmente, este nivel de fuerza aplicada no varía según la distancia desde Explosion.Position. Sin anclar BaseParts acelerará igualmente lejos de la base, independientemente de la distancia proporcionada que estén dentro del radio de explosión.

La presión de explosión determina la aceleración de las partes debido a una explosión. No determina el grado en que se rompen las articulaciones. Cuando Explosion.DestroyJointRadiusPercent es igual a 1, todas las articulaciones entre partes en el Explosion.BlastRadius se destruirán, si la presión de explosión es mayor que 0.

La presión de explosión tampoco determina la cantidad de daño que se le da a Terrain . La presión de explosión proporcionada es mayor que 0 y Explosion.ExplosionType no está configurado paraENSEMBLE.ExplosionType.NoCraters el tamaño de la cámara creada se determina exclusivamente por el Class.

Establecer BlastPressure en 0 elimina el efecto de la explosión y es útil cuando los desarrolladores quieren programar su propio comportamiento personalizado para las explosiones que se ejecutan con el evento Explosion.Hit .

Muestras de código

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

Leer paralelo

Esta propiedad determina el radio de la Explosion, en studs. Esta propiedad acepta cualquier valor entre 0 y 100.

Este radio determina el área de efecto de la Explosión, no el tamaño de los gráficos de la Explosión. El tamaño del efecto visual de la Explosión es el mismo independientemente de BlastRadius (incluso si BlastRadius es 0).

BaseParts dentro del radio de explosión será afectado por la explosión. Esto significa, si Explosion.BlastPressure es mayor que 0, se aplicará la fuerza a las partes. El grado en que se rom

BaseParts se consideran dentro de Explosion.BlastRadius incluso si solo están parcialmente en rango.

Muestras de código

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

Leer paralelo

Se usa para establecer la proporción de Explosion.BlastRadius , entre 0 y 1, dentro de la cual todos los juntos serán destruidos. Cualquier cosa fuera de este rango solo tendrá la fuerza Explosion aplicada a él.

Por ejemplo, si Explosion.BlastRadius está configurado para 100 y DestroyJointRadiusPercent está configurado para 0.5, cualquier articulo dentro de un radio de 50 studs se rompería. Cualquier articulo entre los rangos de 50 y 100 studs no se destruiría, pero la fuerza de

Esta propiedad permite a los desarrolladores hacer Explosions 'no mortal' a Humanoids al establecer DestroyJointRadiusPercent para 0. Esto significa que el hueso del cuello no se romperá cuando los personajes entren en contacto con el Explosion .

Muestras de código

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

Leer paralelo

Esta propiedad determina cómo la Explosion interactuará con Terrain . Es un valor de tipo enumero y se puede establecer para uno de tres opciones.

  • NoCraters - Las explosiones no dañarán el terreno
  • Crateras - Las explosiones crearán cráteras en el terreno
  • CratersAndDebris - Igual que Craters, se comporta igual que Craters

Si se establece el tipo de explosión para crear cráteres en Terrain , el radio del cráter se ajustará aproximadamente al Explosion.BlastRadius . Los cráteres se crean en todos los materiales de Terrain excepto el agua. El tamaño del cráter no se ve afectado por el material, aunque algunos materiales

Muestras de código

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

Oculto
No replicado
Leer paralelo

Position

Leer paralelo

Esta propiedad es la posición del centro del Explosion. Está definida en el espacio del mundo y no está afectada por el padre Explosion.

BaseParts estará influenciado por el Explosion si está dentro de los studs Explosion.BlastRadius de la posición de la explosión.

El efecto de una explosión es instantáneo. Esto significa que aunque la posición de una explosión se puede cambiar después de que se haya establecido, no puede afectar a dos áreas diferentes. Una vez que una explosión se haya 'detonado', poco después de ser padre de un descendiente del Workspace , no lo hará de nuevo. En algunos casos, el efecto visual de la explosión se moverá, pero no tendrá ningún efecto.

Por esta razón, se debe crear una nueva explosión si el desarrollador quiere que una explosión aparezca en una posición diferente.

Muestras de código

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

Leer paralelo

Un valor entre 0 y 1 que controla la velocidad del efecto de partículas. En 1 se ejecuta a velocidad normal, en 0.5 se ejecuta a mitad de velocidad y en 0 se congela el tiempo.

Visible

Leer paralelo

Esta propiedad determina si se muestra o no el efecto visual de un Explosion .

Cuando Visible está configurado como falso, la explosión aún afectará a BaseParts en su Explosion.BlastRadius , la única diferencia es que no se verá.

Uno de los usos para esta propiedad sería para que un desarrollador haga sus propios efectos de explosión personalizados usando un ParticleEmitter , mientras se mantiene la funcionalidad por defecto de Explosion.

Muestras de código

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

Métodos

Eventos

Hit

Dispara cuando el Explosion toca un BasePart dentro de su Explosion.BlastRadius . 2>Devuelve la parte golpeada junto con la distancia de la parte desde5>Class.Explosion.Position5> .

Nota que el efecto de un Explosion no se ve afectado por obstáculos, esto significa que las partes protegidas detrás de otras partes todavía se golpearán, incluso si la BasePart que están protegidas está anclada.

Este evento también se activará cuando Explosion.BlastPressure sea igual a cero. Esto significa que los desarrolladores pueden programar su propio comportamiento personalizado para las explosiones eliminando la influencia de la explosión en BaseParts y Terrain .

Tenga en cuenta que este evento se activará por cada golpe de BasePart golpeado. Esto significa que puede activar múltiples veces para el mismo personaje de personaje (como el personaje Model está compuesto por múltiples partes). Por esta razón, al implementar el evento de Class.Ex

Parámetros

part: BasePart

El BasePart golpeado por el Explosion .

distance: number

La distancia del golpe de Explosion.Position .


Muestras de código

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)