Explosion

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Un'esplosione applica la forza a BaseParts all'interno dell'esplosione di BlastRadius . Questa forza

Se un Explosion è parented ovunque nel modello di dati mentre l'esperienza è in esecuzione, si attiva immediatamente e, entro pochi secondi, diventa non parented. Non viene distrutto con Instance:Destroy() in questo caso, quindi le connessioni non vengono disconnese e il padre non è bloccato. Come con

Nota che un Explosion deve essere un discendente di Workspace perché le visualizzazioni dell'esplosione e gli effetti fisici/danneggianti abbiano un impatto.

Effetti di esplosione

Humanoids vengono uccisi dalle esplosioni, poiché l'esplosione rompe il personaggio Model Articolazione. La genitorialità di un ForceField a un modello proteggerà tutti i suoi figli dall'effetto di morte dell'esplosione.

Se non vuoi che le giunte tra BaseParts vengano danneggiate o vuoi implementare la tua formula per danneggiare Humanoids , è raccomandato di impostare DestroyJointRadiusPercent su

Le esplosioni possono anche essere configurate per danneggiare Terrain , creando crater, come configurato attraverso la ProprietàExplosionType .

Nota che l'effetto di un'esplosione non è non disdetto da ostacoli, il che significa che le parti / terreno difronte alle altre parti / terreno saranno ancora interessate.

Campioni di codice

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

Sommario

Proprietà

  • Lettura Parallela

    Utilizzato per determinare la quantità di forza applicata a BaseParts catturato nel Explosion.BlastRadius .

  • Lettura Parallela

    Questa proprietà determina il raggio della Explosion , in studs. Questo raggio determina l'area di effetto dell'esplosione, non la dimensione dei suoi visual.

  • Utilizzato per impostare la proporzione di Class.Explosion.BlastRadius , tra 0 e 1, tra cui tutte le articolazioni saranno distrutte. Qualunque cosa al di fuori di questo raggio avrà solo la forza Class.Explosion applicata a esso.

  • Questa proprietà determina come l'Explosion interagirà con l'Terrain . Utilizzato per impostare se le esplosioni causeranno danni al terreno o no.

  • Nascosto
    Non Replicato
    Lettura Parallela
  • Lettura Parallela

    Questa proprietà è la posizione del centro del Explosion. È definita nello spazio del mondo e non è influenzata dalla Explosion parent.

  • Lettura Parallela

    Valore tra 0 e 1 che controlla la velocità dell'effetto di partecipazione.

  • Lettura Parallela

    Questa proprietà determina se mostrare o meno l'effetto visivo di un Explosion .

Eventi

Proprietà

BlastPressure

Lettura Parallela

Utilizzato per determinare la quantità di forza applicata a BaseParts catturato nel Explosion.BlastRadius .

Attualmente, questo livello di forza applicata non cambia in base alla distanza da Explosion.Position . Le basi non ancorate BaseParts accelereranno ugualmente lontane dall'origine indipendentemente dalla distanza fornita che sono all'interno del raggio di esplosione.

La pressione di esplosione determina l'accelerazione delle parti a causa di un'esplosione. Non determina la misura in cui le parti sono danneggiate. Quando Explosion.DestroyJointRadiusPercent è pari a 1 tutte le parti tra le parti nell' Explosion.BlastRadius vengono distrutte fornendo che BlastPressure sia maggiore di 0.

La Pressione di Esplosione non determina anche la quantità di danni data a Terrain . La Pressione di Esplosione fornita è maggiore di 0 e Explosion.ExplosionType non è impostata su Enum.ExplosionType.NoCraters la dimensione della cratera creata è determinata esclusivamente dalla Class.Expl

Impostare BlastPressure a 0 elimina l'effetto dell'esplosione e è utile quando gli sviluppatori vogliono programmare il proprio comportamento personalizzato per le esplosioni utilizzando l'evento Explosion.Hit.

Campioni di codice

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

Lettura Parallela

Questa proprietà determina il raggio della Explosion , in studs. Questa proprietà accetta qualsiasi valore tra 0 e 100.

Questo raggio determina l'area di effetto dell'esplosione, non la dimensione visiva dell'esplosione. La dimensione dell'effetto visivo dell'esplosione è la stessa indipendentemente dal BlastRadius (anche se BlastRadius è 0).

BaseParts entro il raggio di esplosione sarà colpito dall'esplosione. Ciò significa che, se Explosion.BlastPressure è maggiore di 0, la forza sarà applicata alle parti. Il

BaseParts sono considerati all'interno di Explosion.BlastRadius anche se parzialmente fuori dal raggio.

Campioni di codice

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

Lettura Parallela

Utilizzato per impostare la proporzione di Class.Explosion.BlastRadius , tra 0 e 1, tra cui tutte le articolazioni saranno distrutte. Qualunque cosa al di fuori di questo raggio avrà solo la forza Class.Explosion applicata a esso.

Ad esempio, se Explosion.BlastRadius è impostato su 100 e DestroyJointRadiusPercent è impostato su 0,5, qualsiasi articolazione all'interno di un raggio di 50 studs sarebbe danneggiata. Tutte le articolazioni tra le gamme di 50 e 100 studs non

Questa proprietà consente ai sviluppatori di rendere Explosions 'non-lethal' a Humanoids impostando DestroyJointRadiusPercent su 0. Ciò significa che il collo joint non sarà rotto quando i personaggi entreranno in contatto con il Explosion .

Campioni di codice

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

Lettura Parallela

Questa proprietà determina il modo in cui la Explosion interagirà con Terrain . È un valore Enum.ExplosionType e può essere impostato su uno qualsiasi delle tre opzioni.

  • NoCraters - Le esplosioni non danneggeranno il terreno
  • Cratere - Le esplosioni creeranno cratere nel terreno
  • CraterAndDebris - Rundante, si comporta allo stesso modo di Crater

Se ExplosionType è impostato per creare crater in Terrain , il raggio della crater sarà approssimativamente uguale al Explosion.BlastRadius . Le crater vengono create in tutti i materiali Terrain ad eccezione dell'acqua. La dimensione della crater non è influenzata dal materiale, anche se alcuni materiali

Campioni di codice

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

Nascosto
Non Replicato
Lettura Parallela

Position

Lettura Parallela

Questa proprietà è la posizione del centro del Explosion. È definita nello spazio del mondo e non è influenzata dalla Explosion parent.

BaseParts sarà influenzato dal Explosion se è all'interno di Explosion.BlastRadius studs della posizione dell'esplosione.

L'effetto di un'esplosione è istantaneo. Ciò significa che anche se la posizione di un'esplosione può essere cambiata dopo che è stata impostata, non può influenzare due aree diverse. Una volta che un'esplosione è stata 'detonata', poco dopo averla legata a un discendente del Workspace , non lo farà di nuovo. In alcuni casi l'effetto visivo dell'esplosione si muoverà ma non avrà effetto.

Per questo motivo una nuova esplosione dovrebbe essere creata se lo sviluppatore vuole che appaia in una posizione diversa.

Campioni di codice

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

Lettura Parallela

Un valore tra 0 e 1 che controlla la velocità dell'effetto di partecipazione. A 1 viene eseguito a velocità normale, a 0.5 viene eseguito a velocità ridotta e a 0 viene congelato il tempo.

Visible

Lettura Parallela

Questa proprietà determina se mostrare o meno l'effetto visivo di un Explosion .

Quando Visible è impostato su false, l'esplosione influirà ancora su BaseParts nel suo Explosion.BlastRadius , l'unica differenza è che non sarà visto.

Un uso per questa proprietà sarebbe per un sviluppatore per creare i loro own personalizzati effetti esplosione usando un ParticleEmitter , mentre mantenendo la funzionalità predefinita Explosion .

Campioni di codice

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

Metodi

Eventi

Hit

Fa fuoco quando il Explosion colpisce un BasePart all'interno del suo Explosion.BlastRadius . Ritorna il pezzo colpito insieme alla distanza del pezzo da 1> Class.Explosion.Position1> .

Nota che l'effetto di un Explosion non è interrotto dagli ostacoli, questo significa che le parti protette dietro altre parti saranno comunque colpite, anche se il BasePart che sono protette è ancora ancorato.

Questo evento si attiverà anche quando Explosion.BlastPressure è uguale a zero. Ciò significa che gli sviluppatori possono programmare il proprio comportamento personalizzato per le esplosioni eliminando l'influenza dell'esplosione su BaseParts e Terrain .

Nota che questo evento si attivera per ogni BasePart colpito. Ciò significa che può attivarsi più volte per lo stesso personaggio del giocatore (come il personaggio Model è costituito da più parti). Per questo motivo quando si tratta di infliggere danni personalizzati usando l'evento Class.Expl

Parametri

part: BasePart

Il BasePart colpito dal Explosion .

distance: number

La distanza del colpo da Explosion.Position .


Campioni di codice

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)