Unreal Engine 4 系列教程 Part 8:粒子系統教程

原文:Unreal Engine 4 Particle Systems Tutorial
做者:Tommy Tran
譯者:Shuchang Liuhtml

在本篇教程中,你將學習如何建立粒子特效並使用藍圖進行更新。web

粒子特效是構成視覺效果的關鍵組件。它能讓開發者創造如爆炸,煙霧和雨水等特效。app

Unreal Engine 4有一個很是壯健,易於使用的粒子特效系統——Cascade。這個系統容許用戶建立模塊化特效,並能隨意地控制粒子行爲。編輯器

在本篇教程中,你將學習:ide

  • 建立粒子系統
  • 設置粒子的速度和體積
  • 調整粒子的生成速度
  • 使用曲線調整其生成周期的粒子體積
  • 使用Cascade設置粒子顏色
  • 使用藍圖激活/反激活粒子系統
  • 使用藍圖設置粒子顏色

注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:svg

起步入門

下載示例項目並解壓。進入項目文件夾,雙擊SpaceshipBattle.uproject打開項目。模塊化

按下Play運行遊戲,長按左鍵射擊,使用WASD鍵進行移動。oop

在本篇教程中,咱們將建立兩個粒子特效,分別用於飛船推動噴射和飛船爆炸。咱們將使用粒子系統來建立特效。學習

什麼是粒子系統?

顧名思義,粒子系統是用於建立並管理粒子的系統。一個粒子本質只是遊戲世界裏的一個點。經過粒子系統,咱們能夠控制粒子的出現和表現。動畫

粒子系統包含一個或多個所謂發射器的組件,它們負責生成粒子。

發射器一樣包含所謂模塊的組件,模塊控制發射器粒子的一組參數。好比,一個粒子的材質和初始速度。以下面動圖,是用了兩個模塊定義了紅色圓形材質和隨機速度作出了粒子效果。

咱們也能夠在粒子的生命週期裏修改其顏色。好比下面動圖,粒子的顏色會從紅色漸變成藍色:

如今你已瞭解什麼是粒子系統了,咱們先來建立飛船的推動噴射效果。

建立粒子系統

打開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

接着,設置ThrusterParticlesLocation(-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設爲300Max 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 1Out 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節點,在節點末端作以下設置:

讓咱們看看這些節點作了什麼事情:

  1. 檢查了MoveUpMoveRight軸按鍵映射狀況,若是二者都爲0,說明玩家目前沒有按任何移動按鍵。
  2. Branch分支返回true(玩家沒有按鍵),反激活ThrusterParticles
  3. 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添加新元素。

每組元素都包含三個字段:

  1. Count:要生成的粒子數,將其設置爲20
  2. Count Low:若是該值設置爲大於等於0,所生成的粒子數量在Count LowCount之間,將其保留爲-1
  3. 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\DistributionDistribution Vector Particle Parameter。接着,設置Parameter NameSecondaryColor

截至目前,粒子特效已經設置好了。關閉PS_Explosion

接着,咱們須要經過藍圖設置這兩個變量。

經過藍圖設置粒子特效參數變量

打開BP_Enemy並在Spawn Emitter at Location節點後添加以下高亮節點:

這樣就能夠設置PS_Explosion裏的兩個變量了。

如今,咱們須要設置下這兩個參數名字。將第一個Set Color Parameter節點的Parameter Name字段設爲PrimaryColor,將第二個Set Color Parameter節點的Parameter Name字段設爲SecondaryColor

最後,咱們須要設置具體的顏色數值。爲了簡化教程步驟,我以提早將數值存儲在PrimaryColorSecondaryColor這兩個變量裏了。以下圖進行變量鏈接:

最後咱們就獲得以下鏈接:

最後回顧下整個過程:

  1. 當敵機死亡時,它會在當前位置生成PS_Explosion實例
  2. 設置PS_ExplosionPrimaryColor參數
  3. 設置PS_ExplosionSecondaryColor參數

點擊Compile並關閉BP_Enemy。按下Play運行遊戲開始射殺敵機,享受粒子盛宴吧!

看看這些養眼的粒子。看看你能不能給主角死亡加上爆炸效果吧!

  1. 打開BP_Player並找到OnDeath事件
  2. Sequence節點的Then 1引腳添加Spawn Emitter at Location節點,將Emitter Template設置爲PS_Explosion
  3. 建立GetActorLocation節點並鏈接Spawn Emitter at Location節點的Location引腳
  4. 建立Set Color Parameter節點並鏈接Spawn Emitter at Location節點,將Parameter Name設置爲PrimaryColor,並將PrimaryColor變量鏈接到Param引腳
  5. 建立Set Color Parameter節點並鏈接第一個Set Color Parameter節點,將Parameter Name設置爲SecondaryColor,並將SecondaryColor變量鏈接到Param引腳

後續學習

你能夠在這裏下載完整項目。

你相信到目前爲止你對Cascade系統的瞭解僅僅只是皮毛嗎?咱們建立了一些有趣的特效,不過仍有不少模塊沒有嘗試過。我建議你學習更多有關TypeData模塊的內容。利用這個模塊,你能夠建立諸如劍影拖尾,閃電甚至傾盆大雨的特效!

若是你還想繼續學習引擎其餘內容,點擊下篇教程,將講解有如何上手使用AI。

相關文章
相關標籤/搜索