ParticleEmitter

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

一个 粒子发射器 是一个特殊对象,可以向世界发射可定制的 2D 粒子。要发射和渲染粒子,必须被父辈到一个 BasePart 或一个 Attachment 在这样的部分内。当作为父辈到一个 BasePart 时,粒子会随机生成在零件的边界盒或 形状 内;当作为父辈到一个 Attachment 时,粒子会从附件的位置生成。

发射器当 Enabled 具有非零 Rate 时自动发射粒子,或者手动调用 Emit 方法时。使用非零 Speed 粒子向外或向内运动,取决于 ShapeInOut 属性。

默认情况下,粒子面向相镜头,但 Orientation 可以修改以尊重粒子速度。

在粒子的 Lifetime 期间,它们可以根据 ColorSize 来更改外观。他们的运动可以随着DragAcceleration属性的变化而改变,也可以像父辈一样移动,当它们是LockedToPart或有非零VelocityInheritance时。

了解有关创建和自定义粒子发射器的更多信息,请参阅粒子发射器

代码示例

This rather lengthy code sample shows how every property of a ParticleEmitter can be set, including NumberRange, NumberSequence and ColorSequence properties. Below is how the ParticleEmitter should look after every property is set. Try playing around with the different properties to customize how the effect looks!

Creating a Particle Emitter from Scratch

local emitter = Instance.new("ParticleEmitter")
-- Number of particles = Rate * Lifetime
emitter.Rate = 5 -- Particles per second
emitter.Lifetime = NumberRange.new(1, 1) -- How long the particles should be alive (min, max)
emitter.Enabled = true
-- Visual properties
emitter.Texture = "rbxassetid://1266170131" -- A transparent image of a white ring
-- For Color, build a ColorSequence using ColorSequenceKeypoint
local colorKeypoints = {
-- API: ColorSequenceKeypoint.new(time, color)
ColorSequenceKeypoint.new(0, Color3.new(1, 1, 1)), -- At t=0, White
ColorSequenceKeypoint.new(0.5, Color3.new(1, 0.5, 0)), -- At t=.5, Orange
ColorSequenceKeypoint.new(1, Color3.new(1, 0, 0)), -- At t=1, Red
}
emitter.Color = ColorSequence.new(colorKeypoints)
local numberKeypoints = {
-- API: NumberSequenceKeypoint.new(time, size, envelop)
NumberSequenceKeypoint.new(0, 1), -- At t=0, fully transparent
NumberSequenceKeypoint.new(0.1, 0), -- At t=.1, fully opaque
NumberSequenceKeypoint.new(0.5, 0.25), -- At t=.5, mostly opaque
NumberSequenceKeypoint.new(1, 1), -- At t=1, fully transparent
}
emitter.Transparency = NumberSequence.new(numberKeypoints)
emitter.LightEmission = 1 -- When particles overlap, multiply their color to be brighter
emitter.LightInfluence = 0 -- Don't be affected by world lighting
-- Speed properties
emitter.EmissionDirection = Enum.NormalId.Front -- Emit forwards
emitter.Speed = NumberRange.new(0, 0) -- Speed of zero
emitter.Drag = 0 -- Apply no drag to particle motion
emitter.VelocitySpread = NumberRange.new(0, 0)
emitter.VelocityInheritance = 0 -- Don't inherit parent velocity
emitter.Acceleration = Vector3.new(0, 0, 0)
emitter.LockedToPart = false -- Don't lock the particles to the parent
emitter.SpreadAngle = Vector2.new(0, 0) -- No spread angle on either axis
-- Simulation properties
local numberKeypoints2 = {
NumberSequenceKeypoint.new(0, 0), -- At t=0, size of 0
NumberSequenceKeypoint.new(1, 10), -- At t=1, size of 10
}
emitter.Size = NumberSequence.new(numberKeypoints2)
emitter.ZOffset = -1 -- Render slightly behind the actual position
emitter.Rotation = NumberRange.new(0, 360) -- Start at random rotation
emitter.RotSpeed = NumberRange.new(0) -- Do not rotate during simulation
-- Create an attachment so particles emit from the exact same spot (concentric rings)
local attachment = Instance.new("Attachment")
attachment.Position = Vector3.new(0, 5, 0) -- Move the attachment upwards a little
attachment.Parent = script.Parent
emitter.Parent = attachment

概要

属性

方法

  • Clear():()

    清除所有已发射的粒子。

  • Emit(particleCount : number):()

    发出一定数量的粒子。

属性

Acceleration

读取并联

加速属性决定了粒子在其生命周期内的 变化。它使用 Vector3 来确定全球 X / Y / Z 轴上的加速,并以每秒钟的 studs 计算。更改时,该属性会影响发射器发出的所有粒子,现有和未来的都包括在内

加速会使向量点在相反的 EmissionDirection 中减慢粒子速度,否则会加快它们的速度。

Brightness

读取并联

ParticleEmitter.LightInfluence 为 0 时,将发射器发出的光放大。

读取并联

颜色 属性决定了所有活跃粒子在其各自生命周期内的颜色。颜色适用于渲染时的 Texture ,并使用发射器的 Transparency 以及纹理 alpha 。如果发射器有一个值 LightEmission 大于 0 的值,那么更暗的颜色使粒子看起来更透明。

更改此属性会影响发射器发出的所有粒子,现有和未来的都是如此。

当此属性使用渐变 ColorSequence 时,粒子的现有颜色由使用粒子年龄和总生命时间的线性插值决定。例如,如果 2 秒前生成了一颗粒子并有 4 秒的寿命,颜色将是通过 ColorSequence 的 50% 的任何东西。

Drag

读取并联

拖动 属性决定了个人粒子在几秒钟内通过指数衰减失去一半速度的速率。拖动由缩放预期速度从 和从父级继承的任何速度来实现。将此属性设置为负值会导致粒子的速度指数增长。

EmissionDirection

读取并联

发射方向 属性决定从粒子发射的父对象的面(Enum.NormalId)负的 Speed 意味着粒子在相反的方向发射。SpreadAngle 进一步变化发射方向。

如果你将 ParticleEmitter 添加到 Attachment 上,该拥有方向,你可以使用附件本身(Attachment.Orientation)而不使用此属性来旋转附件。

Enabled

读取并联

启用 属性决定粒子是否从发射器发射。将其设置为 false 将阻止更多粒子生成,但现有的任何粒子都会保持活跃,直到它们过期。当您拥有预制的粒子效果,希望在需要发射粒子之前继续禁用时,此属性很有用。

如果您想清除禁用发射器的所有粒子,请调用 Clear() 。然后,如果需要,调用发射器的 Emit() 发射并渲染粒子。

FlipbookFramerate

读取并联

FlipbookFramerate 属性决定翻书纹理在每秒钟框架中动画的速度。像 Lifetime 一样,您可以设置最低和最高范围以随机化翻书的帧率,最高为每秒 30 帧。

FlipbookIncompatible

读取并联

如果 Texture 不兼容翻书,将显示错误消息。翻页书的图像必须为像素大小 8×8、16×16、32×32、64×64、128×128、256×256、512×512 或 1024×1024。

读取并联

FlipbookLayout 属性决定了纹理的布局。它可以是枚举值 Enum.ParticleFlipbookLayout 的任何值:

  • – 禁用翻书功能,并将纹理用作粒子生命周期内的单个静态纹理。
  • 网格2x2 – 4个框架的 2×2 框架用于 4 帧动画。
  • 网格4x4 – 16帧动画的 4×4 框架。
  • 网格8x8 – 64 帧动画的 8×8 框架。
读取并联

翻书模式 属性决定了翻书动画的类型。它可以是枚列 Enum.ParticleFlipbookMode 的任何值:

  • 循环 – 持续播放所有框架,从最后一个框架播放后开始返回到第一个框架。
  • 一击 – 在粒子的生命周期内只播放一次动画。在这个设置下,FlipbookFramerate 属性不适用;相反,帧率由分配给动画的每个粒子的Lifetime平均分割决定。 一击 动画对于清除不重复的动画有用,例如创建一团烟雾然后消失的爆炸。
  • 乒乓球 – 从第一个到最后一帧进行游戏,然后从最后一帧倒计时到第一帧,在整个粒子的 Lifetime 中重复。
  • 随机 – 播放框架以随机顺序,从一个框架融合/交叉到另一个框架。这可能对低帧率下的有机粒子纹理有用,例如星星缓慢地闪烁在微妙不同形状之间。

FlipbookStartRandom

读取并联

FlipbookStartRandom 属性决定每个粒子是否从动画的随机框开始,而不是始终从第一个框开始。一个使用案例是启用此属性并将 FlipbookFramerate 设置为零,导致每个发射的粒子都是从翻书纹理随机选择的静态框架。

Lifetime

读取并联

使用期 属性定义了新发射的粒子的最大和最小年龄。寿命以每个粒子为单位存储,因此如果此值发生变更,现有粒子将继续活跃,直到随机选择的寿命结束。0的使用期将防止粒子发射。

LightEmission

读取并联

发光 属性决定了Texture与颜色之间的混合。值为 0 的值使用普通混合模式,而值为 1 的值使用积累混合。更改时,该属性立即影响发射器拥有的所有粒子,现有和未来的粒子都受影响。

该属性不应与 LightInfluence 混淆,该属性决定了粒子是如何受到环境光影响的。

这个属性不会 导致 粒子照亮周围的环境。为了实现这一目标,请考虑使用一个PointLight

LightInfluence

读取并联

光影响 属性决定了环境光对个人粒子颜色渲染时的影响程度。它必须在 0–1 范围内;超出该范围的值的行为不定义。在 0 时,粒子不受光的影响(保持全亮度);在 1 时,粒子完全受光影响(在完全黑暗中,粒子将是黑色的)。

默认情况下,如果使用 Studio 工具插入,这个值为 1;如果使用 Instance.new() 插入,则为 0。

LocalTransparencyModifier

隐藏
未复制
读取并联

LockedToPart

读取并联

锁定到零件 属性决定是否需要将粒子“黏住”到发射源(即 AttachmentBasePart 对于哪个 ParticleEmitter 是父级)。如果 true , 激活的粒子在父对象移动时会以锁步移动。

或者,考虑使用 VelocityInheritance 属性的值为 1 的值,可能更适合某些效果。

读取并联

方向 属性决定使用哪种方向模式来描述发射器的粒子几何。


<td>粒子行为</td>
</tr>
</thead>
<tbody>
<tr>
<td><b>面向相机</b></td>
<td>标准面向相机的广告牌四格;默认行为。</td>
</tr>
<tr>
<td><b>面向相机世界向上</b></td>
<td>面向相镜头,但仅在垂直向上的世界上旋转<b>Y</b>轴。</td>
</tr>
<tr>
<td><b>速率并行</b></td>
<td>与其移动方向一致的并行。</td>
</tr>
<tr>
<td><b>速率垂直于方向盘</b></td>
<td>与他们的方向移动一致。</td>
</tr>
</tbody>
定向

Rate

读取并联

属性决定发射器在Enabled发射多少粒子每秒。它是频率的反向,意味着 5 的速率每 0.2 秒发射一次粒子。更改时,该属性对任何激活粒子没有影响。

RotSpeed

读取并联

旋速 属性决定了新发射的粒子的随机角速度范围,以度为单位每秒测量。在发射时随机选择角速度,因此更改此属性不会影响活跃的粒子。这个属性,以及Rotation ,影响渲染的粒子图像的角度。

具有非常高角速度的粒子可能会旋转得更慢或根本不旋转,因为旋转角度与软件渲染速度同步。例如,如果粒子每帧都以确切的 360 度旋转,那么旋转将没有明显的变化。

Rotation

读取并联

旋转 属性决定了新发射的粒子的旋转范围,以度为单位。正值在顺时针方向。此属性通常设置为 [0, 360] 以提供完全随机的旋转给新粒子。RotSpeed 还会影响粒子在其生命周期内的旋转。

对此值的更改仅影响新粒子;现有粒子保持在它们最初发射的旋转。

读取并联

形状 属性将发射器的形状设置为方块子、球、圆柱或圆盘。在你做出选择后,你可以调整 ShapeStyle , ShapeInOutShapePartial 属性来进一步调整粒子发射。对于视觉示例,请参阅这里

读取并联

设置粒子是否仅向外发射、仅向内发射或向内向外发射。对于视觉示例,请参阅 这里

ShapePartial

读取并联

根据 Shape 值,此属性执行不同的动作:

  • 对于圆柱,它指定了顶部半径比例。0的值意味着缸体顶部的半径为零,使其成为锥体。1的值意味着缸体没有变形。

  • 对于圆盘,它指定了内径比例。0的值意味着光盘完全关闭(圆圈/椭圆),而 1 的值意味着发射仅发生在光盘的最外边缘。从特定厚度的环发射的值在 0 和 1 之间。

  • 对于球体,它指定发射粒子的半球角度。值 1 表示粒子从整个球体发射;值 0.5 表示粒子从半球发射;值 0 表示粒子仅从北极的单个点发射。

对于视觉示例,请参阅这里

读取并联

将粒子发射设置为体积或仅表面发射。对于视觉示例,请参阅 这里

读取并联

大小 属性决定了所有激活粒子在其个别生命周期内的世界大小。该属性代表每个粒子的方块Texture的尺寸。它是一个类似于 NumberSequence 的工作方式的 Transparency .

粒子的现有尺寸由粒子的年龄和总生命时间线性插值决定,使用这个顺序上的粒子。例如,如果 2 秒前生成了一颗粒子并有 4 秒的寿命,那么尺寸将是通过 NumberSequence 的 50% 的任何东西。对于任何 NumberSequenceKeypoint 具有非零封装值的内容,在发射时,随机值在封装范围内被选择为每个钥匙点的每个粒子。

读取并联

速度 属性决定了新粒子发射的随机速度范围(从最低到最高),以每秒钟的点数计算。每个粒子的速度在发射时被选择,并在 EmissionDirection 中应用。负值导致粒子反向旅行。

请注意,更改 Speed 不会影响活跃的粒子,它们保留已有的任何速度。然而, Acceleration , Drag , 和 VelocityInheritance 可以用来影响活动粒子在其生命周期内的速度。

SpreadAngle

读取并联

散射角 属性决定了粒子可以发射的随机角度。例如,如果 EmissionDirection最佳 (+ Y ), 这 Vector2 描述了随机角度分布在 X / Z 轴上的尺寸,以度。

将一个轴设置为 360 会导致粒子在 圆圈 中发射到所有方向。将两者都设置为 360 会导致粒子在 球体 的所有方向发射。

读取并联

允许颗粒非标准化缩放,在其生命周期内由曲线控制。大于 0 的值导致粒子横向收缩和纵向增长,小于 0 的值导致粒子横向增长和纵向收缩。

Texture

ContentId
读取并联

纹理 属性决定了在粒子上渲染的图像。这张图受到 Color , Transparency , LightInfluenceLightEmission 的影响。透明背景的纹理最适合用于粒子。

TimeScale

读取并联

在 0 和 1 之间的值,用于控制粒子效果的速度。在 1 处,以正常速度运行;在 0.5 处,以半速运行;在 0 处,在时间内冻结。

Transparency

读取并联

透明 属性决定了所有激活粒子在其个别生命周期内的透明度。它与时间过程中影响粒子的方式类似于 Size 。在渲染方面,值 0 完全可见(不透明),值 1 完全不可见(不渲染)。

粒子的现有透明度由粒子的年龄和总生命时间线性插值决定,使用这个顺序。例如,如果 2 秒前生成了一颗粒子并有 4 秒的寿命,透明度将是通过 NumberSequence 的 50% 的任何东西。对于任何 NumberSequenceKeypoint 具有非零封装值的内容,在发射时,随机值在封装范围内被选择为每个钥匙点的每个粒子。

VelocityInheritance

读取并联

速度继承 属性决定了父部件的 Velocity 在发射时被粒子继承的多少。值为 0 的意思是没有速度被继承,而值为 1 的意思是粒子的速度将与父辈一样精确 BasePart .

当与 Drag 结合使用时,粒子发射器可以出现“从移动部件上“掉落”粒子。

WindAffectsDrag

读取并联

如果真实,发射的粒子遵循 Workspace.GlobalWind 矢量力。仅适用于 Drag 属性大于 0。

ZOffset

读取并联

ZOffset 属性决定了粒子的前向后向渲染位置,以螺柱为单位,不改变粒子在屏幕上的大小。更改时,该属性会影响当前和未来的粒子。请注意,该属性接受分数值;它不像 GuiObject.ZIndex (一个整数)。

正向值将粒子靠近镜头,负向值将粒子移开。足够负的值可以导致粒子在父部件内或后面渲染。

方法

Clear

()

清除方法立即清除所有已发射到通过其自然发射(非零在发射器上)或通过发射的所有现有粒子。


返回

()

代码示例

This code sample causes a ParticleEmitter to ParticleEmitter:Emit() particles in bursts of 10 every 2 seconds. It ParticleEmitter:Clear()s any existing particles before doing so.

ParticleEmitter Burst

local emitter = script.Parent
while true do
emitter:Clear()
emitter:Emit(10)
task.wait(2)
end

Emit

()

发射 方法会导致ParticleEmitter立即发射给定数量的粒子。

参数

particleCount: number

要发射的粒子数量。

默认值:16

返回

()

代码示例

This code sample causes a parent ParticleEmitter to ParticleEmitter:Emit() particles based on how far the parent BasePart moves.

Emit Particles Over Distance

local RunService = game:GetService("RunService")
local emitter = script.Parent
local part = emitter.Parent
local PARTICLES_PER_STUD = 3
local lastPosition = part.Position
local distance = 0
local function onStep()
local displacement = part.Position - lastPosition
distance = distance + displacement.magnitude
local n = math.floor(distance * PARTICLES_PER_STUD)
emitter:Emit(n)
distance = distance - n / PARTICLES_PER_STUD
lastPosition = part.Position
end
RunService.Stepped:Connect(onStep)
emitter.Enabled = false

This code sample causes a ParticleEmitter to ParticleEmitter:Emit() particles in bursts of 10 every 2 seconds. It ParticleEmitter:Clear()s any existing particles before doing so.

ParticleEmitter Burst

local emitter = script.Parent
while true do
emitter:Clear()
emitter:Emit(10)
task.wait(2)
end

活动