Explosion
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Eine Explosion übt Kraft auf BaseParts innerhalb der Explosion BlastRadius aus.Diese Kraft bricht JointInstances und WeldConstraints zwischen den Teilen und tötet Humanoid Zeichen, die nicht durch einen ForceField geschützt sind.Constraints wird durch eine Explosion nicht zerstört.
Wenn ein Explosion überall im Datenmodell als Elternteil angezeigt wird, während die Erfahrung ausgeführt wird, wird sie sofort abgebrochen und innerhalb weniger Sekunden nicht mehr elternlos.Es wird in diesem Fall mit Instance:Destroy() nicht zerstört, so dass keine Verbindungen getrennt werden und der Eltern nicht gesperrt wird.Wie bei allen Instanzen wird die Aufrechterhaltung einer starken Referenz an Explosion verhindern, dass sie garbage gesammelt wird.
Beachten Sie, dass ein Explosion ein Nachkomme von Workspace sein muss, damit die Explosionsvisualisierungen abgespielt werden und die physischen/schädlichen Effekte Auswirkungen haben.
Explosionseffekte
Humanoids werden durch Explosionen getötet, da die Explosion den Charakter Model Verbindungzerbricht.Die Elternschaft eines ForceField an ein Modell wird alle seine Kinder vor dem Explosionstötungseffekt schützen.
Wenn du keine Gelenke zwischen und zerbrechen möchtest oder deine eigene Formel für den Schaden von implementieren möchtest, wird empfohlen, dass du auf 0 setzt und das Ereignis verwendest, um das Ergebnis der Explosion zu verarbeiten.
Explosionen können auch so konfiguriert werden, dass sie Terrain beschädigen, Krater erzeugen, wie durch die EigenschaftenExplosionType konfiguriert.
Beachte, dass die Wirkung einer Explosion nicht durch Hindernisse gestört wird, was bedeutet, dass Teile/Terrain, die hinter anderen Teilen/Terrain geschützt sind, immer noch betroffen sind.
Code-Beispiele
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
Zusammenfassung
Eigenschaften
Wird verwendet, um die Menge der angewendeten Kraft auf BaseParts festzustellen, die in der Explosion.BlastRadius gefangen ist.
Diese Eigenschaft legt den Radius des Explosion fest, in Studs.Dieser Radius bestimmt den Bereich des Effekts der Explosion, nicht die Größe der visuellen Explosion.
Wird verwendet, um den Anteil des Explosion.BlastRadius, zwischen 0 und 1, festzulegen, innerhalb dessen alle Gelenke zerstört werden.Alles außerhalb dieser Reichweite wird nur die Explosion Kraft auf sie angewendet.
Diese Eigenschaft bestimmt, wie die Explosion mit Terrain interagieren wird. Wird verwendet, um festzustellen, ob Explosionen Schäden am Gelände verursachen oder nicht.
Diese Eigenschaft ist die Position des Zentrums der Explosion . Sie wird im Weltraum definiert und wird nicht vom Explosion übergeordnetes Teilbeeinflusst.
Wert zwischen 0 und 1, der die Geschwindigkeit des Partikeleffekts steuert.
Diese Eigenschaft bestimmt, ob oder nicht der visuelle Effekt eines Explosion angezeigt wird oder nicht.
Ereignisse
Feuert, wenn der Explosion einen BasePart innerhalb seiner Explosion.BlastRadius trifft. Gibt das getroffene Teil zusammen mit der Entfernung des Teils von Explosion.Position zurück.
Eigenschaften
BlastPressure
Wird verwendet, um die Menge der angewendeten Kraft auf BaseParts festzustellen, die in der Explosion.BlastRadius gefangen ist.
Derzeit variiert dieser Kraftgrad nicht abhängig von der Entfernung von Explosion.Position.Unbestückt BaseParts wird gleichzeitig weg von der Quelle beschleunigen, unabhängig von der Entfernung, solange sie sich innerhalb des Explosionsradius befinden.
Der Explosionsdruck bestimmt die Beschleunigung von Teilen durch eine Explosion.Es bestimmt nicht den Grad, in dem sich Gelenke brechen.Wenn Explosion.DestroyJointRadiusPercent gleich 1 ist, werden alle Gelenke zwischen den Teilen in der Explosion.BlastRadius zerstört, sofern die Explosionsdruck größer als 0 ist.
Die Explosionsdruck bestimmt auch nicht die Menge des Schadens, die an Terrain gegeben wird.Gibt der bereitgestellte Explosionsdruck größer als 0 und Explosion.ExplosionType ist nicht auf Enum.ExplosionType.NoCraters festgelegt, die Größe des erstellten Kraters wird ausschließlich durch das Explosion.BlastRadius bestimmt.
Die Festlegung des Explosionsdrucks auf 0 eliminiert den Effekt der Explosion und ist nützlich, wenn Entwickler ihr eigenes benutzerdefiniertes Verhalten für Explosionen mit dem Explosion.Hit-Ereignis programmieren möchten.
Code-Beispiele
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
Diese Eigenschaft legt den Radius des Explosion fest, in Studs. Diese Eigenschaft akzeptiert jeden Wert zwischen 0 und 100.
Dieser Radius bestimmt den Bereich des Effekts der Explosion, nicht die Größe der visuellen Explosion.Die Größe des visuellen Effekts der Explosion ist unabhängig von BlastRadius gleich (auch wenn BlastRadius 0 ist).
BaseParts innerhalb des Explosionsradius wird durch die Explosion betroffen sein.Das heißt, wenn Explosion.BlastPressure größer als 0 ist, wird Kraft auf Teile angewendet.Der Grad, in dem Gelenke innerhalb des Explosionsradius zerbrochen werden, hängt von Explosion.DestroyJointRadiusPercent ab.Explosion.Hit wird für jede alle BasePart innerhalb des Radius abfeuern.
BaseParts werden innerhalb von Explosion.BlastRadius betrachtet, auch wenn sie nur teilweise in reichweite sind.
Code-Beispiele
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
Wird verwendet, um den Anteil des Explosion.BlastRadius, zwischen 0 und 1, festzulegen, innerhalb dessen alle Gelenke zerstört werden.Alles außerhalb dieser Reichweite wird nur die Explosion Kraft auf sie angewendet.
Wenn beispielsweise Explosion.BlastRadius auf 100 und DestroyJointRadiusPercent auf 0,5 eingestellt ist, würden alle Joints innerhalb eines Radius von 50 Klötzen zerbrochen.Alle Gelenke zwischen den Bereichen von 50 und 100 Stollen würden nicht zerstört, aber die Explosion Kraft würde immer noch auf die BaseParts angewendet.
Diese Eigenschaft ermöglicht es Entwicklern, Explosions 'nicht-letal' zu machen Humanoids durch Festlegen von DestroyJointRadiusPercent auf 0Das bedeutet, dass die Nackenverbindung nicht zerbrochen wird, wenn Charaktere mit dem Explosion in Kontakt kommen.
Code-Beispiele
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
Diese Eigenschaft legt fest, wie die Explosion mit Terrain interagieren wird. Es ist ein Enum.ExplosionType-Wert und kann auf eine von drei Optionen gesetzt werden.
- Keine Krater - Explosionen werden das Gelände nicht beschädigen
- Krater - Explosionen werden Krater im Gelände erzeugen
- Krater und Trümmer - Redundant, verhält sich gleich wie Krater
Wenn ExplosionType auf Erstellung von Kratern in Terrain festgelegt ist, ist der Radius des Kraters ungefähr gleich dem von Explosion.BlastRadius.Krater werden in allen Terrain Materialien erstellt, die nicht Wasser sind.Die Größe des Kraters wird nicht durch das Material beeinflusst, obwohl einige Materialien stärkere Kanten als andere schaffen.
Code-Beispiele
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
Diese Eigenschaft ist die Position des Zentrums der Explosion . Sie wird im Weltraum definiert und wird nicht vom Explosion übergeordnetes Teilbeeinflusst.
BaseParts wird durch die Explosion beeinflusst, wenn sie sich innerhalb von Explosion.BlastRadius klötzen der position der explosion befinden.
Die Wirkung einer Explosion ist sofort.Das bedeutet, dass die Position einer Explosion geändert werden kann, nachdem sie festgelegt wurde, sie aber nicht zwei verschiedene Bereiche betreffen kann.Sobald eine Explosion "detoniert" wurde, kurz nachdem sie zu einem Nachkommen der Workspace übertragen wurde, wird sie nicht wieder tun.In einigen Fällen bewegt sich der visuelle Effekt der Explosion, aber er wird keine Auswirkung haben.
Aus diesem Grund sollte eine neue Explosion erstellt werden, wenn der Entwickler eine Explosion an einer anderen Position erscheinen lassen möchte.
Code-Beispiele
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
Ein Wert zwischen 0 und 1, der die Geschwindigkeit des Partikeleffekts steuert.Bei 1 läuft es mit normaler Geschwindigkeit, bei 0.5 läuft es mit halber Geschwindigkeit und bei 0 wird die Zeit eingefroren.
Visible
Diese Eigenschaft bestimmt, ob oder nicht der visuelle Effekt eines Explosion angezeigt wird oder nicht.
Wenn Visible auf false gesetzt ist, wird die Explosion immer noch BaseParts in ihrer Explosion.BlastRadius betreffen, der einzige Unterschied ist, dass sie nicht gesehen wird.
Eine Verwendung dieser Eigenschaft wäre für einen Entwickler, seine eigenen benutzerdefinierten Explosionseffekte mit einem ParticleEmitter zu erstellen, während die Standard-Explosion-Funktionalität beibehalten wird.
Code-Beispiele
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))
Methoden
Ereignisse
Hit
Feuert, wenn der Explosion einen BasePart innerhalb seiner Explosion.BlastRadius trifft. Gibt das getroffene Teil zusammen mit der Entfernung des Teils von Explosion.Position zurück.
Beachten Sie, dass die Wirkung eines Explosion nicht durch Hindernisse gestört wird, was bedeutet, dass Teile, die hinter anderen Teilen geschützt sind, immer noch getroffen werden, auch wenn die BasePart, die hinter ihnen angelegt sind, verankert ist.
Dieses Ereignis wird auch abgefeuert, wenn Explosion.BlastPressure null gleich ist.Das bedeutet, dass Entwickler ihr eigenes benutzerdefiniertes Verhalten für Explosionen programmieren können, indem sie den Einfluss der Explosion auf BaseParts und Terrain beseitigen.
Beachten Sie, dass dieses Ereignis für jeden BasePart Treffer feuert.Das bedeutet, dass es mehrere Male für denselben Spielercharakter feuern kann (da der Charakter Model aus mehreren Teilen besteht).Aus diesem Grund wird empfohlen, beim Umgang mit benutzerdefinierten Schäden mit dem Ereignis Explosion.Hit einen Check durchzuführen, um zu sehen, ob der Charakter bereits vom Explosion getroffen wurde.
Parameter
Die Entfernung des Treffers von Explosion.Position.
Code-Beispiele
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)