ParticleEmitter

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

A 粒子發射器 是一種特殊對象,可以向世界發射可定制的 2D 粒子。要發射和渲染粒子,必須被父處理到一個 BasePartAttachment 內的部分中。當擁有父輩到 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

平行讀取

加速 屬性決定粒子在生命週期內如何變化Speed。它使用 Vector3 來確定全球 X / Y / Z 軸上的加速,並以每秒厘米計算。當變更時,此屬性會影響發射器所發出的所有粒子,現有和未來的皆然。

加速會使粒子減速,如果向量點在相反的 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框架。
  • 網格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

平行讀取

鎖定到零件 屬性決定粒子是否"黏"到發射源(即 或 對於 的父級)。如果 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

對此值的變更只影響新粒子;現有粒子維持原本發射時的旋轉。

平行讀取

形狀 屬性將發射器的形狀設置為方塊子、球、筒或碟子。在你做出選擇之後,你可以調整ShapeStyleShapeInOutShapePartial屬性,以進一步調整粒子發射。對於視覺示例,請參閱這裡

平行讀取

設置粒子是否僅向外發射、僅向內發射,或兩者都向前發射。對於視覺示例,請參閱 這裡

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

活動