如何在Unity中實現粒子效果?
首先,右鍵點擊 Hierarchy欄,選擇effects->Particle System,這樣你就新建了一個粒子系統,如圖所示:
下面來介紹右側監視器(Inspector)內的內容:
首先是Transform,分別為Position(位置)、Rotation(旋轉)、Scale(縮放),和其他組件一樣,在這里不再贅述。
接下來是與粒子系統有關的值了。
首先看第一個模塊Particle System,
依次為:
Duration(持續時間),設定的值為秒;
Looping(是否循環),勾選則循環播放粒子效果;
Prewarm(預熱),只有勾選了Looping后才能勾選。意思是粒子效果在實際場景中會預先加載,不會切換到場景后粒子效果突然出現而顯得比較突兀,比如火焰效果就會用到Prewarm;
Start Delay(延遲時間),單位為秒,設置粒子效果的延遲播放時間,0則為立即播放;
Start Lifetime(生命時長),粒子效果的生命時長,指粒子從出發點被發射出后能在屏幕上存活的時間。右側下拉菜單能切換Constant(常量)、Curve(曲線)、Random Between Two Constants(在兩個常量之間隨機)、Random Between Two Curves(在兩個曲線之間隨機);
Start Speed(初始速度),控制粒子飛行速度。右側下拉菜單能切換Constant(常量)、Curve(曲線)、Random Between Two Constants(在兩個常量之間隨機)、Random Between Two Curves(在兩個曲線之間隨機);
3D Start Size(是否控制每個粒子每個軸的大小),勾選后會允許你通過調整X、Y、Z軸調整粒子的大小,不勾選的話三個軸一起調整;
3D Start Rotation(是否控制每個粒子每個軸的旋轉),類似3D Start Size;
Randomize Rotation(使一些粒子的自旋方向相反);
Start Color(初始顏色),同樣可以選擇單顏色、區間、梯度;
Gravity Modifier(重力密度),調整粒子所受重力影響的程度,為零則關閉重力效果;
Simulation Speed(模擬速度),調整整個粒子系統的速度;
Delta Time(單位時間),有兩個選項Scaled(標定)和Unscaled(非標定),其中Scaled使用Time Manager中的Time Scale(時間比例)值,而Unscaled則忽略該值。這對於出現在暫停菜單中的粒子效果是有用的;
Scaling Mode(縮放模式),有三個選項Hierarchy(層次結構)、Local(本地)或Shape(形狀)。Local僅應用粒子系統本身的變換,忽略任何父對象。Shape則將比例應用到粒子的起始位置,但不影響它們的大小;
Play On Awake(創建時啟動),如果啟用,粒子系統會在創建時啟動。
Emitter_Velocity(發射速率),有兩種模式可以選擇Rigidbody(剛體)和Transform(變換),分別為使用剛體組件和變換組件來計算速度;
Max Particles(最大粒子數量),允許存在的最大數量;
Auto Random Seed(自動隨機種子),如果啟用,粒子系統每次播放都看起來不同。設置為false時,每次播放都完全一樣;
Stop Action(停止動作),當屬於系統的所有粒子都已完成時,可以使系統執行一個動作。對於循環系統,只有通過腳本停止時才會發生這種情況。
第二個模塊Emission(發射模塊):
Rate over Time(隨時間的速率),每單位時間發射的粒子數量;
Rate over Distance(通過距離的速率),每單位距離發射的粒子數量;
Burst(爆發),產生粒子爆發的效果,通過Time(時間)、Count(數量)、Cycles(周期)、Interval(間隔)四個參數調整。
第三個模塊Shape(形狀模塊):
控制粒子的發射形狀,默認是Cone(錐形),有多種形狀可選,在這里不再贅述。
第四個模塊Velocity over Lifetime(生命周期中的速度模塊):
X,Y,Z:分別控制三個軸方向上的速度,可以創建出向特定方向漂移的粒子。
Space(空間):確定是本地的軸還是世界空間中的軸。
Speed Modifier(速度調節器):延粒子的當前前進方向對粒子的速度應用乘數。
第五個模塊Limit Velocity over Lifetime(限制生命周期中的速度模塊):
Separate Axes(分開軸):將每個軸分為獨立的組件。
Speed(速度):設置粒子的速度限制。
Dampen(限制):超過速度限制時,粒子速度降低的部分。
Drag(拖拽):應用於粒子速度的線性阻力。
Multiply by Size(乘以尺寸):啟用后,較大的粒子受到阻力系數的影響越大。
Multiply by Velocity(乘以速度):啟用后,較快的粒子受到阻力系數的影響越大。
這個模塊用於模擬減緩粒子的空氣阻力是非常有用的。特別是當降低曲線用於降低速度限制時。例如,一場爆炸或煙火最初以極快的速度爆發,但粒子因空氣阻力而迅速減速。
第六個模塊Inherit Velocity(繼承速度模塊):
Mode(模式):指定發射器速度應用於粒子的方式。Current(當前)時發射器當前的速度將應用於每一幀的所有粒子。如果發射器加速或減速,所有的粒子都會加速或減速。Initial(初始)時每個粒子誕生時施加一次發射器的速度,之后發射器的速度將不會影響粒子。
Multiplier(乘數):粒子應繼承的發射器的速度比例。
這種效果對於從移動物體發射粒子非常有用,例如來自汽車的塵埃,來自火箭的煙霧,來自蒸汽火車煙囪的蒸汽,或者粒子最初應以速度的百分比移動的任何情況。當主模塊中的Space設置為World時,該模塊僅對粒子有影響。
第七個模塊Force over Lifetime(生命周期中的力模塊):
X、Y、Z:對每個粒子施加在三個軸上的力。
Space(空間):選擇力是在本地還是世界空間中應用。
Randomize(隨機化):隨機力的方向,會導致更不穩定的運動。
流體在移動時常常受到力的影響。例如,煙霧從周圍的熱空氣中升起,會稍微加速。
第八個模塊Color over Lifetime(生命周期中的顏色模塊):
color(顏色):粒子在整個生命周期中的顏色梯度。梯度條最左邊的點表示粒子壽命的開始,梯度條的右側表示粒子壽命的結束。
許多類型的自然和幻想粒子隨着時間的推移顏色不同,因此這種屬性有很多的用途。例如,發光的煙火在穿越空氣時會冷卻,而魔法可能會爆發出彩虹般的色彩。同樣重要的是alpha(透明度)的變化。當粒子的壽命結束時(如煙花、火花和煙霧顆粒),它們的褪色或消散都是非常普遍的,而漸變非常適合應用於這些場景。
第九個模塊Color by Speed(速度顏色模塊):
Color(顏色):定義在速度范圍內的粒子顏色梯度。
Speed Range(速度范圍):顏色梯度映射到速度范圍的最低端和最高端(速度范圍外的將被映射到端點)。
燃燒時發出的微粒(如火花)在空氣中快速移動時會更明亮地燃燒(暴露在更多空氣中),但隨着速度變慢,會稍微變暗。該模塊可以用來模擬這個效果。
第十個模塊Size over Lifetime(根據生命周期的尺寸模塊):
Separate Axes(分開軸):單獨控制每個軸。
Size(尺寸):定義粒子尺寸在其壽命期間如何變化的曲線。
一些粒子在離開發射點時會典型地改變尺寸,例如氣體、火焰或煙霧顆粒。你可以通過改變粒子的曲線來實現這一點。對於通過燃燒燃料產生的火球,火焰粒子在排放后會趨於膨脹,但隨着燃料用盡和火焰消散會收縮。在這種情況下,曲線會有一個上升的“駝峰”,然后回落到一個較小的尺寸。
第十二個模塊Size by Speed(根據速度的尺寸模塊):
類似於Size over Lifetime和Color by Speed,不再贅述。
第十三個模塊Rotation over Lifetime(根據生命周期的旋轉模塊):
第十四個模塊Rotation by Speed(根據速度的旋轉模塊):
何之前幾個模塊類似,不再贅述。
第十五個模塊External Forces(外部力量模塊):
Multiplier(乘數):適用於風區(wind zone)力的比例值。
地形可以包含影響樹木在景觀上移動的風區。啟用此部分可以讓風區從系統中吹出粒子。Multiplier(乘數)可以讓你縮放風對粒子的影響,因為它們通常受到的風力比樹枝更強。
第十六個模塊Noise(雜波模塊):
使用此模塊添加湍流粒子運動。
參數相對復雜,詳解見Unity文檔。
第十七個模塊Collision(碰撞模塊):
平面模塊:
Planes popup(平面彈出菜單) | 選擇Plane模式。 |
Planes(平面) | 一個可擴展的定義碰撞平面的變換列表。 |
Visualization(可視化) | 選擇碰撞平面線框是否以場景視圖顯示為線框網格或實體平面。 |
Scale Plane(平面縮放) | 用於可視化的平面尺寸。 |
Dampen(損傷) | 碰撞后丟失的粒子速度的一部分。 |
Bounce(彈跳) | 碰撞后從表面反彈的粒子速度的一部分。 |
Lifetime Loss(生命周期損失) | 它碰撞時丟失的粒子總壽命的一部分。 |
Min Kill Speed(最小消失速度) | 碰撞后低於此速度的粒子將從系統中移除。 |
Max Kill Speed(最大消失速度) | 碰撞后超過這個速度的粒子將從系統中移除。 |
Radius Scale(半徑縮放) | 允許您調整粒子碰撞球體的半徑,使其更貼近粒子圖形的視覺邊緣。 |
Send Collision Messages(發送碰撞消息) | 如果啟用,則可以通過OnParticleCollision函數從腳本中檢測粒子碰撞。 |
Visualize Bounds(可視化邊界) | 在“場景”視圖中將每個粒子的碰撞范圍渲染為線框形狀。 |
世界模塊:
World popup(世界彈出菜單) |
選擇世界模式。 |
Collision Mode(碰撞模式) | 3D或2D。 |
Dampen(損傷) | 碰撞后丟失的粒子速度的一小部分。 |
Bounce(彈跳) | 碰撞后從表面反彈的粒子速度的一部分。 |
Lifetime Loss(生命周期損失) | 它碰撞時丟失的粒子總壽命的一部分。 |
Min Kill Speed(最小消失速度) | 碰撞后低於此速度的粒子將從系統中移除。 |
Max Kill Speed(最大消失速度) | 碰撞后超過這個速度的粒子將從系統中移除。 |
Radius Scale(半徑縮放) | 設置2D或3D。 |
Collision Quality(碰撞質量) | 使用下拉菜單來設置粒子碰撞的質量。 這影響有多少粒子可以通過對撞機。 質量較低時,粒子有時會穿過對撞機,但資源密集度較低。 |
High |
當“ 碰撞質量”設置為“ 高”時 ,碰撞總是使用物理系統來檢測碰撞結果。 這是最資源密集的選擇,也是最准確的。 |
Medium (Static Colliders) | 當“ 碰撞質量”設置為“ 中等”(靜態碰撞體)時 ,碰撞使用體素網格來緩存先前的碰撞,以便在以后的幀中更快地重復使用。 請參閱下面的“ 世界沖突” ,了解有關此緩存的更多信息。 “ 中”與“ 低 ”的唯一區別是“粒子系統”每幀查詢物理系統的次數。 中等每幀的查詢次數比低 。 請注意,此設置僅適用於永不移動的靜態對撞機。 |
Low (Static Colliders) | 當“ 碰撞質量”設置為“ 低”(靜態碰撞體)時 ,碰撞使用體素網格來緩存先前的碰撞,以便在以后的幀中更快地重復使用。 請參閱下面的“ 世界沖突” ,了解有關此緩存的更多信息。 “ 中”與“ 低 ”的唯一區別是“粒子系統”每幀查詢物理系統的次數。 中等每幀的查詢次數比低 。 請注意,此設置僅適用於永不移動的靜態對撞機。 |
Collision(碰撞) | 粒子只會碰撞選定圖層上的物體。 |
Max Collision Shapes(最大碰撞形狀) | 粒子碰撞可以考慮多少個碰撞形狀。 過多的形狀被忽略,地形優先。 |
Enable Dynamic Colliders(啟用動態碰撞器) | 允許粒子也與動態對象碰撞(否則只使用靜態對象)。 |
啟用動態碰撞器 | 動態碰撞器是沒有配置為運動學的任何碰撞器(關於碰撞器類型的更多信息參見碰撞器文檔)。 選中此選項可將這些碰撞器類型包含在碰撞中粒子響應的對象集合中。 取消選中此選項,粒子僅對靜態碰撞體發生碰撞。 |
Voxel Size(體素大小) | 體素表示三維空間中規則網格上的值。 當使用中等或低質量沖突時,Unity會緩存網格結構中的沖突。 此設置控制網格大小。 較小的值會提供更高的准確性,但會花費更多的內存,效率也會降低。 注意 :只有在“ 碰撞質量”設置為“ 中”或“ 低”時才能訪問此屬性。 |
Collider Force(對撞機的力) | 在粒子碰撞后對物理碰撞體施加一個力。 這對於將碰撞體推向粒子很有用。 |
Multiply by Collision Angle(乘以碰撞角度) | 當對碰撞體施加力時,根據粒子和碰撞體之間的碰撞角度來縮放力的強度。 掠射角比正面碰撞產生的力更小。 |
Multiply by Particle Speed(乘以粒子速度) | 當對碰撞體施加力時,根據粒子的速度來縮放力的強度。 快速移動的粒子比慢速粒子產生更多的力。 |
Multiply by Particle Size(乘以粒子尺寸) | 當對碰撞體施加力時,根據粒子的大小縮放力的強度。 較大的粒子會比較小的粒子產生更大的作用力。 |
Send Collision Messages(發送碰撞消息) | 選中此項即可通過OnParticleCollision函數檢測腳本中的粒子碰撞。 |
Visualize Bounds(可視化邊界) | 在“場景”視圖中預覽每個粒子的碰撞球體。 |
細節
當其他物體包圍粒子系統時,粒子與這些物體相互作用時,效果通常會更有說服力。 例如,水或碎片應該被堅實的牆壁阻擋,而不是簡單地通過它。 啟用“ 碰撞”模塊后,粒子可能會與場景中的對象發生碰撞。
可以設置粒子系統,使其粒子通過從彈出窗口中選擇世界模式與場景中的任何碰撞器相撞。 也可以通過使用Collides With屬性根據其所在圖層禁用Colliders。 彈出窗口還有一個“平面”模式選項,它允許您將一組平面添加到不需要碰撞器的場景中。 這個選項對於簡單的地板,牆壁和類似的物體是有用的,並且比世界模式有更低的處理器開銷。
當Planes模式啟用時,可以通過Planes屬性添加變換列表(通常為空的GameObjects)。 平面在物體的局部XZ平面內無限延伸,正Y軸表示平面的法向矢量。 為了協助發展,飛機將在場景中顯示為小玩意兒,而不管物體是否具有任何可見的網格物體。 Gizmos可以顯示為線框網格或實體平面,也可以縮放。 但是,縮放比例僅適用於可視化 - 碰撞平面本身通過場景無限延伸。
當碰撞被啟用時,粒子的大小有時是一個問題,因為它的圖形可以被剪切,因為它與一個表面接觸。 這可能導致粒子在停止或彈跳之前出現在表面“下沉”。 “ 半徑比例”屬性通過為粒子定義一個近似的圓形半徑來解決此問題,以其實際大小的百分比表示。 這個大小的信息是用來防止削減和避免陷入效應。
Dampen和Bounce屬性對於粒子表示固體對象時非常有用。 例如,礫石在拋出時傾向於從堅硬的表面反彈,但是在碰撞期間,雪球的顆粒可能會失去速度。 終生損失和最小殺傷速度可以幫助減少碰撞后殘留顆粒的影響。 例如,火球在空中飛行時可能會持續幾秒鍾,但碰撞后,單獨的火焰微粒應該迅速消散。
如果啟用“ 發送碰撞消息”,您還可以檢測腳本中的粒子碰撞。 可以將腳本附加到具有粒子系統的對象,也可以附加到具有對撞機的對象,或者兩者兼有。 通過檢測碰撞,你可以在游戲中使用粒子作為主動對象,例如投射物,魔法和能量提升。 有關更多詳細信息和示例,請參閱MonoBehaviour.OnParticleCollision的腳本參考頁面。
世界碰撞質量
“世界碰撞”模塊具有“ 碰撞質量”屬性,您可以將其設置為“ 高” ,“ 中”或“ 低” 。 當“ 碰撞質量”設置為“ 中等”(靜態碰撞體)或“ 低”(靜態碰撞體)時 ,碰撞使用體素網格(3D網格上的值)來緩存先前的碰撞,以便在之后的幀中快速重用。
該高速緩存由每個體素中的平面組成,其中平面表示該位置處的碰撞表面。 在每個幀上,Unity會檢查緩存中粒子位置的平面,如果有的話,Unity會將其用於碰撞檢測。 否則,它會問物理系統。 如果返回沖突,則將其添加到緩存中,以便在后續幀上進行快速查詢。
這是一個近似值,所以可能會發生一些錯過的碰撞。 您可以減小體素大小值來幫助解決這個問題。 但是,這樣做會使用額外的內存,效率會降低。
“ 中”與“ 低 ”的唯一區別是系統允許查詢物理系統的每幀數量。 Low使每幀的查詢次數少於Medium。 一旦超過每幀預算,只有高速緩存被用於任何剩余的粒子。 這可能會導致錯過的沖突增加,直到緩存更加全面地填充。
第十八個模塊Triggers(觸發器模塊):
當粒子系統與場景中的一個或多個Colliders交互時,它們就能夠觸發回調。 當粒子進入或離開對撞機時,或粒子在對撞機內部或外部的時間內,可以觸發回叫。
您可以使用回調作為一個簡單的方法,當它進入對撞機時(例如,為了防止雨滴穿透屋頂)破壞粒子,或者它可以用來修改任何或所有粒子的屬性。
“觸發器”模塊還提供“ Kill”選項以自動刪除粒子,“ Ignore”選項可忽略碰撞事件,如下所示。
要使用該模塊,首先添加您希望創建觸發器的碰撞器,然后選擇要使用的事件。
你可以選擇觸發一個事件,每當粒子是:
在對撞機的邊界內
在對撞機的邊界之外
進入對撞機的界限
退出對撞機的界限
這里類似於其他觸發器的設置。不再贅述。
第十九個模塊Sub Emitters(子發射器模塊):
讓粒子系統擁有自己的子發射器,用來實現類似復雜煙花的效果。
第二十個模塊Texture Sheet Animation(紋理圖表動畫模塊):
網格模式屬性:

精靈模式屬性:

您可以使用單排模式為粒子創建單獨的動畫序列,並在腳本之間切換動畫。 這對於創建變體或在碰撞后切換到不同的動畫可能很有用。 隨機行選項非常有效,可以打破粒子系統中顯着的規律性(例如,一組重復完全相同的閃爍動畫的火焰對象)。 該選項也可以用於每行單個幀,以生成隨機圖形的粒子。 這可以用來打破像雲這樣的對象的規則性,或者從單個系統產生不同類型的碎片或其他對象。 例如,bl might可能會發射一堆釘子,螺栓,球和其他拋射物,或者撞車的效果可能會導致彈簧,汽車油漆,螺釘和其他金屬碎屑的排放。
UV翻轉是為您的效果添加更多視覺效果的好方法,無需編寫額外的紋理。
從“Mode”下拉列表中選擇“ Sprites”選項,可以定義每個粒子顯示的精靈列表,而不是在紋理上使用常規網格。 使用這種模式,您可以利用Sprite的許多功能,如Sprite Packer,自定義樞軸和每個Sprite框架的不同大小。 Sprite Packer可以幫助您在不同的粒子系統之間共享材質,通過紋理的貼圖,反過來可以通過動態分批提高性能。 使用此模式需要注意一些限制。 最重要的是,所有連接到粒子系統的精靈必須共享相同的紋理。 這可以通過使用多模式Sprite或使用Sprite Packer來實現。 如果為每個Sprite使用自定義軸心點,請注意,不能在它們的框架之間進行混合,因為每個框架之間的幾何圖形會有所不同。 只支持簡單的精靈,而不是9片。 另外請注意,Mesh粒子不支持自定義樞軸或變化的Sprite大小。
第二十一個模塊Lights(光源模塊):

這個模塊使得很容易快速地創建大量的實時燈,而且實時燈具有高性能成本,尤其是在正向渲染模式下。 如果燈光也投下陰影,性能成本更高。 為了防止對排放速率的意外調整,從而導致創建數千個實時燈,應使用Maximum Lights屬性。 創建比目標硬件能夠管理更多的燈光可能會導致速度變慢和無響應。
第二十二個模塊Trails(軌跡模塊):


第二十三個模塊Custom Data(自定義數據模塊):

數據可以采用Vector的形式,最多可包含4個MinMaxCurve組件,或者Color ,這是一個支持HDR的MinMaxGradient 。 使用此數據驅動腳本和着色器中的自定義邏輯。
每個曲線/漸變的默認標簽可以通過點擊它們並輸入上下文名稱來定制。 將自定義數據傳遞給着色器時,了解在着色器內如何使用這些數據很有用。 例如,曲線可以用於自定義alpha測試,或者可以使用梯度向粒子添加第二顏色。 通過編輯標簽,能夠輕易地在用戶界面中記錄每個自定義數據。
第二十四個模塊Renderer(渲染器模塊):

Render Mode讓您選擇幾個二維廣告牌圖形模式和網格模式。 使用三維網格物體,當它們代表堅固的GameObjects(如岩石)時,會給予粒子更多的真實性,並且還可以提高雲,火球和液體的體積感。 當使用2D Billboard圖形時,不同的選項可以用於各種效果。
-
Billboard Mode適用於表示從任何方向(如雲)看起來都相同的粒子。
-
Horizontal Billboard模式可以在粒子覆蓋地面時使用(例如目標指示符和魔法效果),或者當它們是平面飛行或平行於地面浮動的平面物體(例如,手槍)。
-
Vertical Billboard模式保持每個粒子直立和垂直於XZ平面,但允許它圍繞其y軸旋轉。 當使用正交相機時,這可能會有所幫助,並希望粒徑保持一致。
-
Stretched Billboard模式突出顯示了粒子的速度,類似於傳統動畫設備使用的“拉伸和壓扁”技術。 請注意,在“Stretched Billboard”模式下,粒子會對齊到面向相機,並與其速度對齊。 無論速度比例值如何,這種對齊都會發生 - 即使“速度比例”設置為0,此模式下的粒子仍會與速度對齊。