原文:Unreal Engine 4 Particle Systems Tutorial
作者:Tommy Tran
譯者:Shuchang Liu
在本篇教程中,你將學習如何創建粒子特效並使用藍圖進行更新。
粒子特效是構成視覺效果的關鍵組件。它能讓開發者創造如爆炸,煙霧和雨水等特效。
Unreal Engine 4有一個非常壯健,易於使用的粒子特效系統——Cascade。這個系統允許用戶創建模塊化特效,並能隨意地控制粒子行為。
在本篇教程中,你將學習:
- 創建粒子系統
- 設置粒子的速度和體積
- 調整粒子的生成速度
- 使用曲線調整其生成周期的粒子體積
- 使用Cascade設置粒子顏色
- 使用藍圖激活/反激活粒子系統
- 使用藍圖設置粒子顏色
注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:
起步入門
下載示例項目並解壓。進入項目文件夾,雙擊SpaceshipBattle.uproject打開項目。
按下Play運行游戲,長按左鍵射擊,使用W,A,S和D鍵進行移動。
在本篇教程中,我們將創建兩個粒子特效,分別用於飛船推進噴射和飛船爆炸。我們將使用粒子系統來創建特效。
什么是粒子系統?
顧名思義,粒子系統是用於創建並管理粒子的系統。一個粒子本質只是游戲世界里的一個點。通過粒子系統,我們可以控制粒子的出現和表現。
粒子系統包含一個或多個所謂發射器的組件,它們負責生成粒子。
發射器同樣包含所謂模塊的組件,模塊控制發射器粒子的一組參數。比如,一個粒子的材質和初始速度。如下面動圖,是用了兩個模塊定義了紅色圓形材質和隨機速度做出了粒子效果。
我們也可以在粒子的生命周期里修改其顏色。比如下面動圖,粒子的顏色會從紅色漸變成藍色:
現在你已了解什么是粒子系統了,我們先來創建飛船的推進噴射效果。
創建粒子系統
打開ParticleSystems文件夾,點擊Add New\Particle System,將新建資源命名為PS_Thruster並雙擊打開編輯器。
Cascade:粒子系統編輯器
Cascade編輯器由四個主要面板組成:
1.Viewport:該面板用於展示粒子特效的預覽效果。我們可以通過長按右鍵移動鼠標轉動視角,長按右鍵並配合WASD鍵移動鏡頭。
2.Details:顯示你選中的任何組件(發射器,模塊等)的參數。如果沒有任何組件選中,則顯示粒子系統的參數。
3.Emitters:該面板會從左至右的顯示一組發射器列表。每個發射器都會顯示它的模塊列表。
4.Curve Editor:曲線編輯器允許我們可視化地調整模塊曲線數值,不過不是所有模塊參數都支持曲線調節的。
現在,粒子系統正在使用默認粒子材質。
第一步,我們先將粒子材質替換為球形材質。
應用粒子材質
在Emitters面板選中Required模塊。
Required模塊包含如粒子材質和發射器時長等必要參數。每個發射器都有一個Required模塊。
為了修改材質,在Details面板將Material修改成M_Particle。可以看到,粒子的外觀已經變成了橙色圓形。
接着,我們要將粒子系統應用到玩家飛船上。
關聯粒子系統
回到主編輯器並打開Blueprints文件夾,打開BP_Player並找到Components面板。
我們可以使用Particle System組件來使用粒子系統,創建組件並將其命名為ThrusterParticles。確保將其放在Collision組件下。
為了指定具體粒子系統,在Details面板展開Particles設置,將Template設置為PS_Thruster。
接着,設置ThrusterParticles的Location為(-80, 0, 0)。將組件放在飛船的后面。
最后,將Rotation設置為(0, 90, 0),旋轉粒子系統,讓粒子朝遠離飛船的方向噴射。
點擊Compile並回到主編輯器,按下Play運行游戲看看粒子特效的實際效果。
粒子特效已經生效了,但粒子噴射得有點緩慢,也比較小型。我們可以通過設置粒子的初始速度和體積來調整。
設置粒子的速度和體積
首先,我們先設置粒子的初始速度。打開PS_Thruster並選中Initial Velocity模塊。隨后,展開Start Velocity\Distribution。
默認情況下,粒子的初始速度范圍是從(-10, -10, 50)到(10, 10, 100)。
為了粒子以更高的速度朝飛船相反方向噴射,我們所要做的是增加Z軸速度。將Min Z設為300,Max Z設為400。
以下是原始速度跟修改后速度的粒子對比圖:
接着,我們需要設置粒子的初始體積。
設置粒子體積
選中Initial Size模塊,在Details面板展開Start Size\Distribution。
一如Initial Velocity模塊,Initial Size也有最大值最小值隨機范圍。然而,在本例中,我們要將體積設定為常量值。將Distribution字段設置成Distribution Vector Constant。
注意: Distributions字段允許我們指定常量值,范圍值或曲線值。我們也可以通過藍圖來設值。要了解更多,前往查閱Unreal引擎文檔的數據分布(Distributions)部分內容。
隨后,將Constant設置為(70, 70, 70)。以下是體積對比圖:
回到主編輯器並按下Play查看效果。
粒子效果看起來好多了,但粒子間距顯得比較大。這是因為粒子間的生成時間間隔太長了。要解決這個問題,就要增加粒子生成速率。
增加粒子生成速率
為了增加生成速率,我們需要使用Spawn模塊,這個模塊決定了生成器生成粒子的速率。跟Required模塊一樣,每個發射器都有一個Spawn模塊。
打開PS_Thruster並選中Spawn,在Details面板展開Spawn\Rate設置。
將Constant調成50,使得粒子器每秒生成50個粒子。
回到主編輯器並點擊Play。
如你所見,粒子特效現在看起來更像噴氣拖尾了。為了讓效果看起來更加逼真,我們還可以讓粒子隨時間縮小。
隨時間縮小粒子效果
打開PS_Thruster並找到Emitters面板。
要縮小粒子效果,我們可以使用Size By Life模塊。這個模塊使用了一個乘數來控制粒子體積。在面板空白處右鍵點擊彈出選中菜單並選中Size\Size By Life。
添加完后,粒子效果體積不會有任何變化。因為乘數默認設置為1。為了縮小粒子體積,我們需要調整模塊的曲線來逐漸減小體積乘數。不過首先第一點疑問,什么是曲線?
什么是曲線?
曲線是一系列點的集合。每個點包含兩個信息:位置和值。
當你擁有多於兩個點時,你就擁有了一條線段。下面是一條簡單線性的曲線。點A是個坐標點,其數值為0。點B也是個坐標點,其數值為1。
如果你在線段的任意位置取點采樣,效果跟線性插值是一樣的。比如,如果你在采樣在圖中坐標1處取點采樣,你就會得到0.5的數值。
如果你創建了一條遞增下降的曲線,所獲得的返回值就會逐漸變小。Size By Life模塊所需要的就是這樣一條曲線。
現在,我們就要在Cascade系統里創建一條這樣的曲線。
修改模塊曲線
選中Size By Life並觀察Details面板,隨后,展開Life Multiplier\Distribution\Constant Curve\Points。在這里可以看到Life Multiplier曲線的坐標點列表。
In Val代表曲線點的位置,對於Size By Life來說,數值0代表粒子生命周期的開始,數值1代表粒子生命周期的結尾。
為了逐步減小體積乘數,我們需要減小第二個點的Out Val值。將point 1的Out Val改為(0,0,0)。這樣就能將粒子的體積逐漸改為0.
你可以使用曲線編輯器可視化查看Life Multiplier。具體做法是點擊Size By Lift模塊的圖表圖標.
這樣我們就能在曲線編輯器里添加Life Multiplier了,為了調整視圖畫面到適合大小,點擊編輯器里的Fix按鈕。
如你所見,在粒子生存周期里,體積乘數從1降低到0.
回到主編輯器,按下Play。
這個粒子效果現在看起來就非常像噴射煙火了!我們最后還要做一件事就是增加粒子的顏色變化。
增加顏色變化
要用Casade設置粒子的顏色,我們需要正確地設置粒子材質,在Materials文件夾打開M_Particle。
現在,可以看到材質已經設置了顏色。為了使用粒子系統的顏色設置,我們需要用上ParticleColor節點。
首先,刪除連接Emissive Color的節點。接着,添加ParticleColor節點並進入如下連接:
如果你還想控制粒子的可見性,如下圖一樣添加Multiply節點:
![]()
點擊Apply並關閉M_Particle。
為了設置粒子顏色,我們要使用Initial Color模塊。
Initial Color模塊
打開PS_Thruster並添加Initial Color模塊。我們可以看到如下的Color二級列表。
要增加顏色變化,我們需要指定顏色范圍,要實現這點,就要用上Distribution設置。
選中Initial Color並打開Details面板,展開Start Color設置並將Distribution改為Distribution Vector Uniform。這樣我們就可以可視化指定顏色范圍了。
在本例中,顏色范圍應由橙色過渡到紅色,因此我們將Max設置為(1.0, 0.0, 0.0),將Min設置為(1.0, 0.35, 0.0)。
如果我們觀察Viewport,會發現顏色變化非常異樣。
這是由於Color Over Life模塊恆定地把顏色設置為白色。為了解決這個問題,選中Color Over Life並按下Delete鍵。粒子模塊列表現在看起來應該是這樣的:
關閉PS_Thruster並在主編輯器按下Play運行游戲,看看這些噴射焰火!
接下來,我們要學習如何根據飛船移動與否來切換激活粒子系統。
切換激活粒子系統
要判讀飛船是否處於移動狀態,我們可以取而判斷玩家有沒有按下任何移動按鍵。
打開BP_Player並找到Event Tick節點,在節點末端做如下設置:
讓我們看看這些節點做了什么事情:
- 檢查了MoveUp和MoveRight軸按鍵映射情況,如果兩者都為0,說明玩家目前沒有按任何移動按鍵。
- Branch分支返回true(玩家沒有按鍵),反激活ThrusterParticles。
- Branch分支返回false(玩家有按鍵),激活ThrusterParticles。
點擊Compile並關閉BP_Player,按下Play運行游戲在嘗試體會靜止,移動的特效差別。
現在有趣的部分來了:創建爆炸特效!
創建爆炸特效
與其重新創建新的粒子特效,我們直接復制噴射推進特效。在ParticleSystems文件夾,右鍵點擊PS_Thruster並選中Duplicate,將復制資源重命名為PS_Explosion並雙擊打開。
對於爆炸特效而言,所有的粒子都應該在同一時間生成,這被稱之為(爆破發射)burst-emitting。
創建爆破
首先,我們需要將生成速率設置為0,因為我們不需要使用默認的生成效果,選中Spawn模塊並將Spawn\Rate\Distribution\Constant設置為0。
接着,我們需要讓發射器知道我們想要一個爆破效果,滑動到Burst部分設置,點擊+號圖標給Burst List添加新元素。
每組元素都包含三個字段:
- Count:要生成的粒子數,將其設置為20。
- Count Low:如果該值設置為大於等於0,所生成的粒子數量在Count Low到Count之間,將其保留為-1。
- Time:生成粒子的時機。數值為0表示在發射器生命周期的一開始就生成,數值為1表示在生命周期最后生成,將其保留為0.0。
注意:你可以在Required模塊找到發射器的時長設置,具體通過Duration部分設置的Emitter Duration字段來設置。
這意味着發射器會在粒子特效伊始就生成20個粒子。
為了使其看起來更像爆炸,我們需要設置粒子的爆炸方向讓其四射散開。
粒子四散效果
由於本例是一個垂直視角游戲,我們只需要指定X和Y軸的速度。選中Initial Velocity模塊並展開Start Velocity\Distribution設置,將Max設置為(1000, 1000, 0),將Min設置為(-1000, -1000, 0)。
通過指定一個負數到正數的范圍,粒子就會從發射器中間往四周四散飛去。
接着,我們需要設置發射器的播放循環次數。
設置發射器循環
發射器默認上會無限循環播放,這對於火焰或者煙霧效果而言非常適合,但爆炸特效卻只應該播放一次。
選中Required模塊並找到Duration設置,將Emitter Loops設置為1 。
現在,試試實現敵機死亡時的爆炸特效吧!
敵機死亡生成爆炸特效
回到主編輯器並打開Blueprints文件夾,打開BP_Enemy並找到OnDeath事件。
為了生成粒子特效,我們可以使用Spawn Emitter at Location節點。創建節點並連接Destroy Actor節點。
現在,將Emitter Template設置為PS_Explosion。
最后,創建GetActorLocation節點並將其於Location引腳相連。
現在,當敵機死亡時,它會在敵機位置生成PS_Explosion實例。
點擊Compile並返回主編輯器。按下Play運行游戲射殺其他敵機吧。
看看這些爆炸效果!接着,我們要豐富細節,將爆炸特效顏色改成給敵機顏色一樣。
修改爆炸顏色為敵機顏色
為了使用敵機顏色,我們需要從藍圖中獲取該信息。幸運地是,Cascade有一個Distribution字段類型可以干這件事。
打開PS_Explosion並選中Initial Color模塊,將Start Color\Distribution設置為Distribution Vector Particle Parameter。
這樣就能設置任何藍圖里有的參數,我們將Parameter Name設置為PrimaryColor。
爆炸特效我們希望能用上敵機上的兩種顏色。為了使用第二種顏色,我們需要多一個發射器。右鍵點擊 Emitter面板的空白處,在彈出菜單中選擇Emitter\Duplicate and Share Emitter,這樣就能復制多一個發射器。
你可以留意到現在每個模塊旁邊都有一個+號設置。使用Duplicate and Share Emitter而非Duplicate,其效果就是在原有的發射器上進行鏈接,而非復制。你在一個發射器上做任意改動,都會連帶影響另一個發射器。當你想一同修改所有發射器的某個參數,比如說體積時,這個特性非常有用。
我們這個模塊唯一想單獨修改的屬性是Initial Color。然而,如果我們修改了其中一個發射器,另一個發射器也會受到影響。這種情況下,我們不希望某些參數收到鏈接影響,最簡單的實現方法就是刪除Initial Color模塊,並創建一個新模塊。
注意:截至目前,Unreal並沒有提供什么正式方法取消模塊間的鏈接。
選中新建的Initial Color並設置Start Color\Distribution為Distribution Vector Particle Parameter。接着,設置Parameter Name為SecondaryColor。
截至目前,粒子特效已經設置好了。關閉PS_Explosion。
接着,我們需要通過藍圖設置這兩個變量。
通過藍圖設置粒子特效參數變量
打開BP_Enemy並在Spawn Emitter at Location節點后添加如下高亮節點:
這樣就可以設置PS_Explosion里的兩個變量了。
現在,我們需要設置下這兩個參數名字。將第一個Set Color Parameter節點的Parameter Name字段設為PrimaryColor,將第二個Set Color Parameter節點的Parameter Name字段設為SecondaryColor。
最后,我們需要設置具體的顏色數值。為了簡化教程步驟,我以提前將數值存儲在PrimaryColor和SecondaryColor這兩個變量里了。如下圖進行變量連接:
最后我們就得到如下連接:
最后回顧下整個過程:
- 當敵機死亡時,它會在當前位置生成PS_Explosion實例
- 設置PS_Explosion的PrimaryColor參數
- 設置PS_Explosion的SecondaryColor參數
點擊Compile並關閉BP_Enemy。按下Play運行游戲開始射殺敵機,享受粒子盛宴吧!
看看這些養眼的粒子。看看你能不能給主角死亡加上爆炸效果吧!
- 打開BP_Player並找到OnDeath事件
- 在Sequence節點的Then 1引腳添加Spawn Emitter at Location節點,將Emitter Template設置為PS_Explosion
- 創建GetActorLocation節點並連接Spawn Emitter at Location節點的Location引腳
- 創建Set Color Parameter節點並連接Spawn Emitter at Location節點,將Parameter Name設置為PrimaryColor,並將PrimaryColor變量連接到Param引腳
- 創建Set Color Parameter節點並連接第一個Set Color Parameter節點,將Parameter Name設置為SecondaryColor,並將SecondaryColor變量連接到Param引腳
后續學習
你可以在這里下載完整項目。
你相信到目前為止你對Cascade系統的了解僅僅只是皮毛嗎?我們創建了一些有趣的特效,不過仍有很多模塊沒有嘗試過。我建議你學習更多有關TypeData模塊的內容。利用這個模塊,你可以創建諸如劍影拖尾,閃電甚至傾盆大雨的特效!
如果你還想繼續學習引擎其他內容,點擊下篇教程,將講解有如何上手使用AI。

