Klasa silnika
Explosion
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Przykłady kodu
Instancjacja eksplozji
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- uszkadza teren
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspaceMateriały referencyjne dotyczące interfejsów API
Właściwości
BlastPressure
Przykłady kodu
Customowa eksplozja
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- to można ustawić na wyższe, aby nadal stosować prędkość do części
explosion.DestroyJointRadiusPercent = 0 -- stawy są bezpieczne
explosion.BlastRadius = radius
explosion.Position = position
-- ustaw tabelę do śledzenia trafionych modeli
local modelsHit = {}
-- nasłuchuj na kontakt
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- sprawdź, czy ten model został już trafiony
if modelsHit[parentModel] then
return
end
-- zarejestruj ten model jako trafiony
modelsHit[parentModel] = true
-- szukaj humanoida
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- uzyskaj odległość jako wartość między 0 a 1
distanceFactor = 1 - distanceFactor -- odwróć wartość, aby mniejsze == bliżej == więcej obrażeń
humanoid:TakeDamage(maxDamage * distanceFactor) -- Weź obrażenia, aby respektować ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox usuwa eksplozje po kilku sekundach, ale ich nie niszczy.
-- Aby zapewnić, że nasze połączenie .Hit zostanie rozłączone, zniszcz eksplozję, gdy zostanie usunięta.
explosion.AncestryChanged:Connect(function()
if not explosion.Parent then
explosion:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0), 12, 50)BlastRadius
Przykłady kodu
Instancjacja eksplozji
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- uszkadza teren
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspaceDestroyJointRadiusPercent
Przykłady kodu
Nieletalne wybuchy
local function onDescendantAdded(instance)
if instance:IsA("Explosion") then
local explosion = instance
explosion.DestroyJointRadiusPercent = 0
local destroyJointRadiusPercent = 1
explosion.Hit:Connect(function(part, distance)
-- sprawdź, czy część znajduje się w zasięgu, aby złamać stawy
if distance <= destroyJointRadiusPercent * explosion.BlastRadius then
-- upewnij się, że część nie należy do postaci
if not game.Players:GetPlayerFromCharacter(part.Parent) then
part:BreakJoints()
end
end
end)
end
end
workspace.DescendantAdded:Connect(onDescendantAdded)Customowa eksplozja
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- to można ustawić na wyższe, aby nadal stosować prędkość do części
explosion.DestroyJointRadiusPercent = 0 -- stawy są bezpieczne
explosion.BlastRadius = radius
explosion.Position = position
-- ustaw tabelę do śledzenia trafionych modeli
local modelsHit = {}
-- nasłuchuj na kontakt
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- sprawdź, czy ten model został już trafiony
if modelsHit[parentModel] then
return
end
-- zarejestruj ten model jako trafiony
modelsHit[parentModel] = true
-- szukaj humanoida
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- uzyskaj odległość jako wartość między 0 a 1
distanceFactor = 1 - distanceFactor -- odwróć wartość, aby mniejsze == bliżej == więcej obrażeń
humanoid:TakeDamage(maxDamage * distanceFactor) -- Weź obrażenia, aby respektować ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox usuwa eksplozje po kilku sekundach, ale ich nie niszczy.
-- Aby zapewnić, że nasze połączenie .Hit zostanie rozłączone, zniszcz eksplozję, gdy zostanie usunięta.
explosion.AncestryChanged:Connect(function()
if not explosion.Parent then
explosion:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0), 12, 50)ExplosionType
Przykłady kodu
Zatrzymaj eksplozje przed uszkodzeniem terenu
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)Position
Przykłady kodu
Instancjacja eksplozji
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 60
explosion.ExplosionType = Enum.ExplosionType.Craters -- uszkadza teren
explosion.Position = Vector3.new(0, 10, 0)
explosion.Parent = workspaceVisible
Przykłady kodu
Eksplozja Niestandardowe Wizualizacje
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))Zdarzenia
Hit
Przykłady kodu
Customowa eksplozja
local function customExplosion(position, radius, maxDamage)
local explosion = Instance.new("Explosion")
explosion.BlastPressure = 0 -- to można ustawić na wyższe, aby nadal stosować prędkość do części
explosion.DestroyJointRadiusPercent = 0 -- stawy są bezpieczne
explosion.BlastRadius = radius
explosion.Position = position
-- ustaw tabelę do śledzenia trafionych modeli
local modelsHit = {}
-- nasłuchuj na kontakt
explosion.Hit:Connect(function(part, distance)
local parentModel = part.Parent
if parentModel then
-- sprawdź, czy ten model został już trafiony
if modelsHit[parentModel] then
return
end
-- zarejestruj ten model jako trafiony
modelsHit[parentModel] = true
-- szukaj humanoida
local humanoid = parentModel:FindFirstChild("Humanoid")
if humanoid then
local distanceFactor = distance / explosion.BlastRadius -- uzyskaj odległość jako wartość między 0 a 1
distanceFactor = 1 - distanceFactor -- odwróć wartość, aby mniejsze == bliżej == więcej obrażeń
humanoid:TakeDamage(maxDamage * distanceFactor) -- Weź obrażenia, aby respektować ForceFields
end
end
end)
explosion.Parent = game.Workspace
-- Roblox usuwa eksplozje po kilku sekundach, ale ich nie niszczy.
-- Aby zapewnić, że nasze połączenie .Hit zostanie rozłączone, zniszcz eksplozję, gdy zostanie usunięta.
explosion.AncestryChanged:Connect(function()
if not explosion.Parent then
explosion:Destroy()
end
end)
end
customExplosion(Vector3.new(0, 10, 0), 12, 50)