我的Unity遊戲開發筆記之特效基礎(一):粒子效果面板
如何在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(碰撞模組):
該模組控制粒子如何在場景中與GameObjects相碰撞。 使用第一個下拉選單來定義你的碰撞設定是否適用於plane(平面)或World(世界) 。 如果選擇World,則使用“ 碰撞模式”下拉選單來定義碰撞設定是適用於2D還是3D世界。平面模組:
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(傳送碰撞訊息) | |
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(光源模組):
使用此模組將實時光源新增到一定比例的粒子中。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,此模式下的粒子仍會與速度對齊。