烟雾是几个颗粒发射类别之一。像其他类型的粒子发射器一样,烟雾对象在与父辈(例如,一个 )或在这样的父辈内部发射粒子(例如,一个 )。与 ParticleEmitter 类相比,烟雾缺乏许多不同的自定义属性和特殊方法,例如 ParticleEmitter.Lifetime 或 ParticleEmitter:Emit() 。在紧急情况下创建快速特效有用;对于更详细的工作,建议使用 ParticleEmitter 来进行。
当Smoke.Enabled关闭时,由此对象发射的粒子将继续渲染,直到其生命周期到期。当烟雾对象的 Instance.Parent 设置为 nil (和/或 Instance:Destroy() 编辑)时,所有粒子将立即消失。如果不想要这种效果,请尝试隐藏父对象在遥远位置,然后使用 Debris 在几秒钟后移除烟雾,以给最后一些粒子一个机会过期。该对象没有 ParticleEmitter:Clear() 方法,但可以将 Instance.Parent 设置为 nil 并返回到相同的对象以获得相同的效果。
烟雾粒子只从BasePart中心发射到它们的父辈。将烟雾对象转换为 Attachment 而不允许父辈化粒子的起始位置的自定义
代码示例
This code sample adds a Smoke object to every Fire object in the Workspace. It does this by using a recursive search.
local function recurseForFire(object)
-- Check if we found a Fire object that has no Smoke
if object:IsA("Fire") and not object.Parent:FindFirstChildOfClass("Smoke") then
-- Create a smoke effect for this fire
local smoke = Instance.new("Smoke")
smoke.Color = Color3.new(0, 0, 0)
smoke.Opacity = 0.15
smoke.RiseVelocity = 4
smoke.Size = object.Size / 4
smoke.Parent = object.Parent
end
-- Continue search for Fire objects
for _, child in pairs(object:GetChildren()) do
recurseForFire(child)
end
end
recurseForFire(workspace)
概要
属性
决定烟雾粒子的颜色。
决定是否发出烟雾粒子。
决定了烟雾粒子的不透明度渲染。
决定烟雾粒子的速度。
决定新发出的烟雾粒子的尺寸。
在 0-1 之间的值,控制粒子效果的速度。
属性
Color
颜色属性决定了所有由 Smoke 对象发射的粒子的颜色(既存粒子和未来粒子)。它与 ParticleEmitter.Color 相似,除了它只有一个颜色而不是 ColorSequence 。一些白色的颜色Smoke.Opacity使得雾效果很漂亮,非常不透明的黑色可以很好地补充一个Fire对象。
代码示例
This code sample adds a Smoke object to every Fire object in the Workspace. It does this by using a recursive search.
local function recurseForFire(object)
-- Check if we found a Fire object that has no Smoke
if object:IsA("Fire") and not object.Parent:FindFirstChildOfClass("Smoke") then
-- Create a smoke effect for this fire
local smoke = Instance.new("Smoke")
smoke.Color = Color3.new(0, 0, 0)
smoke.Opacity = 0.15
smoke.RiseVelocity = 4
smoke.Size = object.Size / 4
smoke.Parent = object.Parent
end
-- Continue search for Fire objects
for _, child in pairs(object:GetChildren()) do
recurseForFire(child)
end
end
recurseForFire(workspace)
Enabled
启用属性,与 ParticleEmitter.Enabled 类似,决定是否发出烟雾粒子。任何已发射的粒子将继续渲染,直到其使用期过期。此属性有助于保持预制的烟雾效果直到稍后需要它们为止。由于烟雾粒子在 Smoke 对象的 Instance.Parent 设置为 nil 时被摧毁,这个属性有助于允许现有粒子在摧毁火焰对象之前有机会过期。请参阅下面的函数。
local Debris = game:GetService("Debris")
local part = script.Parent
function stopSmoke(smoke)
smoke.Enabled = false -- No more new particles
Debris:AddItem(smoke, 10) -- Remove the object after a delay (after existing particles have expired)
end
stopSmoke(part.Smoke)
代码示例
This code sample adds a Smoke object to every Fire object in the Workspace. It does this by using a recursive search.
local function recurseForFire(object)
-- Check if we found a Fire object that has no Smoke
if object:IsA("Fire") and not object.Parent:FindFirstChildOfClass("Smoke") then
-- Create a smoke effect for this fire
local smoke = Instance.new("Smoke")
smoke.Color = Color3.new(0, 0, 0)
smoke.Opacity = 0.15
smoke.RiseVelocity = 4
smoke.Size = object.Size / 4
smoke.Parent = object.Parent
end
-- Continue search for Fire objects
for _, child in pairs(object:GetChildren()) do
recurseForFire(child)
end
end
recurseForFire(workspace)
LocalTransparencyModifier
Opacity
不透明度决定了烟雾粒子的不透明度。它必须在范围 [0, 1] 内。这个属性在比较于零件的 或粒子发射器的 时工作:一个值为 0 是完全隐形的,一个值为 1 是完全可见的:
Roblox 使用的粒子纹理部分透明,因此将此属性设置为 1 仍然可以在渲染的烟雾中获得透明度
代码示例
This code sample adds a Smoke object to every Fire object in the Workspace. It does this by using a recursive search.
local function recurseForFire(object)
-- Check if we found a Fire object that has no Smoke
if object:IsA("Fire") and not object.Parent:FindFirstChildOfClass("Smoke") then
-- Create a smoke effect for this fire
local smoke = Instance.new("Smoke")
smoke.Color = Color3.new(0, 0, 0)
smoke.Opacity = 0.15
smoke.RiseVelocity = 4
smoke.Size = object.Size / 4
smoke.Parent = object.Parent
end
-- Continue search for Fire objects
for _, child in pairs(object:GetChildren()) do
recurseForFire(child)
end
end
recurseForFire(workspace)
RiseVelocity
RiseVelocity与ParticleEmitter.Speed和Fire.Heat相似:它决定烟雾粒子在生命周期内移动的速度。它必须在 [-25, 25] 范围内。负值会导致粒子在父BasePart的底部(-Y)方向发射。
当使用 Smoke 效果创建雾时,将此属性设置为 0。对于大型烟雾效果,使上升变得渐进(2到8)。对于烟囱和烟囱,更高的值更适合。
代码示例
This code sample adds a Smoke object to every Fire object in the Workspace. It does this by using a recursive search.
local function recurseForFire(object)
-- Check if we found a Fire object that has no Smoke
if object:IsA("Fire") and not object.Parent:FindFirstChildOfClass("Smoke") then
-- Create a smoke effect for this fire
local smoke = Instance.new("Smoke")
smoke.Color = Color3.new(0, 0, 0)
smoke.Opacity = 0.15
smoke.RiseVelocity = 4
smoke.Size = object.Size / 4
smoke.Parent = object.Parent
end
-- Continue search for Fire objects
for _, child in pairs(object:GetChildren()) do
recurseForFire(child)
end
end
recurseForFire(workspace)
Size
Smoke 的尺寸属性决定了新发射的烟雾粒子的尺寸。与 Smoke.Color 不同,此属性不会改变现有粒子的大小。它必须在范围 [0.1, 100] 内。与 ParticleEmitter.Size 不同,这个属性只是一个数字(不是 NumberSequence)。还需要注意的是,粒子的尺寸与螺柱不是 1 对 1;事实上,烟雾粒子的尺寸是大于两倍的。在最大尺寸上,烟雾粒子可以渲染宽度超过 200 个单位!
代码示例
This code sample adds a Smoke object to every Fire object in the Workspace. It does this by using a recursive search.
local function recurseForFire(object)
-- Check if we found a Fire object that has no Smoke
if object:IsA("Fire") and not object.Parent:FindFirstChildOfClass("Smoke") then
-- Create a smoke effect for this fire
local smoke = Instance.new("Smoke")
smoke.Color = Color3.new(0, 0, 0)
smoke.Opacity = 0.15
smoke.RiseVelocity = 4
smoke.Size = object.Size / 4
smoke.Parent = object.Parent
end
-- Continue search for Fire objects
for _, child in pairs(object:GetChildren()) do
recurseForFire(child)
end
end
recurseForFire(workspace)