一个 粒子发射器 是一个特殊对象,可以向世界发射可定制的 2D 粒子。要发射和渲染粒子,必须被父辈到一个 BasePart 或一个 Attachment 在这样的部分内。当作为父辈到一个 BasePart 时,粒子会随机生成在零件的边界盒或 形状 内;当作为父辈到一个 Attachment 时,粒子会从附件的位置生成。
发射器当 Enabled 具有非零 Rate 时自动发射粒子,或者手动调用 Emit 方法时。使用非零 Speed 粒子向外或向内运动,取决于 ShapeInOut 属性。
默认情况下,粒子面向相镜头,但 Orientation 可以修改以尊重粒子速度。
在粒子的 Lifetime 期间,它们可以根据 Color 和 Size 来更改外观。他们的运动可以随着Drag和Acceleration属性的变化而改变,也可以像父辈一样移动,当它们是LockedToPart或有非零VelocityInheritance时。
了解有关创建和自定义粒子发射器的更多信息,请参阅粒子发射器。
代码示例
这段比较长的代码示例显示了如何设置 ParticleEmitter 的每个属性,包括 NumberRange、NumberSequence 和 ColorSequence 属性。以下是粒子发射器应该在每个属性设置后的外观。尝试与不同属性的游戏,以自定义效果的外观!
local emitter = Instance.new("ParticleEmitter")
-- 粒子数量 = 速率 * 有效期
emitter.Rate = 5 -- 每秒钟的粒子
emitter.Lifetime = NumberRange.new(1, 1) -- 粒子应存活多久(分钟,最大)
emitter.Enabled = true
-- 视觉属性
emitter.Texture = "rbxassetid://1266170131" -- 白色戒指的透明图像
-- 对于颜色,使用颜色序列关键点建立颜色序列
local colorKeypoints = {
-- API:颜色序列钥点.新(时间,颜色)
ColorSequenceKeypoint.new(0, Color3.new(1, 1, 1)), -- 在 t=0 时,白色
ColorSequenceKeypoint.new(0.5, Color3.new(1, 0.5, 0)), -- 在 t=.5 时,橙色
ColorSequenceKeypoint.new(1, Color3.new(1, 0, 0)), -- 在 t=1 时,红色
}
emitter.Color = ColorSequence.new(colorKeypoints)
local numberKeypoints = {
-- API:numberSequenceKeypoint.new(时间,大小,封装)
NumberSequenceKeypoint.new(0, 1), -- 在 t=0 时,完全透明
NumberSequenceKeypoint.new(0.1, 0), -- 在 t=.1 时,完全不透明
NumberSequenceKeypoint.new(0.5, 0.25), -- 在 t=.5 时,大多是不透明的
NumberSequenceKeypoint.new(1, 1), -- 在 t=1,完全透明
}
emitter.Transparency = NumberSequence.new(numberKeypoints)
emitter.LightEmission = 1 -- 当粒子重叠时,乘以它们的颜色以变得更亮
emitter.LightInfluence = 0 -- 不受世界照明影响
-- 速度属性
emitter.EmissionDirection = Enum.NormalId.Front -- 向前发射
emitter.Speed = NumberRange.new(0, 0) -- 零速度
emitter.Drag = 0 -- 对粒子运动不施加拖动
emitter.VelocitySpread = NumberRange.new(0, 0)
emitter.VelocityInheritance = 0 -- 不要继承父辈速度
emitter.Acceleration = Vector3.new(0, 0, 0)
emitter.LockedToPart = false -- 不要将粒子锁定到父级
emitter.SpreadAngle = Vector2.new(0, 0) -- 在任何轴上没有分布角度
-- 模拟属性
local numberKeypoints2 = {
NumberSequenceKeypoint.new(0, 0), -- 在 t=0 时,0 的尺寸
NumberSequenceKeypoint.new(1, 10), -- 在 t=1 时,10 的尺寸
}
emitter.Size = NumberSequence.new(numberKeypoints2)
emitter.ZOffset = -1 -- 稍微落后于实际位置渲染
emitter.Rotation = NumberRange.new(0, 360) -- 从随机旋转开始
emitter.RotSpeed = NumberRange.new(0) -- 在模拟期间不要旋转
-- 创建附件,使粒子从同一个位置发射(环形)
local attachment = Instance.new("Attachment")
attachment.Position = Vector3.new(0, 5, 0) -- 将附件向上移动一点
attachment.Parent = script.Parent
emitter.Parent = attachment
概要
属性
确定所有激活粒子的全球轴加速,以每秒方块计算单位。
当 ParticleEmitter.LightInfluence 为 0 时,将发射器发出的光放大。
确定每个活跃粒子在其个别生命周期内的颜色。
决定粒子通过指数衰减失去一半速度的速率。
确定粒子发射的对象的面。
决定粒子是否从发射器发出。
决定翻书纹理在每秒钟的框架中动画的速度。
如果 Texture 不兼容翻书,将显示错误消息。
决定翻书纹理的布局。必须为 None、Grid2x2、Grid4x4 或 Grid8x8。
决定翻书动画的类型。必须为循环、一击、乒乓或随机。
决定是否在每个粒子都随机选择的框架开始动画,而不是始终从帧零开始。
为新发射的粒子定义随机年龄范围。
决定多少粒子的颜色与它们后面的颜色融合。
决定多少粒子受环境光的影响。
决定粒子是否与它们发射出的零件一起坚固移动。
指定如何定向粒子。
决定每秒发射的粒子数。
确定发射的粒子的角速度范围,以每秒度为单位。
确定新发射的粒子的旋转范围以度数。
将发射器的形状设置为方块子、球、筒或圆盘。
设置粒子是否仅向外发射、仅向内发射或向两个方向发射。
影响气缸、圆盘、球体和盒子形状的粒子发射。
将粒子发射设置为体积或仅表面发射。
确定世界尺寸在个别粒子的生命周期内。
确定新粒子发射的随机速度范围(从最小到最大),以每秒钟的点数计算。
决定粒子可以随机发射的角度,以度为单位。
允许颗粒非标准化缩放,在其生命周期内由曲线控制。
决定在粒子上渲染的图像。
在 0 和 1 之间的值,控制粒子效果的速度。
决定颗粒在其个别生命周期内的透明度。
决定发射时,粒子从父元素辈中继承了多少速度。
是否发射的粒子遵循 Workspace.GlobalWind 矢量力。
确定粒子的前向后向渲染位置;用于控制粒子在上部/下部渲染什么。
属性
Acceleration
加速属性决定了粒子在其生命周期内的 变化。它使用 Vector3 来确定全球 X / Y / Z 轴上的加速,并以每秒钟的 studs 计算。更改时,该属性会影响发射器发出的所有粒子,现有和未来的都包括在内
加速会使向量点在相反的 EmissionDirection 中减慢粒子速度,否则会加快它们的速度。
Color
颜色 属性决定了所有活跃粒子在其各自生命周期内的颜色。颜色适用于渲染时的 Texture ,并使用发射器的 Transparency 以及纹理 alpha 。如果发射器有一个值 LightEmission 大于 0 的值,那么更暗的颜色使粒子看起来更透明。
更改此属性会影响发射器发出的所有粒子,现有和未来的都是如此。
当此属性使用渐变 ColorSequence 时,粒子的现有颜色由使用粒子年龄和总生命时间的线性插值决定。例如,如果 2 秒前生成了一颗粒子并有 4 秒的寿命,颜色将是通过 ColorSequence 的 50% 的任何东西。
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
FlipbookLayout 属性决定了纹理的布局。它可以是枚举值 Enum.ParticleFlipbookLayout 的任何值:
- 无 – 禁用翻书功能,并将纹理用作粒子生命周期内的单个静态纹理。
- 网格2x2 – 4个框架的 2×2 框架用于 4 帧动画。
- 网格4x4 – 16帧动画的 4×4 框架。
- 网格8x8 – 64 帧动画的 8×8 框架。
FlipbookMode
翻书模式 属性决定了翻书动画的类型。它可以是枚列 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
锁定到零件 属性决定是否需要将粒子“黏住”到发射源(即 Attachment 或 BasePart 对于哪个 ParticleEmitter 是父级)。如果 true , 激活的粒子在父对象移动时会以锁步移动。
或者,考虑使用 VelocityInheritance 属性的值为 1 的值,可能更适合某些效果。
Orientation
方向 属性决定使用哪种方向模式来描述发射器的粒子几何。
<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>
定向 |
---|
RotSpeed
旋速 属性决定了新发射的粒子的随机角速度范围,以度为单位每秒测量。在发射时随机选择角速度,因此更改此属性不会影响活跃的粒子。这个属性,以及Rotation ,影响渲染的粒子图像的角度。
具有非常高角速度的粒子可能会旋转得更慢或根本不旋转,因为旋转角度与软件渲染速度同步。例如,如果粒子每帧都以确切的 360 度旋转,那么旋转将没有明显的变化。
Rotation
旋转 属性决定了新发射的粒子的旋转范围,以度为单位。正值在顺时针方向。此属性通常设置为 [0, 360] 以提供完全随机的旋转给新粒子。RotSpeed 还会影响粒子在其生命周期内的旋转。
对此值的更改仅影响新粒子;现有粒子保持在它们最初发射的旋转。
形状 属性将发射器的形状设置为方块子、球、圆柱或圆盘。在你做出选择后,你可以调整 ShapeStyle , ShapeInOut 和 ShapePartial 属性来进一步调整粒子发射。对于视觉示例,请参阅这里。
ShapePartial
根据 Shape 值,此属性执行不同的动作:
对于圆柱,它指定了顶部半径比例。0的值意味着缸体顶部的半径为零,使其成为锥体。1的值意味着缸体没有变形。
对于圆盘,它指定了内径比例。0的值意味着光盘完全关闭(圆圈/椭圆),而 1 的值意味着发射仅发生在光盘的最外边缘。从特定厚度的环发射的值在 0 和 1 之间。
对于球体,它指定发射粒子的半球角度。值 1 表示粒子从整个球体发射;值 0.5 表示粒子从半球发射;值 0 表示粒子仅从北极的单个点发射。
对于视觉示例,请参阅这里。
Size
大小 属性决定了所有激活粒子在其个别生命周期内的世界大小。该属性代表每个粒子的方块Texture的尺寸。它是一个类似于 NumberSequence 的工作方式的 Transparency .
粒子的现有尺寸由粒子的年龄和总生命时间线性插值决定,使用这个顺序上的粒子。例如,如果 2 秒前生成了一颗粒子并有 4 秒的寿命,那么尺寸将是通过 NumberSequence 的 50% 的任何东西。对于任何 NumberSequenceKeypoint 具有非零封装值的内容,在发射时,随机值在封装范围内被选择为每个钥匙点的每个粒子。
Speed
速度 属性决定了新粒子发射的随机速度范围(从最低到最高),以每秒钟的点数计算。每个粒子的速度在发射时被选择,并在 EmissionDirection 中应用。负值导致粒子反向旅行。
请注意,更改 Speed 不会影响活跃的粒子,它们保留已有的任何速度。然而, Acceleration , Drag , 和 VelocityInheritance 可以用来影响活动粒子在其生命周期内的速度。
SpreadAngle
散射角 属性决定了粒子可以发射的随机角度。例如,如果 EmissionDirection 是 最佳 (+ Y ), 这 Vector2 描述了随机角度分布在 X / Z 轴上的尺寸,以度。
将一个轴设置为 360 会导致粒子在 圆圈 中发射到所有方向。将两者都设置为 360 会导致粒子在 球体 的所有方向发射。
Texture
纹理 属性决定了在粒子上渲染的图像。这张图受到 Color , Transparency , LightInfluence 和 LightEmission 的影响。透明背景的纹理最适合用于粒子。
Transparency
透明 属性决定了所有激活粒子在其个别生命周期内的透明度。它与时间过程中影响粒子的方式类似于 Size 。在渲染方面,值 0 完全可见(不透明),值 1 完全不可见(不渲染)。
粒子的现有透明度由粒子的年龄和总生命时间线性插值决定,使用这个顺序。例如,如果 2 秒前生成了一颗粒子并有 4 秒的寿命,透明度将是通过 NumberSequence 的 50% 的任何东西。对于任何 NumberSequenceKeypoint 具有非零封装值的内容,在发射时,随机值在封装范围内被选择为每个钥匙点的每个粒子。
VelocityInheritance
速度继承 属性决定了父部件的 Velocity 在发射时被粒子继承的多少。值为 0 的意思是没有速度被继承,而值为 1 的意思是粒子的速度将与父辈一样精确 BasePart .
当与 Drag 结合使用时,粒子发射器可以出现“从移动部件上“掉落”粒子。
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.
local emitter = script.Parent
while true do
emitter:Clear()
emitter:Emit(10)
task.wait(2)
end
Emit
发射 方法会导致ParticleEmitter立即发射给定数量的粒子。
参数
要发射的粒子数量。
返回
代码示例
This code sample causes a parent ParticleEmitter to ParticleEmitter:Emit() particles based on how far the parent BasePart moves.
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.
local emitter = script.Parent
while true do
emitter:Clear()
emitter:Emit(10)
task.wait(2)
end