狠狠撸

狠狠撸Share a Scribd company logo
2D粒子特效應用
Revised on December 23, 2019
? 粒子系統
? 粒子系統模組屬性設定
? 使用粒子製作星空效果
? 使用粒子製作爆炸煙霧效果
? 使用粒子製作火焔噴射效果
? 太空射擊應用實例
? 粒子系統(particles system)可用來模擬火焰、爆炸、煙霧、沙塵、
下雪等特效
? https://docs.unity3d.com/Manual/PartSysMainModule.html
? 粒子系統包含三個要素
? 特效粒子
? 粒子的生成速度、力矩、持續時間、顏色等
? 發射器
? 控制粒子噴發的方向及模式
? 渲染
? 在粒子上套用不同材質,以呈現不同視覺效果
粒子系統
2
? 選單命令GameObject>Effects>Particle System
建立粒子物件 1/2
3
? 粒子系統為3D物件,在2D遊戲中會投影到XY平面
建立粒子物件 2/2
4
? Duration:粒子發射週期,預設為5秒
? Looping:是否循環發射
? Prewarm
啟用預熱機制,即執行時畫面已產生部份粒子
? Start Delay:起始延遲時間,等待指定時間之
後才開始發射粒子,預設為0秒
? Start Lifetime:粒子的生命期,單位秒
? Constant:每個粒子生命期固定,預設為5秒
? Curve:曲線變化
基本設定 1/6
5
? Random Between Two Constants:兩常數之間的隨機值
? Random Between Two Curves:兩曲線之間的隨機值
? Start Speed:粒子的初始速度
? Constant、Curve、Random Between Two
Constants、Random Between Two Curves
? 3D Start Size
勾選時可個別控制粒子每?軸向的尺?變化
? Start Size:粒子大小
? Constant、Curve、Random Between Two
Constants、Random Between Two Curves
? 3D Start Rotation
勾選時可個別控制粒子每?軸向的旋轉?度
? Start Rotation:設定粒子旋轉?度
基本設定 2/6
6
? Randomize Rotation Direction
? 使部份粒子隨機朝反方向旋轉,0.0~1之間
? Start Color:粒子顏色,預設為白色
? Color:單色
? Gradient:由指定的漸層顏色循環套用
? Random Between Two Colors
由二種指定顏色隨機混色
? Random Between Two Gradients
由二種指定漸層顏色隨機混色
? Gravity Modifier
粒子受的重力,預設值0
基本設定 3/6
7
顏色漸層
透明度漸層
? Simulation Space:粒子的座標系統
? World:使用世界座標
? Local(預設值):使用物件本身座標
? Simulation Speed:粒子系統更新速度
? Delta Time:
當設定為Scaled,表示套用專案設定中的Time
項目設定。與遊戲暫停後再執行的效果有關
? Scaling Mode:粒子縮放模式
? Hierarchy:結合父元件Scale調整
? Local(預設值):粒子自身Scale調整
? Shape:只套用到初始位置的粒子
基本設定 4/6
8
? Play On Awake:進入遊戲立即撥放粒子特效
? Emitter_Velocity
粒子系統計算發射速度所採用的方式
? Rigidbody、Transform
? Max Particles:最多出現的粒子數上限
? Auto Random Seed:自動亂數種子
? Stop Action:設定
當所有粒子都已經完成時,所要執行的動作
? None、Disable、Destroy、Callback
基本設定 5/6
9
? Culling Mode
粒子超出螢幕顯示區時,是否暫停粒子系統模擬
? Automatic、Pause And Catch-up、Pause、
Always Simulate
? Ring Buffer Mode
是否使粒子保持活動狀態,直到達到粒子數上限
為止,而不是在其壽命到期時移除粒子,新粒子
將回收最舊的粒子
? Disabled、Pause Until Replaced、Loop
Until Replaced
基本設定 6/6
10
? Emission模組用來調整粒子發射率
? Rate over Time:單位時間發射的粒子數量
? Rate over Distance :單位移動距離發射的粒子數量 (Simulation
Space必須為世界座標,且Particle物件移動時才會發射粒子)
? Bursts:設定粒子爆發時間點
Emission模組設定
11
新增爆發時間點
? Shape模組用來設定粒子發射器形狀
? Sphere
球形發射器,粒子朝各方向均勻發射
Shape模組設定 1/12
12
? Hemisphere
半球形發射器,粒子朝單?面均勻發射
Shape模組設定 2/12
13
? Cone
錐形發射器(預設值),粒子由錐形底部發射,均勻分佈在錐體邊界內
Shape模組設定 3/12
14
? Donut
甜甜圈形發射器,
Shape模組設定 4/12
15
? Box
立方體形發射器,由立方體形內部向Y軸方向均勻發射
Shape模組設定 5/12
16
? Mesh
使用指定的網格模型發射粒子
Shape模組設定 6/12
17
發射點
網格物件
? Mesh Renderer
依附在場景遊戲物件的網格渲染器
Shape模組設定 7/12
18
? Skinned Mesh Renderer
使用依附在場景遊戲物件的Skinned Mesh Renderer
Shape模組設定 8/12
19
? Sprite
使用指定的Sprite圖片發射粒子
? Sprite Render
使用依附在場景遊戲物件的Sprite渲染器
Shape模組設定 9/12
20
? Circle
從圓的軸心線發射。粒子只在圓的平面移動
Shape模組設定 10/12
21
? Edge
由線段上發射。預設粒子朝-Z方向發射
Shape模組設定 11/12
22
? Rectangle
由矩形上發射。預設粒子朝Y方向發射
Shape模組設定 12/12
23
? Velocity over Lifetime模組
用來控制發射到消失期間的粒子速度變化,可產生粒子往特定方向漂
移效果
? Limit Velocity over Lifetime模組
用來控制粒子發射到消失期間減速方式
? Speed 速限值
? Dampen 當粒子還度超過速限值時的減速因子,介於0到1之間,0表示
不減速
粒子系統其它模組設定 1/5
24
? Inherit Velocity模組
用來控制粒子的速度如何隨時間推移對其父對象的運動做出反應
? Mode: Initial、Current
? Multiplier: Constant、Curve、Random Between Two Constants、
Random Between Two Curves
? Force over Lifetime模組
用來控制粒子發射到消失期間所受的外力
? Constant、Curve、Random Between Two Constants、Random
Between Two Curves
? Space: Local、World
粒子系統其它模組設定 2/5
25
? Color over Lifetime模組
用來控制粒子發射到消失期間,粒子顏色及透明度的變化
? Gradient、Random Between two Gradients
? Color over Speed模組
用來控制粒子在不同速度下的顏色及透明度
? Gradient、Random Between two Gradients
粒子系統其它模組設定 3/5
26
? Size over Lifetime模組
用來控制粒子發射到消失期間,粒子大小變化情形
? Curve、Random Between Two Constants、Random Between Two
Curves
? 用來控制粒子在不同速度下,粒子大小變化情形
? Curve、Random Between Two Constants、Random Between Two
Curves
粒子系統其它模組設定 4/5
27
? Rotation over Lifetime模組
用來控制粒子發射到消失期間,粒子旋轉?度變化情形
? Constant、Curve、Random Between Two Constants、Random
Between Two Curves
? Rotation over Speed模組
用來控制粒子在不同速度下,粒子旋轉?度變化情形
? Constant、Curve、Random Between Two Constants、Random
Between Two Curves
? 其它模組參考Unity說明文件
粒子系統其它模組設定 5/5
28
? 選單命令Assets>Import Package>ParticleSystems
使用PacticleSystems套件 1/2
29
? PacticleSystems的預製物件
使用PacticleSystems套件 2/2
30
? 太空可上下移動及發射飛彈
? 發射擊中隕石會爆炸並產生煙塵
粒子特效應用練習
31
? 新增2D專案
? 選擇使用16:9顯示比例,將預設場景以Outerspace名稱存檔
? 將Main Camera元件之Camera Size設定為5.4
? 在Assets下建立以下資料夾
? Sprites
? Scripts
? Prefabs
? Animations
? Textures
? Materials
? Audio
建立專案
32
? 在Sorting Layer新增Background及Effect圖層
? 在Layers新增Player圖層
? 選單命令Edit> Project Settings…
? 設定圖層碰撞
管理圖層
33
? 將圖片素材滙入到AssetsSprites資料夾
? aerolite.png、explosion.png、missile.png、outerspace.png、
spacecraft.png
? 將explosion.mp3滙入到AssetsAudio資料夾
? 將part_star_mat.mat滙入到AssetsMaterials資料夾
? 將part_star_dff.tif滙入到AssetsTextures資料夾
匯入專案資源
34
missile.png aerolite.pngspacecraft.png
part_star_dff.tif
? 將Spritesouterspace加到場景,命名為Outerspace
? Position(x, y, z) = (0, 0, 0)
? Sorting Layer = Background
? 設定上下邊界
? Background加入Box Collider 2D
? Offset(X, Y) = (0, 5.7)
? Size(X, Y) = (19.2, 0.5)
? Background加入Box Collider 2D
? Offset(X, Y) = (0, -5.7)
? Size(X, Y) = (19.2, 0.5)
製作外太空背景 1/7
35
? 選單命令GameObject> Effects> Particle System加入粒子系統,
命名為starfield
? 重置Transform
? 基本設定
? Duration = 100
? 勾選PreWarm
? Start Lifetime = Random Between 75 to 125
? Start Speed = Random Between 0.2 to 0.4
? Start Size = Random Between 0.1 to 0.16
? Start Rotation = Random Between 0 to 360
? Start Color = Random Between RGB(63, 68, 79) to RGB(255,
218, 191)
? Scaling Mode = Shape
製作外太空背景 2/7
36
? Max Particles = 200
? Culling Mode = Pause and Catch-up
? Emission模組
? Rate over Time = 1
? Shape模組
? Shape = Box
? Position = (10.5, 0, 0)
? Rotation = (0, -90, 90)
? Scale = (11, 1, 1)
製作外太空背景 3/7
37
? Color over Lifetime模組
? Color = Gradient
? Size over Lifetime模組
? Size = Curve
製作外太空背景 4/7
38
? Rotation over Lifetime模組
? Angular Velocity = Random Between 0 to 45
? Renderer模組
? Material = Assets/Materials/part_star_mat.mat
? 取消勾選Apply Active Color Space
? Cast Shadows = On
? 勾選Receive Shadows
? 拖曳starfield成為Background子物件
製作外太空背景 5/7
39
? 複製?份starfield,命名為far_starfield
? 基本設定
? Start Lifetime = Random Between 150 to 200
? Start Speed = Random Between 0.1 to 0.2
? Start Size = Random Between 0.05 to 0.1
? Start Rotation = Random Between 0 to 360
? Start Color = Random Between RGB(132, 144, 156) to
RGB(255, 255, 255)
? Max Particles = 500
? Emission模組
? Rate over Time = 2
製作外太空背景 6/7
40
? Shape模組
? Shape = Box
? Position = (10.5, 0, 0)
? Rotation = (0, -90, 90)
? Scale = (11, 1, 1)
製作外太空背景 7/7
41
? 將Spritesaerolite加入場景,命名為Aerolite
? Position(x, y, z) = (8, -1, 0)
? Scale(x, y, z) = (0.8, 0.8, 1)
? 加入碰撞器
在Aerolite物件加入Circle Collider 2D
? Offset(X, Y) = (0.2, 0)
? Radius = 1.3
建立隕石
42
? 裁切explosion為爆炸動畫分鏡
? 將圖片類型(Sprite Mode)設定為Multiple
? 開啟Sprite Editor,將explosion分割為分鏡圖片
製作爆炸動畫 1/3
43
? 選單命令GameObject>2D Object>Sprite,命名為Explosion
? 重置Transform
? Sorting Layer = Effect
? 選取explosion_0~explosion_13,將分鏡圖片全部拖曳到
Explosion物件上,建立explosion動畫
? 取消勾選explosion動畫之Loop Time屬性
製作爆炸動畫 2/3
44
? 在explosion物件加入ExplosionControl程式腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExplosionControl : MonoBehaviour {
[SerializeField]
private float lastingTime = 1.2f;
void Start() {
Destroy (gameObject, lastingTime);
}
void Update() {
}
}
? 將Explosion物件拖曳到AssetsPrefabs資料夾,製作成預製物件
? 刪除場景上的Explosion物件
製作爆炸動畫 3/3
45
? 選單命令GameObject>Create Empty,命名為Smoke
? 重置Transform
? 選單命令GameObject> Effects> Particle System建立粒子物件
? Rotation (x, y, z) = (-90, 0, 0)
? 取消勾選Looping
? Start Lifetime:2~3
? Start Speed:0.5~1
? Start Size:0.2~0.5
? Start Color:Gradient
? Shape模組
? Angle:10
? Radius:0.1
製作爆炸煙塵 1/3
46
? Particle System無法在屬性窗格設定Sorting Layer,因此必須透
過程式腳本調整Sorting Layer
? 在Particle System物件加入ParticleControl程式腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParticleControl : MonoBehaviour {
void Start() {
this.GetComponent<Renderer>().sortingLayerName = "Effect";
this.GetComponent<Renderer>().sortingOrder = 1;
}
void Update() {
}
}
? 拖曳Particle System成為Smoke子物件
製作爆炸煙塵 2/3
47
? 在Smoke物件加入SmokeControl程式腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SmokeControl : MonoBehaviour {
[SerializeField]
private float lastingTime = 8.0f;
void Start() {
Destroy (gameObject, lastingTime);
}
void Update() {
}
}
? 將Smoke物件拖曳到AssetsPrefabs資料夾,製作成預製物件
? 刪除場景上的Smoke物件
製作爆炸煙塵 3/3
48
? 開啟Sprite Editor,將missile座標參考點設定到彈頭位置
? 將missile加入場景,命名為Missile
? Position設定為 (x, y, z) = (0, 0, 0)
? Scale設定為 (x, y, z) = (0.15, 0.15, 1)
? Layer = Player
? Order in Layer = 1
製作飛彈物件 1/8
49
pivot
? 在Missile物件加入Capsule Collider 2D碰撞器
? Offset(X, Y) = (-3.7, 0)
? Size(X, Y) = (5, 3)
? Direction = Horizontal
? 勾選Is Trigger
? 在Missile物件加入2D剛體,Gravity Scale設為0
製作飛彈物件 2/8
50
? 選單命令GameObject> Effects> Particle System加入粒子系統,
命名為engines,做為飛彈噴射火焰效果
? 重置Transform
? Rotation(X, Y, Z) = (0, -90, 0)
? 基本設定
? Duration = 5
? Start Lifetime = Random Between 0.1 to 0.5
? Start Speed = Random Between 0.5 to 1.5
? Start Size = 0.33
? Scaling Mode = Shape
? Culling Mode = Pause and Catch-up
製作飛彈物件 3/8
51
? Emission模組
? Rate over Time = 50
? Shape模組
? Shape = Box
? Size = (0, 0, 0)
? Inherit Velocity模組
? Multiplier = 0.5
? Force over Lifetime模組
? Z = 2
? Color over Lifetime模組
? Color = Gradient
製作飛彈物件 4/8
52
? Size over Lifetime模組
? Size = Curve
? Renderer模組
? Render Mode = Streched Billboard
? Length Scale = -1
? Material = Assets/Materials/part_star_mat.mat
? 取消勾選Apply Active Color Space
? Cast Shadows = On
? 勾選Receive Shadows
? 拖曳engines成為missile子物件
? Position(X, Y, Z) = (-2.65, 0, 0)
製作飛彈物件 5/8
53
? 在Missile物件加入MissileControl程式腳本,飛彈移動及爆炸效果
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MissileControl : MonoBehaviour {
[SerializeField]
private int speed = 3;
[SerializeField]
private Transform explosion = null;
[SerializeField]
private Transform smoke = null;
[SerializeField]
private AudioClip AC = null;
void Start() {
GetComponent<Rigidbody2D>().velocity = new Vector2(speed, 0.0f);
}
製作飛彈物件 6/8
54
private void OnBecameInvisible() {
Destroy(this.gameObject);
}
void OnTriggerEnter2D(Collider2D other) {
if (other.name == "Aerolite") {
Destroy (gameObject);
Instantiate (explosion, this.transform.position, Quaternion.identity);
AudioSource.PlayClipAtPoint(AC, this.transform.position);
Instantiate (smoke, this.transform.position, Quaternion.identity);
}
}
}
製作飛彈物件 7/8
55
? 拖曳PrefabsExplosion預製物件到Missile Control元件之
Explosion欄
? 拖曳PrefabsSmoke預製物件到Missile Control元件之Smoke欄
? 拖曳Audioexplosion.mp3音效到Missile Control元件之AC欄
? 將Missile物件拖曳到AssetsPrefabs資料夾,製作成預製物件
製作飛彈物件 8/8
56
? 將Spritesspacecraft加到場景,命名為Spacecraft
? Position(X, Y, Z) = (-8, 0, 0)
? Scale(X, Y, Z) = (0.3, 0.3, 1)
? Layer = Player
? 加入Rigidbody 2D
? Gravity Scale = 0
? 加入Capsule Collider 2D
? Size(X, Y) = (6, 4)
建立太空船物件 1/4
57
? 選單命令GameObject> Create Empty,更名為Emitter
? 重置Transform
? 拖曳Emitter成為Spacecraft子物件,調整Emitter位置到
Spacecraft之前端
? Position(X,Y,Z) = (3.7, -1, 0)
建立太空船物件 2/4
58
? 加入SpacecraftControl程式腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpacecraftControl : MonoBehaviour {
[SerializeField]
private float speed = 3.0f;
[SerializeField]
private Transform missile = null;
[SerializeField]
private Transform emitter = null;
private Rigidbody2D rigidbody2D = null;
void Start() {
rigidbody2D = this.GetComponent<Rigidbody2D> ();
}
建立太空船物件 3/4
59
void Update() {
if (Input.GetMouseButtonDown(0))
Instantiate(missile, emitter.transform.position, Quaternion.identity);
}
void FixedUpdate() {
// float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector2 movement = new Vector2 (0, moveVertical);
rigidbody2D.AddForce (movement * speed);
}
}
建立太空船物件 4/4
60
? 拖曳PrefabsMissile預製物件到Spacecraft Control元件之
Missile欄
? 拖曳Spacecraft之Emitter子物件到Spacecraft Control元件之
Emitter欄
? 測試遊戲專案
建立太空船物件 3/3
61

More Related Content

Unity遊戲程式設計 - 2D粒子特效應用