unity 粒子系統
技術標籤:筆記
新建一個粒子系統:Component > Effects > Particle System
屬性面板:
Duration: 持續時間。即把迴圈關了以後,持續多少秒停止發射粒子
Looping: 迴圈
Prewarm: 預熱。粒子系統在遊戲開始前就開始計算
Start Delay: 延遲。即延遲多少秒開始發射粒子
Start Lifetime: 初始化粒子生命週期
1 Constant: 常數
2 Curve: 曲線
3 Random Between Two Constants: 兩個常數之間的隨機數
4 Random Between Two Curves: 兩條曲線之間的隨機數
Start Speed : 初始化粒子速度
3D Start Size : 3D初始化大小(可以對X、Y、Z進行調節)
Start Size : 初始化大小
3D Start Rotation: 3D初始化旋轉
Start Rotation: 初始化旋轉
Randomize Rotation: 隨機旋轉
Start Color:初始化顏色
Gravity Modifier: 重力
Simulation space: 粒子隨本地座標還是世界座標移動
Simulation Speed: 粒子速度(可以改變粒子的速度,粒子的移動距離卻不會改變。與“Start Speed”不同,初始化速度越快能移動的距離越遠)
Scaling Mode: 拓展模式
Play On Awake: 執行時喚醒
Max Particles: 發射最大粒子數
Random Seed: 隨機種子,不同的數值,發射粒子的表現略有不同
Auto Random Seed: 自動隨機種子。
預設展開的是粒子系統的初始化模組:此模組為固有模組,不可刪除或者禁用。該模組定義了粒子初始化時的持續時間、迴圈方式、發射速度、大小等一些列基本的引數。
Emission:發射模組
控制粒子的發射速率(Rate),在粒子持續時間內,可實現某個特定時間生成大量粒子的效果,可模擬爆炸效果生成一大堆的粒子。
Shape :形狀模組
定義粒子發射器的形狀,可提供沿形狀表面法線或隨機方向的初始力,並控制粒子的發射位置以及方向。
Velocity over Lifetime :生命週期速度模組
制著生命週期內每一個粒子的速度,對有著物理行為的粒子效果更明顯,但對於那些簡單視覺行為效果的粒子,如煙霧飄散效果以及與物理世界幾乎沒有互動行為的粒子,此模組的作用就不明顯了。
Limit Velocity over lifetime :生命週期速度限制模組
控制粒子在生命週期內的速度限制以及速度衰減,可以模擬類似拖動的效果。若粒子的速度超過設定的限定值,則粒子速度之會被鎖定到該限定值。
Force over Lifetime:生命週期作用力模組
控制粒子在生命週期內的受力情況。
Color over lifetime:生命週期顏色模組
控制粒子在生命週期內的顏色變化。
Color by Speed:顏色的速度控制模組
此模組可讓每個粒子的顏色根據自身的速度變化而變化。
Size Over Lifetime :生命週期粒子大小模組
控制每一顆粒子在其生命週期內的大小變化。
Size by Speed:粒子大小的速度控制
此模組可讓每顆粒子的大小根據自身的速度變化而變化。
Rotation Over Lifetime :生命週期旋轉模組
控制每顆粒子在生命週期內的旋轉速度變化。
Rotation by Speed :旋轉速度控制模組
此模組可讓每顆粒子的旋轉速度根據自身速度的變化而變化。
External Forces:外部作用力模組
此模組可控制風域的倍增係數。
14.Collision:碰撞模組
可為每顆粒子建立碰撞效果,目前只支援平面碰撞,該碰撞對於簡單的碰撞檢測效率非常高。
Sub Emitters:子發射器模組
此模組可時粒子在出生、消亡、碰撞等三個時刻生成其他的粒子。
TextureSheet Animation:序列幀動畫紋理模組
可對粒子在其生命週期內的UV座標產生變化,生成粒子的UV動畫。可以將紋理劃分成網格,在每一格存放動畫的一幀。同時也可以將文理劃分為幾行,每一行是一個獨立的動畫。需要注意的是,動畫所使用的紋理在Renderer模組下的Material屬性中指定。
Renderer:粒子渲染器模組
該模組顯示了粒子系統渲染相關的屬性。
程式碼控制粒子系統發射:
private ParticleSystem _particle;
private void Awake()
{
_particle = GetComponent<ParticleSystem>();
}
//播放粒子系統
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
//播放
_particle.Play();
}
if (Input.GetKeyDown(KeyCode.Mouse1))
{
//暫停
_particle.Pause();
}
if (Input.GetKeyDown(KeyCode.Space))
{
//停止
_particle.Stop();
}
}