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
Este ejemplo de código incluye un breve fragmento que crea una gran explosión en el juego en 0, 10, 0.
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
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
Muestras de código
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
Muestras de código
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
Muestras de código
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
Muestras de código
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
Muestras de código
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
Visible
Muestras de código
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
Parámetros
Muestras de código
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)