【Unity】9.3 粒子系統生成器詳解

分類:Unity、C#、VS2015 緩存

建立日期:2016-05-02 dom

1、簡介

上一節已經介紹過了在Unity 5.x中兩種建立粒子效果的方式(方式一、方式2)。 編輯器

這一節咱們主要學習第2種方式的基本概念和用法。 ide

Unity 5.x提供的新版粒子系統生成器(Particle System)也叫Shuriken粒子系統,該生成器採用模塊化管理,個性化的粒子模塊,配臺粒子曲線編輯器,使用戶很容易就能創做出各類繽紛複雜的粒子效果。 模塊化

一、粒子系統檢視器 oop

粒子系統檢視器 (Particle System Inspector) 每次顯示一個粒子系統(當前選擇的粒子系統),以下圖所示: 性能

image

經過使用模塊,單獨的粒子系統能夠顯示各類複雜的行爲。 學習

它們也能夠經過分組到粒子效果 (Particle Effects) 進行擴展。 優化

二、粒子系統編輯器 動畫

單擊檢視器中的【打開編輯器 (Open Editor)...】按鈕,就會打開粒子編輯器窗口(Particle System Editor),該窗口中用於顯示場景樹中相同根下的全部粒子系統。

在粒子系統編輯器 (Particle System Editor)窗口中,能夠在【顯示所有 (Show All)】和【顯示選定 (Show Selected)】之間切換。【顯示所有 (Show: All)】將渲染整個粒子效果。【顯示選定 (Show: Selected)】只渲染選定的粒子系統。

選定的粒子系統將在粒子編輯器中用藍色邊框高亮顯示,也在層級視圖 (Hierarchy) 中顯示爲藍色。點擊粒子系統左上角的圖標,能夠在層級視圖 (Hierarchy View) 和粒子編輯器 (Particle Editor) 中更改選擇。若是要多選,按住Ctrl鍵再用鼠標單擊選擇便可。

三、場景視圖編輯

建立和編輯粒子系統時,既能夠利用檢視器 (Inspector)直接修改,也能夠利用擴展的粒子系統編輯器窗口來修改。不論採用哪一種方式,所作的更改都會反映在場景視圖 (SceneView) 中。

在場景視圖中,還有一個預覽面板 (Preview Panel),利用它可在「編輯模式 (Edit Mode)」下經過播放 (play) 、暫停 (pause) 、中止 (stop)和清除播放時間 (scrubbing playback time)等操做來控制當前選擇的粒子效果的播放:

image

拖動【播放時間(Playback Time)】標籤,便可執行清除播放時間 (Scrubbing play back time) 操做。全部播放 (Playback) 控件都有默認的快捷鍵,另外還能夠在偏好設置窗口 (Preferences window) 中自定義快捷鍵。

四、曲線編輯器

在檢視器視圖中,還能夠直接利用粒子系統曲線編輯器編輯粒子效果。

檢視器中粒子系統模塊的不少屬性描述了「值」隨「時間」變化的狀況。該變化可用 MinMax 曲線 (MinMax Curves) 來描述。這些時間動畫屬性(例如大小和速度)的右邊都有一個下拉菜單。例如,單擊【Start Lifetime】最右側的下拉菜單,可選擇:

image

含義以下:

(1)Constant--常量

該屬性值不隨時間變化。

(2)Random Between Two Gradients--在兩個漸變中隨機選取值

該屬性值經過漸變 (RGBA) 隨時間變化,並在漸變編輯器指定的兩個值中隨機選取。

(3)Curve--曲線

該屬性值根據曲線編輯器 (Curve Editor) 中規定的曲線隨時間變化。

當選擇【Curve】時,就會當即在【Particle System Curves】中顯示MinMax曲線:

image

曲線中隨機生成的值在最小、最大麴線之間,屬性值會沿着生成的曲線隨時間變化。好比,你能夠利用上粒子系統曲線編輯器(Particle System Curves)將隨機值改成下面的形式:

image

編輯器中的 x 軸表明時間從 0 到持續時間 (Duration) 屬性指定的值,y 軸表明動畫屬性對應每一個時間點的值。y 軸範圍可在編輯器右上角的數字字段中調節。

也能夠分別單擊編輯器(上面的圖)中不一樣的曲線,觀察場景中粒子效果的變化。

注意,【-】將刪除當前選中曲線,【+】將優化曲線(即最多使用 3 個鍵就可將曲線變成參數化曲線)。

五、Velocity over Lifetime和Limit Velocity over Lifetime

若是勾選【Velocity over Lifetime】和【Limit Velocity over Lifetime】(見下圖):

image

那麼,你還能夠用更直觀的方式用拖放修改值去更改這些參數(注意更改參數時播放預覽界面中粒子效果的變化),例如:

image

六、顏色和線性漸變

對於處理顏色的屬性,粒子系統 (Particle System) 採用顏色和線性漸變編輯器 (Color and Gradient Editor)讓你設置該屬性的值。它和曲線編輯器的工做方式類似。

基於顏色的屬性在右邊有一個下拉菜單,能夠從菜單中選擇:

  • 線性漸變 (Gradient):
  • 在兩個線性漸變中隨機 (Random Between Two Gradients)選擇取值:漸變 (RGBA) 隨時間變化,並在漸變編輯器指定的兩個值中隨機選取。
image

漸變 (RGBA) 隨時間而變化,可在漸變編輯器中編輯。

線性漸變編輯器 (Gradient Editor) 用來描述漸變隨時間而變化的範圍。它繪製了顏色(RGB 空間,在底部由標記描述)和 Alpha(在頂部由標記描述)。

能夠經過點擊靠近矩形頂部的區域來爲 Alpha 值添加新標記,經過點擊靠近底部的區域來爲顏色 (Color) 添加新標記。這些標記能夠沿着時間線直接拖動。

若是選擇 Alpha 標記,則能夠經過拖動 alpha 值來編輯該標記的值。

若是選擇顏色 (Color ) 標記,可雙擊該標記或點擊顏色條來修改顏色。

要刪除標記,直接將其拖至屏幕之外就好了。

2、粒子系統模塊

粒子系統最開始默認只啓用少數模塊。添加或刪除模塊可更改粒子系統的行爲。

能夠經過按下粒子系統檢視器 (Particle System Inspector) 右上角的 (+) 號來添加新模塊。這會彈出以下圖所示的選擇菜單,在菜單中選擇但願啓用的模塊便可。

image

注意,因爲這個截圖中勾選了【Show All Modules】選項,所以它會將全部模塊都顯示出來(所有都容許),因此沒法再勾選某個模塊。若是你只但願選擇某一個或多個模塊(僅容許選擇的模塊起做用),取消勾選【Show All Modules】,而後再勾選對應的模塊就好了。

下面介紹粒子系統在檢視器視圖中顯示的各模塊的含義。

一、初始化模塊(Particaal System)

該模塊始終存在,沒法刪除或禁用。

Duration:持續時間。粒子系統 (Particle System) 發射粒子的持續時間。

Looping:循環。粒子系統 (Particle System) 是否循環。

Prewarm:預熱。只可預熱循環系統,這意味着,粒子系統 (Particle System) 在遊戲一開始時就發射粒子,就像已發射了一個週期的粒子。

Start Delay:初始延遲。粒子系統 (Particle System) 發射粒子以前等待的延遲,以秒爲單位。注意,預熱的循環系統不能使用初始延遲。

Start Lifetime:初始生命。粒子存活時間,以秒爲單位(請參閱 MinMaxCurve)。

Start Speed:初始速度。粒子發射時的速度(請參閱 MinMaxCurve)。

Start Size:初始大小。粒子發射時的大小(請參閱 MinMaxCurve)。

Start Rotation:初始旋轉。粒子發射時的旋轉(請參閱 MinMaxCurve)。

Start Color:初始顏色。粒子發射時的顏色(請參閱 MinMaxGradient)。

Gravity Modifier:重力修改器。粒子在存活期間受到的重力影響。

Inherit Velocity:繼承速度。控制粒子速率的因素應繼承粒子系統 (Particle System) 的轉換(對於移動中的粒子系統)。

Simulation Space:模擬空間。模擬本地座標系或世界座標系中的粒子系統 (Particle System)。

Play On Awake:喚醒時播放。若是啓用該項,粒子系統 (Particle System) 會在其建立時自動開始播放。

Max Particles:最大粒子數。粒子系統 (Particle System) 可發射的最大粒子數量。

二、發射模塊(Emission)

image

控制粒子發射的速率,容許在某個時刻生成大量粒子(粒子系統 (Particle System) 存續期間)。在爆炸時很是有用,那時須要一次建立大量粒子。

速率 (Rate):單位時間 (Time)(每秒)或單位距離 (Distance)(每米)發射的粒子數量(請參閱 MinMaxCurve)。

突發 (Bursts)(僅限時間 (Time) 選項下):添加粒子系統 (Particle System) 存續期間發生的粒子爆發。

時間和粒子數量 (Time and Number of Particles):指定發射規定數量粒子的時間(在存續期內,以秒爲單位)。用「+」和「-」調節爆發數量。

三、形狀模塊(Shape)

image

Shape:定義發射器的形狀,單擊右側的下拉框可選擇:球體 (Sphere)、半球體 (Hemishpere)、圓錐 (Cone)、立方體 (Box) 、網格 (Mesh)。可沿着表面法線或隨機方向施加初始力。

(1)球體(Sphere)

半徑 (Radius) 球體的半徑。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

從外殼發射 (Emit from Shell) 從球體外殼發射。若是禁用此項,粒子將從球體內部發射。

隨機方向 (Random Direction) 粒子是在隨機方向仍是沿着球體表面法線方向發射?

(2)半球體 (Hemisphere)

半徑 (Radius) 半球體的半徑。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

從外殼發射 (Emit from Shell) 從半球體外殼發射。若是禁用此項,粒子將從半球體內部發射。

隨機方向 (Random Direction) 粒子是在隨機方向仍是沿着半球體表面法線方向發射?

(3)圓錐 (Cone)

角度 (Angle) 圓錐的角度。若是角度爲 0,粒子將在一個方向發射。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

半徑 (Radius) 發射點的半徑。若是值接近零,則將從一點發射。若是值超過 0,將建立一個帽子狀的圓錐,粒子從一個圓盤而非一個點發射。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

長度 (Length) 發射量的長度。僅從內部 (Volume) 或內部外殼 (Volume Shell) 發出時可用。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

發射位置 (Emit From) 肯定從哪裏發射出。可能的值有底部 (Base)、底部外殼 (Base Shell)、內部 (Volume) 和內部外殼 (Volume Shell)。

隨機方向 (Random Direction) 粒子是在隨機方向仍是沿着圓錐方向發射?

(4)立方體 (Box)

立方體 X 軸 (Box X) 立方體 X 軸的縮放。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

立方體 Y 軸 (Box Y) 立方體 Y 軸的縮放。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

立方體 Z 軸 (Box Z) 立方體 Z 軸的縮放。(也能夠在場景視圖 (Scene View) 中用手柄操做)。

隨機方向 (Random Direction) 粒子是在隨機方向仍是沿着立方體 Z 軸方向發射?

(5)網格 (Mesh)

類型 (Type) 粒子可從頂點 (Vertex)、邊 (Edge) 或面 (Triangle) 發射。

網格 (Mesh) 選擇網格 (Mesh) – 做爲發射形狀。

隨機方向 (Random Direction) 粒子是在隨機方向仍是沿着網格表面方向發射?

四、存活時間的速度模塊(Volocity over Lifetime)

image

直接動畫化粒子的速率。主要用於具備複雜物理特性的粒子,不過該屬性只演示簡單的視覺行爲(例如飄蕩的煙霧和溫度下降),與物理世界的互動不多。

XYZ:使用曲線常量值或曲線間的隨機值來控制粒子的運動。請參閱 MinMaxCurve。

Space:空間。

Local/ World:本地/世界。速度值是本地座標系仍是世界座標系中的值。

五、存活時間的限制速度模塊(Limit elocity over Lifetime)

image

基本上用於模擬阻力。若是超過某些閾值,就會抑制或固定速率。能夠按每一個軸或每一個向量長度配置。

Separate Axis:分離軸。用於設置每一個軸控制。

Speed:速度。指定量級爲常數或由限制全部軸速率的曲線指定量級。請參閱 MinMaxCurve。

Dampen:阻尼。(0-1)之間的值,控制應減慢的超過速率的幅度。例如,值爲 0.5,則將超過的速率減慢 50%。

六、存活時間的受力模塊

image

XYZ 使用曲線常量值或曲線間的隨機值來控制做用於粒子上的力。請參閱 MinMaxCurve。

空間 (Space) 本地 (Local)/世界 (World):速度值是本地座標系仍是世界座標系中的值。

隨機化 (Randomize) 隨機化每幀做用於粒子上的力。

七、存活時間的顏色模塊

顏色 (Color) 控制每一個粒子在其存活期間的顏色。若是有些粒子的存活時間短於其餘粒子,它們將運動得更快。採用常量顏色、兩色隨機,使用漸變更畫化顏色或使用兩個漸變指定一個隨機顏色(請參閱漸變)。請注意,該顏色將乘以初始顏色 (Start Color) 屬性中的值 – 若是初始顏色爲黑色,那麼存活時間的顏色 (Color Over Lifetime) 不會影響粒子。

八、顏色速度模塊

image

根據粒子速度動畫化粒子顏色。將定義範圍內的速度從新映射到顏色上。

顏色 (Color) 用於從新映射速度的顏色。使用漸變來改變顏色。請參閱 MinMaxGradient。

速度範圍 (Speed Range) 界定速度範圍的最小值和最大值,該範圍用於將速度從新映射到顏色上。

十、存活時間的大小模塊

image

大小 (Size) 控制每一個粒子在其存活期間的大小。採用固定大小,使用曲線將大小動畫化或使用兩條曲線指定隨機大小。請參閱 MinMaxCurve。

十一、大小速度模塊

image

大小 (Size) 用於從新映射速度的大小。將曲線用於不一樣大小。請參閱 MinMaxCurve.

速度範圍 (Speed Range) 界定速度範圍的最小值和最大值,該範圍用於將速度從新映射到大小上。

十二、存活時間的旋轉模塊

image

以度爲單位指定值。

角速度 (Angular Velocity) 控制每一個粒子在其存活期間的旋轉速度。採用固定旋轉速度,使用曲線將旋轉速度動畫化或使用兩條曲線指定隨機旋轉速度。請參閱 MinMaxCurve。

1三、旋轉速度模塊

image

角速度 (Angular Velocity) 用於從新映射粒子速度的旋轉速度。使用曲線來改變旋轉速度。請參閱 MinMaxCurve。

速度範圍 (Speed Range) 界定速度範圍的最小值和最大值,該範圍用於將速度從新映射到旋轉速度上。

1四、外力模塊

乘數 (Multiplier) 肯定粒子受風帶影響程度的縮放比例(即風力向量乘以該值)。

1五、碰撞模塊

image

爲該粒子系統 (Particle System) 中的粒子設置碰撞。如今支持世界碰撞和平面碰撞。平面碰撞對簡單碰撞檢測而言很是有效。經過引用場景中的現有變換或爲此建立新的空遊戲對象 (GameObject) 來設置平面。平面碰撞的另外一個優點是具備碰撞平面的粒子系統可設爲預設。世界碰撞採用光線投射,因此必須當心使用,以確保良好性能。然而,在近似碰撞可接受的狀況下,低 (Low) 或中等 (Medium) 質量的世界碰撞很是有效。

任何碰撞模塊 (Collision Module) 的常見屬性:

平面/世界 (Planes/World) 指定碰撞類型:平面 (Planes) 指平面碰撞,世界 (World) 指世界碰撞。

阻尼 (Dampen) (0-1) 粒子碰撞時,其將保持這一速度比例。除非設置爲 1.0,不然粒子在碰撞後變慢。

反彈 (Bounce) (0-1) 粒子碰撞時,其會保持這一速度份量比例,該份量與碰撞平面垂直。

生命減弱 (Lifetime Loss) (0-1) 每次碰撞後初始生命週期 (Start Lifetime) 減弱比例。生命週期達到 0 後,粒子死亡。例如,若是粒子應該在第一次碰撞時死亡,則將該屬性設爲 1.0。

最小殺死速度 (Min Kill Speed) 粒子在被殺死前的最小速度。

發送碰撞信息 (Send Collision Messages) 肯定是否要發送碰撞信息,從而肯定是否觸發遊戲對象 (GameObjects) 和 ParticleSystems 上的 OnParticleCollision 回調。

只在平面模式 (Planes Mode) 中可用的屬性

平面 (Planes) 平面經過向變換分配引用來定義。該變換可爲場景中的任何變換,且可動畫化。可使用多平面。注意:Y 軸用做平面法線。

可視化 (Visualization) 僅用於將平面可視化:網格 (Grid) 或實體 (Solid)。

網格 (Grid) 渲染爲小圖示,能快速指出在世界中的位置和方向。

實體 (Solid) 在場景中渲染平面,用於精肯定位平面。

縮放平面 (Scale Plane) 調整可視化平面大小。

粒子半徑 (Particle Radius) 因碰撞目的假設的粒子半徑。(所以,粒子視爲球體。)

只在世界模式 (World Mode) 中可用的屬性

碰撞對象 (Collides With) 用於指定碰撞器的篩選器。選擇全部東西 (Everything),來與整個世界碰撞。

碰撞質量 (Collision Quality) 世界碰撞的質量。

高質量 (High) 每幀的全部粒子進行場景光線投射。注意:這是 CPU 密集型應用,只能使用 1000 個(場景寬度)或更少的同步粒子。

中等質量 (Medium) 在每幀中,粒子系統接收一部分全局設置粒子光線投射計劃 (Particle Raycast Budget)(請參閱粒子光線投射計劃)。粒子以循環方式更新,其中在給定幀中不接收光線投射的粒子將查找和使用高速緩存中存儲的較舊碰撞物。注意:這類碰撞屬於近似碰撞,會遺漏一些粒子,特別是在角落處。

低質量 (Low) 除了粒子系統每四幀得到一部分粒子光線投射計劃 (Particle Raycast Budget)以外,其餘與中等質量 (Medium) 相同。

體素大小 (Voxel Size) 用於緩存中等 (Medium) 和低 (Low) 質量設置中所用交集的體素密度。體素大小以場景單位爲單位給出。一般會使用 0.5 – 1.0(假設使用公制單位)。

1六、子發射器模塊

image

是一個強大的模塊,可在出現下列粒子事件時生成其餘粒子系統 (Particle Systems):粒子產生、死亡或碰撞。

產生 (Birth) 該粒子系統 (Particle System) 中每一個粒子產生時生成另外一個粒子系統。

死亡 (Birth) 該粒子系統 (Particle System) 中每一個粒子死亡時生成另外一個粒子系統。

碰撞 (Collision) 該粒子系統 (Particle System) 中每一個粒子碰撞時生成另外一個粒子系統。

重要提示:須要使用碰撞模塊 (Collision Module) 創建碰撞。請參閱碰撞模塊 (Collision Module)。

1七、紋理層動畫模塊

image

在粒子存活期間動畫化 UV 座標。動畫幀以網格形式顯示,或者層中的每行都是單獨的動畫。幀能夠用曲線動畫化或者是兩條曲線之間的隨機幀。動畫速度用「週期 (Cycles)」 定義。 重要提示:用於動畫的紋理是渲染器 (Renderer) 模塊中所發現材質使用的紋理。

平鋪 (Tiles) 定義紋理的平鋪。

動畫 (Animation) 指定動畫類型:整層 (Whole Sheet) 或單行 (Single Row)。

整層 (Whole Sheet) 將整層用於 uv 動畫。

  • 時間幀 (Frame over Time) 在每一個粒子存活期間,在整層上控制其 uv 動畫幀。採用常量,使用曲線將幀動畫化或使用兩條曲線指定隨機幀。請參閱 MinMaxCurve。
  • 單行 (Single Row) 將一行紋理層用於 uv 動畫。
  • 隨機行 (Random Row) 若是選中此項,起始行隨機,若是取消選中,則能夠指定行指數(第一行爲 0)。
  • 時間幀 (Frame over Time) 在每一個粒子存活期間,在指定行內控制其 uv 動畫幀。採用常量,使用曲線將幀動畫化或使用兩條曲線指定隨機幀。請參閱 MinMaxCurve。
  • 週期 (Cycles) 指定動畫速度。

1八、渲染器模塊

image

渲染器模塊顯示 ParticleSystemRenderer 組件的屬性。

注意,即便遊戲對象 (GameObject) 擁有 ParticleSystemRenderer 組件,其屬性也只能在此處顯示。刪除/添加此模塊時,其實是添加或刪除 ParticleSystemRenderer 組件。

渲染模式 (Render Mode) 選擇下列粒子渲染模式之一。

廣告牌 (Billboard) 讓粒子始終面向相機。

拉伸廣告牌 (Stretched Billboard) 使用下列參數拉伸粒子。

l 相機縮放 (Camera Scale) 決定拉伸粒子時考慮進來的相機速度影響程度。

l 速度縮放 (Speed Scale) 經過對比粒子速度來肯定其長度。

l 長度縮放 (Length Scale) 經過對比粒子寬度來肯定其長度。

水平廣告牌 (Horizontal Billboard) 讓粒子與 XZ 平面對齊。

垂直廣告牌 (Vertical Billboard) 面向相機時,讓粒子與 Y 軸對齊。

網格 (Mesh) 使用網格而非四邊形渲染粒子。

- 網格 (Mesh) 渲染粒子所用的網格引用。

法線方向 (Normal Direction) 值 0 至 1,肯定法線與相機所成角度 (0) 及偏離視圖中心的角度 (1)。

材質 (Material) 廣告牌或網格粒子所用的材質。

排序模式 (Sort Mode) 粒子繪製順序可經過距離、最早生成或最晚生成來排列。

排序校訂 (Sorting Fudge) 使用該項影響繪製順序。具備較小排序校訂數值的粒子系統更可能放在最後繪製,所以顯示在其餘透明對象(包括其餘粒子)前面。

投射陰影 (Cast Shadows) 粒子是否會投射陰影?這由材質決定。

接受陰影 (Receive Shadows) 粒子是否會接受陰影?這由材質決定。

最大粒子大小 (Max Particle Size) 相對於視窗大小,設置最大大小。有效值:0-1。

3、粒子生成的相關屬性說明

當試圖表現不一樣粒子效果時,生成粒子的屬性諸如Size、Energy、Emission、Velocity會使粒子系統具備鮮明的個性。例如,Size較小時能夠模擬繭火蟲或天空中的星星,較大時能夠模擬老舊建築物中的灰塵。

Energy及Emission屬性能夠控制粒子在屏幕中將保留多長時間及一次能夠顯示出多少個粒子。好比火箭會有較高的Emission屬性來模擬濃煙,而較高的Emergy屬性則可模擬空氣中煙霧的緩慢擴散效果。

Velocity屬性控制着粒子的運動。可經過腳原本改變Velocity值以便產生更好的效果,或者若想模擬出像風那樣持續的效果,能夠設定Velocity屬性的X和Z值,這會產生粒子相似被吹走了的效果。

4、使用粒子生成器時注意的事項

要謹慎使用大量粒子的效果。粒子數量越多對硬件的要求越高。

Emit屬性要與粒子動畫器中的Auto Destruct (自動銷燬)屬性結合使用。經過腳本可使發射器中止發射粒子,而後自動銷燬功能會自動地銷燬粒子系統及它所綁定的遊戲對象。

相關文章
相關標籤/搜索