Explosion
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Una explosión aplica fuerza a BaseParts dentro de la explosión BlastRadius.Esta fuerza rompe JointInstances y WeldConstraints entre partes y mata Humanoid personajes no protegidos por un ForceField .Constraints no se romperá por una explosión.
Si un Explosion es padre en cualquier parte del modelo de datos mientras la experiencia se ejecuta, se activa inmediatamente y, dentro de unos segundos, se vuelve no padre.No se destruye con Instance:Destroy() en este caso, por lo que las conexiones no se desconectan y el padre no se bloquea.Al igual que con todas las instancias, mantener una referencia fuerte a Explosion evitará que se recoja basura.
Tenga en cuenta que un Explosion debe ser un descendiente de Workspace para que los efectos visuales 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 la articulación del cuello del personaje Model.Padronizar un ForceField a un modelo protegerá a todos sus hijos del efecto de muerte por explosión.
Si no quieres que las juntas entre BaseParts se rompan o quieres implementar tu propia fórmula para dañar Humanoids , se recomienda que establezcas DestroyJointRadiusPercent a 0 y uses el evento Hit para manejar el resultado de la explosión.
Las explosiones también se pueden configurar para dañar Terrain , creando cráteres, como se configura a través de la propiedad ExplosionType.
Tenga en cuenta que el efecto de una explosión no se ve perturbado por obstáculos, lo que significa que las partes/terreno protegidas detrás de otras partes/terreno aún se verán afectadas.
Muestras de código
This code sample includes a brief snippet that creates a large explosion in the game at 0, 10, 0.
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
Se usa para determinar la cantidad de fuerza aplicada a BaseParts atrapada en el Explosion.BlastRadius.
Esta propiedad determina el radio del Explosion , en studs.Este radio determina el área de efecto de la explosión, no el tamaño de los visuales de la explosión.
Se usa para establecer la proporción del Explosion.BlastRadius, entre 0 y 1, dentro del cual se destruirán todas las juntas.Cualquier cosa fuera de este rango solo tendrá la fuerza Explosion aplicada a ella.
Esta propiedad determina cómo el Explosion interactuará con el Terrain. Se usa para establecer si las explosiones causarán daños al terreno o no.
Esta propiedad es la posición del centro del Explosion . Se define en el espacio mundial y no es influenciada por el padre Explosion.
Valor entre 0 y 1 que controla la velocidad del efecto de partículas.
Esta propiedad determina si se muestra o no el efecto visual de un Explosion o no.
Eventos
Se enciende cuando el Explosion golpea a un BasePart dentro de su Explosion.BlastRadius . Devuelve la parte golpeada junto con la distancia de la parte de Explosion.Position .
Propiedades
BlastPressure
Se usa para determinar la cantidad de fuerza aplicada a BaseParts atrapada en el Explosion.BlastRadius.
Actualmente este nivel de fuerza aplicado no varía en función de la distancia de Explosion.Position .Unanchored BaseParts acelerará igualmente lejos del origen independientemente de la distancia siempre que se encuentren dentro del radio de explosión.
La presión de explosión determina la aceleración de las piezas debido a una explosión.No determina el grado en que se rompen las articulaciones.Cuando Explosion.DestroyJointRadiusPercent es igual a 1, todas las juntas entre partes en el Explosion.BlastRadius se destruirán siempre que la presión de explosión sea mayor que 0.
La presión de explosión tampoco determina la cantidad de daño dada a Terrain .Se proporciona que la presión de explosión sea mayor que 0 y Explosion.ExplosionType no está configurado como Enum.ExplosionType.NoCraters el tamaño del cráter creado se determina exclusivamente por el Explosion.BlastRadius .
Establecer la presión de explosión a 0 elimina el efecto de la explosión y es útil cuando los desarrolladores quieren programar su propio comportamiento personalizado para las explosiones usando el evento Explosion.Hit.
Muestras de código
This sample contains a simple function that creates a custom explosion. The custom explosion will not break joints as Explosion.DestroyJointRadiusPercent is equal to 0. This means Humanoids will not be instantly killed as their neck joints are broken. In this example explosion.BlastPressure is equal to zero so as not to apply force or damage terrain but this can be changed.
The Explosion.Hit event is used to listen for contact. Once contact has been made the code will look for the parent model of the BasePart hit by the explosion. If that model exists, hasn't already been damaged and has a Humanoid in it damage will be applied based on distance from the explosion's origin.
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
Esta propiedad determina el radio del 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 visuales 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 se verá afectado por la explosión.Es decir, si Explosion.BlastPressure es mayor que 0, se aplicará fuerza a las piezas.El grado en el que se rompen las articulaciones dentro del radio de explosión depende de Explosion.DestroyJointRadiusPercent .Explosion.Hit disparará por cualquier cada BasePart dentro del radio.
BaseParts se consideran dentro de Explosion.BlastRadius incluso si solo están parcialmente en rango.
Muestras de código
This code sample includes a brief snippet that creates a large explosion in the game at 0, 10, 0.
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
Se usa para establecer la proporción del Explosion.BlastRadius, entre 0 y 1, dentro del cual se destruirán todas las juntas.Cualquier cosa fuera de este rango solo tendrá la fuerza Explosion aplicada a ella.
Por ejemplo, si Explosion.BlastRadius está configurado a 100 y DestroyJointRadiusPercent está configurado a 0.5, cualquier junta dentro de un radio de 50 tachuelas se rompería.Cualquier junta entre los rangos de 50 y 100 tachuelas no se destruiría, pero la fuerza Explosion se seguiría aplicando al BaseParts.
Esta propiedad permite a los desarrolladores hacer Explosions 'no letal' a Humanoids al establecer DestroyJointRadiusPercent a 0.Esto significa que la articulación del cuello no se romperá cuando los personajes entren en contacto con el Explosion.
Muestras de código
This sample includes an example of how Explosions can be made non lethal to player characters.
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)
This sample contains a simple function that creates a custom explosion. The custom explosion will not break joints as Explosion.DestroyJointRadiusPercent is equal to 0. This means Humanoids will not be instantly killed as their neck joints are broken. In this example explosion.BlastPressure is equal to zero so as not to apply force or damage terrain but this can be changed.
The Explosion.Hit event is used to listen for contact. Once contact has been made the code will look for the parent model of the BasePart hit by the explosion. If that model exists, hasn't already been damaged and has a Humanoid in it damage will be applied based on distance from the explosion's origin.
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
Esta propiedad determina cómo el Explosion interactuará con el Terrain. Es un valor de Enum.ExplosionType y se puede establecer en una de tres opciones.
- Sin cráteres - Las explosiones no dañarán el terreno
- Cráteres - Las explosiones crearán cráteres en el terreno
- Cráteres y escombros - Redundante, se comporta igual que los cráteres
Si ExplosionType está configurado para crear cráteres en Terrain, el radio del cráter será aproximadamente igual al de Explosion.BlastRadius.Los cráteres se crean en todos los Terrain materiales que no sean agua.El tamaño del cráter no se ve influenciado por el material, aunque algunos materiales crean bordes más ásperos que otros.
Muestras de código
This code sample includes an example of how the Explosion.ExplosionType property can be used to stop Explosions from damaging terrain. It is recommended to set the ExplosionType to NoCraters at the point of Explosion instantiation, but if that is not practical the code below will work.
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
Esta propiedad es la posición del centro del Explosion . Se define en el espacio mundial y no es influenciada por el padre Explosion.
BaseParts será influenciado por el Explosion si está dentro de Explosion.BlastRadius studs 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 pueda 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 asignarla a un descendiente del Workspace, no lo hará de nuevo.En algunos casos, el efecto visual de la explosión se moverá, pero no tendrá 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
This code sample includes a brief snippet that creates a large explosion in the game at 0, 10, 0.
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
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 la mitad de velocidad y en 0 se congela el tiempo.
Visible
Esta propiedad determina si se muestra o no el efecto visual de un Explosion o no.
Cuando Visible está configurado como falso, la explosión aún afectará BaseParts en su Explosion.BlastRadius, la única diferencia es que no se verá.
Un uso para esta propiedad sería para que un desarrollador haga sus propios efectos de explosión personalizados usando un ParticleEmitter , mientras mantiene la funcionalidad predeterminada de Explosion.
Muestras de código
This sample includes a function that will create an Explosion but replace the default Explosion visuals but those of a ParticleEmitter.
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
Se enciende cuando el Explosion golpea a un BasePart dentro de su Explosion.BlastRadius . Devuelve la parte golpeada junto con la distancia de la parte de Explosion.Position .
Tenga en cuenta que el efecto de un Explosion no se ve perturbado por obstáculos, esto significa que las partes protegidas detrás de otras partes aún serán golpeadas, incluso si el BasePart que están protegidas detrás está anclado.
Este evento también se disparará cuando Explosion.BlastPressure sea igual a cero.Esto significa que los desarrolladores pueden programar su propio comportamiento personalizado para explosiones al eliminar la influencia de la explosión en BaseParts y Terrain.
Tenga en cuenta que este evento se disparará por cada golpe de BasePart .Esto significa que puede disparar varias veces para el mismo personaje de jugador (como el personaje Model está compuesto por múltiples partes).Por esta razón, al tratar daños personalizados usando el evento Explosion.Hit es recomendable implementar una verificación para ver si el personaje ya ha sido golpeado por el Explosion .
Parámetros
La distancia del golpe desde Explosion.Position .
Muestras de código
This sample contains a simple function that creates a custom explosion. The custom explosion will not break joints as Explosion.DestroyJointRadiusPercent is equal to 0. This means Humanoids will not be instantly killed as their neck joints are broken. In this example explosion.BlastPressure is equal to zero so as not to apply force or damage terrain but this can be changed.
The Explosion.Hit event is used to listen for contact. Once contact has been made the code will look for the parent model of the BasePart hit by the explosion. If that model exists, hasn't already been damaged and has a Humanoid in it damage will be applied based on distance from the explosion's origin.
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)