Explosion

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Eine Explosion gilt für BaseParts innerhalb der Explosion BlastRadius . Diese Kraft bricht Class.Joint

Wenn ein Explosion in irgendeinem Teil des Datenmodells verwendet wird, während die Erfahrung ausgeführt wird, setzt es sofort ab und wird innerhalb weniger Sekunden wieder abgebrochen. Es wird nicht mit Instance:Destroy() in diesem Fall zerstört, so dass Verbindungen nicht getrennt werden und das Elternteil nicht gesperrt wird.

Beachten Sie, dass ein Explosion ein Nachkommen von Workspace muss, damit die Explosionsvisualisierungen wiedergegeben werden und die physischen/schädigenden Effekte einen Einfluss haben.

Explosionseffekte

Humanoids werden durch Explosionen getötet, da die Explosion den Charakter Model zerbricht. Verbindungeines ForceField an ein Modell zu übergeben, schützen alle seine Kinder vor dem Explosions-Kill-Effekt.

Wenn Sie keine Joints zwischen BaseParts zu brechen wollen, oder Sie Ihre eigene Formel für den Schaden von Humanoids implementieren möchten, ist es empfohlen, Class.Explosion.DestroyJointRadiusPercent|DestroyJointRadiusPercent auf 0 zu setzen und

Explosionen können auch so konfiguriert sein, um Terrain Schaden zu fügen, indem Krater erstellt werden, wie durch die ExplosionType.

Beachten Sie, dass der Effekt einer Explosion nicht durch Hindernisse gestört wird, was bedeutet, dass Teile/Terrain hinter anderen Terrain immer noch betroffen sind.

Code-Beispiele

Explosion Instantiation

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

Ereignisse

Eigenschaften

BlastPressure

Parallel lesen

Wird verwendet, um die Kraftmenge, die auf BaseParts eingewendet wird, zu bestimmen, die in Explosion.BlastRadius gefangen ist.

Derzeit gilt dieses Niveau der Kraft nicht basierend auf der Entfernung von Explosion.Position. Unverankerte BaseParts werden auf gleiche Weise vom Ziel entfernt beschleunigt, unabhängig von der Entfernung, die ihnen angegeben wird, wenn sie innerhalb des Explosionsradius sind.

Die Explosionspresse bestimmt die Beschleunigung von Teilen aufgrund einer Explosion. Sie bestimmt nicht den Grad, in dem sich die Verbindungen zerbrechen. Wenn Explosion.DestroyJointRadiusPercent größer als 1 ist, werden alle Verbindungen zwischen den Teilen im Explosion.BlastRadius zerstört, wenn BlastPressure größer als 0 ist.

Die BlastPressure gibt auch nicht die Menge des Schadens an Terrain . Die von BlastPressure bereitgestellte BlastPressure ist größer als 0 und Explosion.ExplosionType ist nicht auf Enum.ExplosionType.NoCraters die Größe des erstellten Kraters bestimmt, wird ausschließlich durch die Class.Explosion.

Durch das Festlegen von BlastPressure auf 0 wird der Effekt der Explosion beseitigt und ist nützlich, wenn Entwickler ihr eigenes benutzerdefiniertes Verhalten für Explosionen mit dem Explosion.Hit -Ereignis programmieren möchten.

Code-Beispiele

Custom Explosion

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

Parallel lesen

Dieses Eigenschaft bestimmt den Radius der Explosion , in Studs. Dieses Eigenschaft akzeptiert jeden Wert zwischen 0 und 100.

Dieser Radius bestimmt den Effektbereich der Explosion, nicht die Größe der Explosionsvisualisierungen. Die Größe der Explosionsvisualisierung ist unabhängig von BlastRadius (einschließlich, wenn BlastRadius 0 ist).

BaseParts innerhalb des BlastRadius wird von der Explosion betroffen sein. Das heißt, wenn Explosion.BlastPressure größer als 0 ist, wird Kraft auf Teile angewendet. Der Grad, in dem Joints inner

BaseParts werden innerhalb von Explosion.BlastRadius betrachtet, auch wenn sie nur teilweise in Reichweite sind.

Code-Beispiele

Explosion Instantiation

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

Parallel lesen

Wird verwendet, um die Proportion von dem Explosion.BlastRadius, zwischen 0 und 1, innerhalb derer alle Verbindungen zerstört werden. Alles außerhalb dieser Reichweite wird nur die Explosion Kraft auf sie angewendet haben.

Zum Beispiel, wenn Explosion.BlastRadius auf 100 gesetzt ist und DestroyJointRadiusPercent auf 0.5 gesetzt ist, würden alle Joints innerhalb eines Radius von 50 Studs zerstört. Alle Joints zwischen den Reichweiten von 50 und 100 Studs würden nicht zerstört, aber die <

Dieses Eigenschaft ermöglicht es Entwicklern, Explosions 'nicht-letal' zu Humanoids , indem DestroyJointRadiusPercent auf 0 eingestellt wird. Dies bedeutet, dass der Halswirbel nicht zerbrochen wird, wenn sich die Charaktere mit dem Explosion in Berührung bringen.

Code-Beispiele

Non lethal explosions

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)
Custom Explosion

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

Parallel lesen

Dieses Eigenschaft bestimmt, wie die Explosion mit Terrain interagiert. Es ist ein Enumeration-Explosion-Typ-Wert und kann auf eine der drei Optionen eingestellt werden.

  • Keine Crater - Explosionen verursachen keinen Schaden am Terrain
  • Krater - Explosionen erzeugen Krater im Terrain
  • Krater und Debris - Redundant, verhält sich so wie Krater

Wenn ExplosionType auf "Crater in Class.Terrain" eingestellt ist, ist der Radius der Krater ungefähr gleich mit dem Terrain. Krater werden in allen Class.Terrain -Materialien außer Wasser erstellt. Die Größe des Kraters wird nicht durch das Material beeinflusst, obwohl einige Materialien rauere Kanten als andere erstellen.

Code-Beispiele

Stop Explosions from Damaging Terrain

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

Verborgen
Nicht repliziert
Parallel lesen

Position

Parallel lesen

Diese Eigenschaft ist die Position des Zentrums des Explosion. Sie wird in der Weltspace definiert und ist nicht von der Explosion übergeordnetes Teilbeeinflusst.

BaseParts wird von der Explosion beeinflusst, wenn sie innerhalb von Explosion.BlastRadius Studs der Explosionsposition sind.

Der Effekt einer Explosion ist sofortig. Dies bedeutet, dass, obwohl die Position einer Explosion nach dem Festlegen geändert werden kann, kann sie nicht zwei verschiedene Bereiche betreffen. Sobald eine Explosion 'detoniert' ist, kurz nach dem Elternteilen, um einen Nachkommen des Workspace , wird sie nicht wieder so. In einigen Fällen bewirkt der visuelle Effekt der Explosion, aber sie wird keinen Effekt haben.

Aus diesem Grund muss ein neuer Explosion erstellt werden, wenn der Entwickler eine Explosion in einer anderen Position erwartet.

Code-Beispiele

Explosion Instantiation

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

Parallel lesen

Ein Wert zwischen 0 und 1, der die Geschwindigkeit des Partikeleffekts steuert. Bei 1 läuft es normalerweise mit normaler Geschwindigkeit, bei 0,5 läuft es halb so schnell und bei 0 wird die Zeit eingefroren.

Visible

Parallel lesen

Dieses Eigenschaft bestimmt, ob der visuelle Effekt eines Explosion gezeigt wird oder nicht.

Wenn Visible auf false gesetzt ist, wirkt die Explosion sich immer noch auf BaseParts in seinem Explosion.BlastRadius aus, der einzige Unterschied ist, dass er nicht angezeigt wird.

Eine Verwendung für dieses 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

Explosion Custom Visuals

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 seines Explosion.BlastRadius trifft. Kehre das Teil, das getroffen wird, mit der Distanz der Teil von 1>Class.Explosion.Position1> zurück.

Beachten Sie, dass der Effekt eines Explosion nicht durch Hindernisse gestört wird, dies bedeutet, dass Teile, die hinter anderen Teilen geschützt sind, immer noch getroffen werden, auch wenn die BasePart , die sie hinter sind, verankert sind.

Dieses Ereignis wird auch ausgelöst, wenn Explosion.BlastPressure gleich ist mit BaseParts und Terrain.

Beachten Sie, dass dieses Ereignis für jeden BasePart Treffer feuern wird. Dies bedeutet, dass es mehrere Mal für den gleichen Spielercharakter feuern kann (da der Charakter Model aus mehreren Teilen besteht). Aus diesem Grund ist es empfohlen, beim Verwenden des Ereignises Class

Parameter

part: BasePart

Der BasePart hat von der Explosion getroffen.

distance: number

Die Entfernung des Treffers von Explosion.Position .


Code-Beispiele

Custom Explosion

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)