Explosion
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Une explosion applique la force à BaseParts dans le rayon d'explosion de l'explosion BlastRadius. Cette force brise
Si un Explosion est parenté n'importe où dans le modèle de données pendant que l'expérience s'exécute, il s'enclenche immédiatement et, dans quelques secondes, il devient non parenté. Il n'est pas détruit avec Instance:Destroy() dans ce cas, donc les connexions ne se déconnectent pas et le parent n'
Notez qu'une Explosion doit être une descendant de Workspace pour que les visuels d'explosion et les effets physiques/dommageurs aient un impact.
Effets d'explosion
Humanoids sont tués par des explosions, car l'explosion brise le personnage Model et le articulationde la partie du cou. La parentalité d'un ForceField à un modèle le protégera tous de l'effet de mort par explosion.
Si vous ne voulez pas que les jointures entre BaseParts ne soient brisées, ou si vous voulez implémenter votre propre formule pour endommager Humanoids , il est recommandé que vous définissiez Class.Explosion.DestroyJointRadiusPercent|
Les explosions peuvent également être configurées pour endommager Terrain, créant des cratères, comme configuré via la propriété ExplosionType.
Notez que l'effet d'une explosion n'est pas non détruit par des obstacles, ce qui signifie que les parties/terrain derrière d'autres parties/terrain seront toujours affectées.
Échantillons de code
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
Résumé
Propriétés
Utilisé pour déterminer la force appliquée à BaseParts attrapé dans le Explosion.BlastRadius.
Cette propriété détermine le rayon de la Explosion, en studs. Ce rayon détermine la zone d'effet de l'explosion, non pas la taille des visuels de l'explosion.
Utilisé pour définir la proportion de Explosion.BlastRadius , entre 0 et 1, dans lequel toutes les jantes seront détruites. Tout ce qui est en dehors de cette portée n'aura que la force Explosion appliquée à lui.
Cette propriété détermine comment le Explosion interagira avec le Terrain. Utilisé pour définir si les explosions causent des dommages au terrain ou non.
Cette propriété est la position du centre du Explosion. Elle est définie dans l'espace mondial et n'est pas affectée par le parent Explosion.
Valeur entre 0 et 1 qui contrôle la vitesse de l'effet de particule.
Cette propriété détermine si oui ou non l'effet visuel d'une Explosion est affiché ou non.
Évènements
Tire quand le Explosion touche un BasePart dans son Explosion.BlastRadius. Retourne la partie touchée avec la distance de la partie de 2>Class.Explosion.Position2>.
Propriétés
BlastPressure
Utilisé pour déterminer la force appliquée à BaseParts attrapé dans le Explosion.BlastRadius.
Actuellement, ce niveau de force appliqué ne varie pas en fonction de la distance depuis Explosion.Position. Les BaseParts non ancrées accélèrent également de manière égale loin de l'origine, peu importe la distance fournie qu'ils soient dans le rayon d'explosion.
La pression d'explosion détermine l'accélération des parties en raison d'une explosion. Il ne détermine pas le degré à cui les articulations sont brisées. Lorsque Explosion.DestroyJointRadiusPercent est égal à 1, toutes les articulations entre les parties dans le Explosion.BlastRadius seront détruites, à moins que la pression d'explosion soit supérieure à 0.
La pression d'explosion ne détermine pas non plus la quantité de dégâts donnés à Terrain . La pression d'explosion fournie est supérieure à 0 et Explosion.ExplosionType n'est pas défini sur Enum.ExplosionType.NoCraters la taille de la crater créée est déterminée exclusivement par le
Définir la pression d'explosion à 0 élimine l'effet de l'explosion et est utile lorsque les développeurs veulent programmer leur propre comportement personnalisé pour les explosions en utilisant l'événement Explosion.Hit.
Échantillons de code
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
Cette propriété détermine le rayon de la Explosion, en studs. Cette propriété accepte n'importe quelle valeur entre 0 et 100.
Ce rayon détermine la zone d'effet de l'explosion, pas la taille des visuels de l'explosion. La taille de l'effet visuel de l'explosion est la même indépendamment de BlastRadius (même si BlastRadius est 0).
BaseParts dans le rayon d'explosion sera affecté par l'explosion. C'est à dire, si Explosion.BlastPressure est supérieur à 0, la force sera appliquée aux parties. Le degré dans lequel
BaseParts sont considérés dans Explosion.BlastRadius même s'ils ne sont que partiellement dans la portée.
Échantillons de code
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
Utilisé pour définir la proportion de Explosion.BlastRadius , entre 0 et 1, dans lequel toutes les jantes seront détruites. Tout ce qui est en dehors de cette portée n'aura que la force Explosion appliquée à lui.
Par exemple, si Explosion.BlastRadius est réglé sur 100 et DestroyJointRadiusPercent réglé sur 0,5, n'importe quelle articulation dans un rayon de 50 studs serait cassée. Toutes les articulations entre les portées de 50 et 100 studs ne seraient pas détruées, mais la force <
Cette propriété permet aux développeurs de rendre Explosions 'non mortel' à Humanoids en définissant DestroyJointRadiusPercent à 0. Cela signifie que le cou joint ne sera pas brisé lorsque les personnages entreront en contact avec le Explosion.
Échantillons de code
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
Cette propriété détermine comment le Explosion interagira avec le Terrain . Il s'agit d'un valeur d' type Enumeration.Explosion et peut être réglé sur l'un des trois options.
- NoCraters - Les explosions ne nuiront pas au terrain
- Crateres - Les explosions créeront des cratères dans le terrain
- Craters et débris - Redundant, se comporte comme les cratères
Si ExplosionType est réglé pour créer des cratères dans Terrain, le rayon du cratère sera environ équivalent au Explosion.BlastRadius. Les cratères sont créées dans tous les matériaux Terrain autres que l'eau. La taille du cratère n'est pas affectée par le matériau, bien que certains matériaux créent des b
Échantillons de code
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
Cette propriété est la position du centre du Explosion. Elle est définie dans l'espace mondial et n'est pas affectée par le parent Explosion.
BaseParts sera affecté par le Explosion s'ils sont dans les studs Explosion.BlastRadius de l'explosion.
L'effet d'une explosion est instantané. Cela signifie que bien que la position d'une explosion puisse être modifiée après qu'elle ait été définie, il ne peut pas affecter deux zones différentes. Une fois qu'une explosion a été «détonée», peu après son ancêtre d'un descendant du Workspace, il ne le fera pas de nouveau. Dans certains cas, l'effet visuel de l'explosion se déplacera, mais il n'aura aucun effet.
Pour cette raison, une nouvelle explosion doit être créée si le développeur souhaite qu'une explosion apparaisse à un endroit différent.
Échantillons de code
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
Une valeur entre 0 et 1 qui contrôle la vitesse de l'effet de particules. À 1, il s'exécute à la vitesse normale, à 0,5, il s'exécute à la moitié de la vitesse et à 0, il gèle le temps.
Visible
Cette propriété détermine si oui ou non l'effet visuel d'une Explosion est affiché ou non.
Lorsque Visible est réglé sur false, l'explosion affectera toujours BaseParts dans son Explosion.BlastRadius, la seule différence est qu'elle ne sera pas vue.
L'un des usages pour cette propriété serait pour un développeur de créer ses propres effets d'explosion personnalisés en utilisant un ParticleEmitter , tout en gardant la fonctionnalité par défaut Explosion.
Échantillons de code
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éthodes
Évènements
Hit
Tire quand le Explosion touche un BasePart dans son Explosion.BlastRadius. Retourne la partie touchée avec la distance de la partie de 2>Class.Explosion.Position2>.
Notez que l'effet d'une Explosion n'est pas perturbé par les obstacles, ce qui signifie que les parties derrière d'autres parties seront toujours touchées, même si la BasePart qu'elles sont derrière est ancrée.
Cet événement se déclenchera également lorsque Explosion.BlastPressure est égale à zéro. Cela signifie que les développeurs peuvent programmer leur propre comportement personnalisé pour les explosions en éliminant l'effet de l'explosion sur BaseParts et Terrain.
Remarquez que cet événement se déclenchera pour chaque BasePart frappé. Cela signifie qu'il peut se déclencher plusieurs fois pour le même personnage de joueur (comme le personnage Model est composé de plusieurs parties). Pour cette raison, lorsque vous utilisez l'événement Class.Explosion.
Paramètres
La distance du coup à partir de Explosion.Position.
Échantillons de code
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)