Explosion

Hiển Thị Bản Đã Lỗi Thời

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Một vụ nổ áp dụng sức mạnh cho BaseParts trong vụ nổ BlastRadius

Nếu một Explosion được gắn vào bất kỳ nơi nào trong dữ liệu mô hình trong khi trải nghiệm đang chạy, nó ngay lập tức bị tắt và, trong vài giây, nó trở nên k

Ghi chú rằng một Explosion phải là con cháu của Workspace để hiển thị visuals nổ tung và hiệu ứng hại/thiệt hại vật lý/để có ảnh hưởng.

Hiệu ứng Nổ

Humanoids bị giết bởi nổ, vì nổ làm hỏng nhân vật Model của nó. Việc kết hợp một Class.ForceField với một mô hình sẽ bảo vệ tất cả trẻ em của nó khỏi hiệu ứng giết nổ.

Nếu bạn không muốn để các khớp giữa BaseParts để bị phá hủy, hoặc bạn muốn thực hiện công thức của riêng bạn để làm hại Class.Human

Nổ cũng có thể được cấu hình để gây sát thương Terrain , tạo ra các vết nứt, như được cấu hình qua thuộc tính ExplosionType .

Lưu ý rằng hiệu ứng của một vụ nổ là không bị xâm phạm bởi các rào chắn, có nghĩa là các bộ phận / địa hình được che giấu phía sau các bộ phận / địa hình khác vẫn sẽ bị ảnh hưởng.

Mẫu mã

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

Tóm Tắt

Thuộc Tính

  • Đọc Song Song

    Được sử dụng để xác định sức mạnh được áp dụng cho BaseParts bị bắt trong Explosion.BlastRadius .

  • Đọc Song Song

    Điều này xác định kích thước của Class.Explosion , trong studs. Kích thước này xác định khu vực hiệu ứng của cuộc nổ tung, chứ không phải kích thước của hình ảnh cuộc nổ tung.

  • Được sử dụng để thiết lập tỷ lệ của Explosion.BlastRadius , giữa 0 và 1, trong đó tất cả các kết cấu sẽ bị phá hủy. Bất cứ điều gì ngoài phạm vi này sẽ chỉ có sự điều chỉnh Explosion được áp dụng.

  • Điều này xác định cách Explosion sẽ tương tác với Terrain . Được sử dụng để thiết lập liệu nổ sẽ gây sát thương cho địa hình hay không.

  • Ẩn
    Không Sao Chép
    Đọc Song Song
  • Đọc Song Song

    Đây là vị trí trung tâm của Explosion. Nó được định nghĩa trong không gian thế giới và không bị ảnh hưởng bởi cha mẹ Explosion.

  • Đọc Song Song

    Giá trị giữa 0 và 1 điều khiển tốc độ hiệu ứng hạt nhân.

  • Đọc Song Song

    Đặt tính này xác định có hay không hiển thị hiệu ứng nhìn thấy của một Explosion .

Sự Kiện

Thuộc Tính

BlastPressure

Đọc Song Song

Được sử dụng để xác định sức mạnh được áp dụng cho BaseParts bị bắt trong Explosion.BlastRadius .

Hiện tại, cấp độ áp dụng sức mạnh này không thay đổi dựa trên khoảng cách từ Explosion.Position . Bị khóa BaseParts sẽ tăng tốc đều xa khỏi nguồn cung cấp dù họ ở trong khu vực nổ.

Bịt áp suất chấn định tốc độ tăng trưởng của các bộ phận do một vụ nổ. Nó không xác định độ đập của các khớp nối do một vụ nổ. Khi Explosion.DestroyJointRadiusPercent bằng 1 tất cả các khớp nối

BlastPressure cũng không xác định số lượng sát thương được cung cấp cho Terrain . Cung cấp BlastPressure lớn hơn 0 và Explosion.ExplosionType không được đặt ở Menu.ExplosionType.

Đặt áp suất thu nén để 0 xóa bỏ hiệu ứng của cuộc nổ tung và hữu ích khi những nhà phát triển muốn lập trình hành vi tùy chỉnh của riêng họ cho những cuộc nổ tung bằng cách sử dụng sự kiện Explosion.Hit.

Mẫu mã

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

Đọc Song Song

Điều này xác định kích thước vùng Explosion , trong studs. This property accept any value between 0 and 100.

Bán kính này xác định khu vực hiệu ứng của Thu nổ, không phải kích thước của các hình ảnh Thu nổ. Kích thước của hình ảnh Thu nổ là như nhau, ngay cả khi Blastradius là 0.

BaseParts trong khoảng cách Blastradius sẽ bị ảnh hưởng bởi vụ nổ. Điều này có nghĩa là, nếu Class.Explosion.BlastPressure</

BaseParts được xem như trong Explosion.BlastRadius ngay cả khi chúng chỉ nằm một phần trong khoảng cách.

Mẫu mã

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

Đọc Song Song

Được sử dụng để thiết lập tỷ lệ của Explosion.BlastRadius , giữa 0 và 1, trong đó tất cả các kết cấu sẽ bị phá hủy. Bất cứ điều gì ngoài phạm vi này sẽ chỉ có sự điều chỉnh Explosion được áp dụng.

Ví dụ, nếu Explosion.BlastRadius được đặt để 100 và DestroyJointRadiusPercent được đặt 0.5, bất kỳ mối hàn nào trong khu vực 50 studs sẽ bị phá hủy. B

Đặ性 này cho phép các nhà phát triển tạo ra Explosions 'non-lethal' đối với Humanoids bằng cách thiết lập DestroyJointRadiusPercent để 0. Điều này có nghĩa là cột sống cổ không bị gãy khi các

Mẫu mã

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

Đọc Song Song

Điều này xác định cách Explosion sẽ tương tác với Terrain . Nó là một giá trị Enum.ExplosionType và có thể được cài đặt vào một trong ba lựa chọn.

  • Không động đến địa hình - Nổ sẽ không làm hỏng địa hình
  • Craters - Những vụ nổ sẽ tạo ra những hẻm núi ở địa hình
  • CratersAndDebris - Redundant, hành xử giống như Craters

Nếu ExplosionType được đặt để tạo ra các vết nứt trong Terrain, vùng lượng của vết nứt sẽ được tương đương với Explosion.BlastRadius. Các vết nứt được tạo ra t

Mẫu mã

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

Ẩn
Không Sao Chép
Đọc Song Song

Position

Đọc Song Song

Đây là vị trí trung tâm của Explosion. Nó được định nghĩa trong không gian thế giới và không bị ảnh hưởng bởi cha mẹ Explosion.

BaseParts sẽ bị ảnh hưởng bởi Explosion nếu chúng ở trong vòng Explosion.BlastRadius của vị trí nổ.

Hiệu ứng của một cuộc nổ là tức thời. Điều này có nghĩa là mặc dù vị trí của một cuộc nổ có thể được thay đổi sau khi nó đã được cài đặt nó không thể ảnh hưởng đến hai khu vực khác nhau. Sau khi một cuộ

Vì lý do này, một vụ nổ mới nên được tạo nếu nhà phát triển muốn một vụ nổ xuất hiện ở một vị trí khác.

Mẫu mã

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

Đọc Song Song

Một giá trị được tạo giữa 0 và 1 để điều khiển tốc độ hiệu ứng hạt. Ở 1 nó chạy ở tốc độ bình thường, ở 0,5 nó chạy ở tốc độ chậm và ở 0 nó đóng băng thời gian.

Visible

Đọc Song Song

Đặt tính này xác định có hay không hiển thị hiệu ứng nhìn thấy của một Explosion .

Khi Visible được đặt sai, cuộc nổ vẫn sẽ ảnh hưởng đến BaseParts trong khoảng Explosion.BlastRadius của nó, duy nhất là nó sẽ không được thấy.

Một lầm dụng cho thuộc tính này sẽ là cho một nhà phát triển sử dụng một ParticleEmitter để tạo ra các hiệu ứng chất nổ tự chỉnh sửa bằng cách giữ các hiệu ứng Explosion mặc định.

Mẫu mã

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

Phương Pháp

Sự Kiện

Hit

Lửa khi Explosion đánh vào một BasePart trong khoảng cách của nó Explosion.BlastRadius . Trả lại phần được đánh bên với khoảng cách của phần từ 1> Class.Explosion.Position1> .

Lưu ý rằng hiệu ứng của một Explosion không bị ảnh hưởng bởi các rào chắn, điều này có nghĩa là các bộ phận được bảo vệ bên sau các bộ phận khác vẫn sẽ bị đâm, ngay cả khi bộ phận đó được bảo vệ bên sau có thể kết dính.

Sự kiện này cũng sẽ kích hoạt khi Explosion.BlastPressure bằng 0. Điều này có nghĩa là các nhà phát triển có thể lập trình hành vi tùy chỉnh của riêng họ cho những vụ nổ bằng cách loại bỏ ảnh hưởng của nổ đến Class.BasePart|Base

Lưu ý rằng sự kiện này sẽ bắt đầu khi mọi lần BasePart được đánh. Điều này có nghĩa là nó có thể bắt đầu nhiều lần cho cùng một nhân vật nhân

Tham Số

part: BasePart

The BasePart hit by the Explosion .

distance: number

Khoảng cách của cú đập từ Explosion.Position .


Mẫu mã

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)