Unity Particle System 粒子系統教學

粒子系統用於製作各種視覺效果,例如火焰、煙霧、下雨、沙塵、爆炸等效果,3D 軟體提供的粒子系統或粒子特效外掛程式通常無法匯入 Unity 遊戲引擎使用,必須使用 Unity 內建的粒子系統來製作。

粒子發射器

執行 [ GameObject > Effect > Particle System ] 在場景中建立一個粒子發射器,選取此粒子發射器時,即可在 Game 視窗預覽粒子發射的模擬效果,右下方的 Particle Effect 面板可控制播放速度。

設定粒子屬性

預設的粒子發器只會向上發射白色粒子。選取粒子後可透過 Inspector 設定粒子屬性製作多種效果。

Duration 粒子發射的時間(請將 Looping 循環關閉,否則粒子仍將持續發射)

Looping 設定粒子是否持續發射,預設為開啟。

Prewarm 預熱模式

Start Delay 發射延遲,若設定為 5 則等待 5 秒後開始發射粒子,預設值為 0 無延遲 。

Start Lifetime 粒子的生命週期,若設定為 5 ,粒子發射後經過 5 秒的時間即消失。

Start Speed 粒子的初始速度

Start Size 粒子的初始大小

Start Rotation 粒子的旋轉

Start Color 粒子的初始顏色(Unity 允許粒子產生顏色隨著時間變化的效果,請參閱 Color over Lifetime 設定

Gravity Modifier 重力修改器,預設值 0 代表粒子不受重力影響而往上移動,數值增加時粒子發射後會向下掉。

Inherit Velocity

Simulation Space 模擬空間

Play On Awake

Max Particles 最大粒子數量,場景中的粒子達到此數量時發射器會暫時停止發射,部份的粒子消失後再開始發射。

Emission 設定粒子的發射率。

Shape 設定粒子發射器的形狀,可選擇圓錐形、球形、方塊等,發狀會改變粒子的射出方向。

Cone 圓錐形發射器:設定 Angle 角度可控制粒子發射為集中或散射。

Sphere 球形發射器

Box 方塊發射器:可設定粒子發射器長度、寬度、高度,適用於製作下雨、下雪… 等大範圍且均勻的粒子發射效果。

Mesh 網面發射器

Velocity over Lifetime

Limit Velocity over Lifetime

Force over Lifetime 粒子生命週期的力場

Color over Lifetime 粒子生命週期的顏色變化

前面介紹的 Start Color 可以製作顏色隨機變化的粒子,但是單一粒子的顏色是固定的,並不會隨著時間發生變化。勾選 Color over Lifetime 並開啟 Gradient Editor 漸層編輯器,上面的控制粒子透明度、下面的控制粒子顏色。

Color by Speed 依速度設定粒子顏色

控制粒子的顏色隨著速度產生變化。先點選 Color 開啟漸層編輯器,設定代表顏色變化的漸層,可透過 Speed Range 設定速度的範圍。

Size over Lifetime 粒子生命週期的大小變化

控制粒子的大小隨著速度產生變化,可選擇固定大小、越來越大、越來越小。

Noise 抖動雜訊

Trails 粒子移動軌跡

Sub Emitters 子發射器

設定此粒子系統的子發射器,請勿選擇自身的 ParticleSystem ,否則會出現 Circular References Detected 的訊息。

 

Collision 粒子碰撞效果

Planes 碰撞平面,當粒子撞到此平面時會彈開。

 

Render Mode 粒子著色模式

Render Mode 設定粒子的著色模式

Material 設定粒子的材質,預設為 Default-Particle 。

Sort Mode 排序模式 None, By Distance, Youngest First, Oldest First

Cast Shadows 設定粒子是否產生陰影,預設為開啟。

Receive Shadows 設定粒子是否接受陰影,預設為開啟。

Max Particle Size 設定最大粒子的尺寸,預設值 0.5

 

設定粒子的著色模式,選擇 Mesh 可讓您將粒子置換為自訂的 3D 物件,用於模擬群體效果(例如傾巢而出的蜂群、大量弓箭射出的效果),並可指定 Mesh 的材質。請注意使用 Mesh 時可能因為系統處理大量多邊形而發生執行效能的問題,建議您執行遊戲測試進行確認(按播放按鈕並點選 Stats 按鈕檢視 Statistics 狀態),若是 Graphics 圖像效能低於 30 FPS 時,可能帶來遊戲畫面流暢度不佳的感受。

 

Unity 官方粒子效果

Unity 官方提供粒子特效資源包,可從 Asset Store 資源商店免費下載。匯入後從 Project 視窗展開 Particle System 資料夾,將粒子特效預製物件拖曳到場景即可,可透過屬性檢視修改粒子效果的屬性。

Water Effect 水的效果

Misc Effects 其他效果(火花、沙漩渦)。

 

粒子效果的互動

如何讓粒子特效在特定的時間點動態生成呢?透過以下 Unity 粒子特效教學使用腳本控制粒子吧!

範例一、玩家按下按鈕時發射煙火

如果將 Fireworks 預製物件直接放在場景,只會持續不停發射煙火。

首先在遊戲場景加入一個物件(例如 Cube 方塊) 當作粒子發射器。

刪除原有的 Fireworks 預製物件,建立一個 C# 腳本,命名為「Fireworks.cs」 並套用到剛才的發射器。

Fireworks.cs 程式碼如下,宣告一 myFireworks 變數,使用 Instantiate 動態生成煙火。

修改 Fireworks.cs 腳本,使用 Input.GetButtonDown 使煙火在玩家按下射擊按鈕時動態生成。

將 Fireworks 煙火預製物件拖曳到發射器物件的 Fireworks Prefab 欄位。

按下 Play 測試遊戲。

快速連按 Fire1 將會施放大量煙火。

 

範例二、玩家碰觸炸彈時產生爆炸

玩家角色的 Tag 標籤設為「Player」,物件名稱也可以重新命名為「Player」。

建立一個 Sphere 圓球製作炸彈並命名為「Bomb」,使用鮮明顏色做為炸彈的的材質。

新增一個 C# 腳本並命為「Bomb.cs」,程式碼如下圖:

將 Explosion 預製物件拖曳到 Explosion Prefab 欄位,因為 Explosion 預製物件的 ExplosionPhysicsForce 腳本的力場,爆炸瞬間將會炸飛附近的遊戲物件。玩家角色或是擁有 Rigidbody 剛體元件的物件將會受到影響。

將 Bomb 拖曳到 Project 專案視窗製作成預製物件,稍後可以輕鬆的重複使用。

拖曳 Bomb 到遊戲場景。

撰寫 Player.cs 腳本,玩家碰撞炸彈時減少 HP 值,炸彈物件套用 Bomb 標籤,需要自行新增。

撰寫 Destroy.cs 腳本,刪除爆炸後殘留的物件。

變數 playerHealth 代表玩家目前的血量,現階段只會顯示在 Inspector 屬性編輯器,玩家是看不到的。

將 Destroy.cs 腳本套用到 Project 專案的 Explosion 預製物件,設定刪除的秒數。

將玩家的 HP 顯示於遊戲畫面,執行 [ GameObject > UI > Text ] 增加遊戲畫面上的文字。

將文字調整到畫面的適當位置。

修改 Player.cs 腳本。

遊戲畫面可以顯示玩家的血量,若您希望以血條的方式顯示,可參閱本站的 Energy Bar Toolkit 教學。