Aprender
Clase de motor
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í.


Muestras de código
Instanciación de Explosión
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- daña el terreno
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspace

Referencia API
Propiedades
BlastPressure
Leer paralelo
Capacidades: AvatarBehavior
Explosion.BlastPressure:number
Muestras de código
Explosión Personalizada
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- esto podría establecerse más alto para seguir aplicando velocidad a las partes
explosion.DestroyJointRadiusPercent = 0 -- las uniones están seguras
explosion.BlastRadius = radius
explosion.Position = position
-- configurar una tabla para rastrear los modelos golpeados
local modelsHit = {}
-- escuchar el contacto
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- comprobar si este modelo ya ha sido golpeado
if modelsHit[parentModel] then
return
end
-- registrar este modelo como golpeado
modelsHit[parentModel] = true
-- buscar un humanoide
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- obtener la distancia como un valor entre 0 y 1
distanceFactor = 1 - distanceFactor -- invertir la cantidad, para que menor == más cerca == más daño
humanoid:TakeDamage(maxDamage * distanceFactor) -- TakeDamage para respetar ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox elimina explosiones después de unos segundos, pero no las destruye.
-- Para asegurar que nuestra conexión .Hit se desconecte, destruye la explosión una vez que se haya eliminado.
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
Capacidades: AvatarBehavior
Explosion.BlastRadius:number
Muestras de código
Instanciación de Explosión
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- daña el terreno
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspace

DestroyJointRadiusPercent
Leer paralelo
Capacidades: AvatarBehavior
Explosion.DestroyJointRadiusPercent:number
Muestras de código
Explosiones no letales
local function onDescendantAdded(instance)
if instance:IsA("Explosion") then
local explosion = instance
explosion.DestroyJointRadiusPercent = 0
local destroyJointRadiusPercent = 1
explosion.Hit:Connect(function(part, distance)
-- verifica que la parte esté dentro del alcance para romper las juntas
if distance <= destroyJointRadiusPercent * explosion.BlastRadius then
-- asegúrate de que la parte no pertenezca a un personaje
if not game.Players:GetPlayerFromCharacter(part.Parent) then
part:BreakJoints()
end
end
end)
end
end
workspace.DescendantAdded:Connect(onDescendantAdded)
Explosión Personalizada
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- esto podría establecerse más alto para seguir aplicando velocidad a las partes
explosion.DestroyJointRadiusPercent = 0 -- las uniones están seguras
explosion.BlastRadius = radius
explosion.Position = position
-- configurar una tabla para rastrear los modelos golpeados
local modelsHit = {}
-- escuchar el contacto
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- comprobar si este modelo ya ha sido golpeado
if modelsHit[parentModel] then
return
end
-- registrar este modelo como golpeado
modelsHit[parentModel] = true
-- buscar un humanoide
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- obtener la distancia como un valor entre 0 y 1
distanceFactor = 1 - distanceFactor -- invertir la cantidad, para que menor == más cerca == más daño
humanoid:TakeDamage(maxDamage * distanceFactor) -- TakeDamage para respetar ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox elimina explosiones después de unos segundos, pero no las destruye.
-- Para asegurar que nuestra conexión .Hit se desconecte, destruye la explosión una vez que se haya eliminado.
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
Capacidades: AvatarBehavior
Explosion.ExplosionType:Enum.ExplosionType
Muestras de código
Detener explosiones de dañar el terreno
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
Capacidades: AvatarBehavior
Explosion.LocalTransparencyModifier:number

Position
Leer paralelo
Capacidades: AvatarBehavior
Explosion.Position:Vector3
Muestras de código
Instanciación de Explosión
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- daña el terreno
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspace

TimeScale
Leer paralelo
Capacidades: AvatarBehavior
Explosion.TimeScale:number

Visible
Leer paralelo
Capacidades: AvatarBehavior
Explosion.Visible:boolean
Muestras de código
Visuales Personalizados de Explosión
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))

Eventos
Hit
Capacidades: AvatarBehavior
Explosion.Hit(
part:BasePart, distance:number
Parámetros
distance:number
Muestras de código
Explosión Personalizada
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- esto podría establecerse más alto para seguir aplicando velocidad a las partes
explosion.DestroyJointRadiusPercent = 0 -- las uniones están seguras
explosion.BlastRadius = radius
explosion.Position = position
-- configurar una tabla para rastrear los modelos golpeados
local modelsHit = {}
-- escuchar el contacto
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- comprobar si este modelo ya ha sido golpeado
if modelsHit[parentModel] then
return
end
-- registrar este modelo como golpeado
modelsHit[parentModel] = true
-- buscar un humanoide
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- obtener la distancia como un valor entre 0 y 1
distanceFactor = 1 - distanceFactor -- invertir la cantidad, para que menor == más cerca == más daño
humanoid:TakeDamage(maxDamage * distanceFactor) -- TakeDamage para respetar ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox elimina explosiones después de unos segundos, pero no las destruye.
-- Para asegurar que nuestra conexión .Hit se desconecte, destruye la explosión una vez que se haya eliminado.
explosion.AncestryChanged:Connect(function()
if not explosion.Parent then
explosion:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0), 12, 50)

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.