說明
本系列文章的學(xué)習(xí)首先要感謝史前圖騰的共享精神,在他的系列文章中有詳細(xì)的解釋,但是他的代碼都是Swift寫的.并且代碼的解釋比較少,
在這里我提供了demo-OC版供大家參考和學(xué)習(xí),基礎(chǔ)知識會一一為大家解釋,但是OC版的demo只提供最終合集,方便一次到位減少打開工程的次數(shù)
-
效果圖
SCNParticleSystem
粒子系統(tǒng)常用屬性:
- Appearance(外觀):每一個顆粒都是一個小圖片或者一組圖片序列,可以調(diào)整尺寸,顏色,混合模式以及其他顆粒產(chǎn)生時的渲染參數(shù).
- Life Span(生命跨度):粒子系統(tǒng)用particle emitter(粒子發(fā)射器)產(chǎn)生單獨的顆粒.生命跨度決定了粒子在場景中的可見時長.
- Emitter behavior(發(fā)射器行為):可以按鈕發(fā)射器的參數(shù),比如粒子從哪里產(chǎn)生,產(chǎn)生速率.
- Variation(變異):讓粒子系統(tǒng)產(chǎn)生隨機(jī)變異.
- Movement(運動):可以調(diào)整顆粒產(chǎn)生后是怎么運動的.粒子系統(tǒng)使用了簡化版的物理模擬來加速性能,但顆粒仍然可以和物理引擎管理的對象進(jìn)行交互.
新建一個粒子系統(tǒng),xcode自帶了7種效果
如下的星星效果
Emitter attributes發(fā)射器屬性
- Birth rate(出生速率):控制顆粒的發(fā)射速率,設(shè)置為25,則每秒產(chǎn)生25個顆粒.
- Warmup duration(暖場時長):渲染時的粒子產(chǎn)生提前量,可以用來一開始就讓整個屏幕直接充滿顆粒而無需從頭等待慢慢發(fā)射.
- Location(位置):和形狀相關(guān),設(shè)置發(fā)射器從哪里發(fā)射顆粒.設(shè)置為Vertex,則顆粒將會從幾何體的頂點產(chǎn)生.
- Emission space(散發(fā)空間):發(fā)射出的顆粒停留的空間.設(shè)置為World Space這樣顆粒將會被發(fā)射到世界坐標(biāo)系的空間中,而不是對象節(jié)點自己的本地坐標(biāo)系空間.
- Direction mode(方向模式):控制產(chǎn)生的顆粒如何運動,設(shè)置為Constant,則顆粒放射狀從形狀表面向外運動,否則顆粒將以隨機(jī)方向運動.
- Spreading angle(散布角度):隨機(jī)化大量顆粒的發(fā)射角度.設(shè)置為0,則顆粒嚴(yán)格按照上一個設(shè)置的方向運動.
- Shape(形狀):發(fā)射顆粒的形狀,設(shè)置為Sphere則用球體做為幾何體.
- Shape radius(形狀半徑):這個參數(shù)和上面設(shè)置的形狀有關(guān),當(dāng)形狀設(shè)置為球體時,此處可設(shè)置球體的半徑.某些形狀有兩個輸入?yún)^(qū),其中一個有Δ符號,第一個輸入?yún)^(qū)是一個基礎(chǔ)值,后面是偏差值,每次產(chǎn)生顆粒時,將在基礎(chǔ)值的正負(fù)偏差范圍內(nèi)產(chǎn)生隨機(jī)值.
Simulation attributes模擬屬性
- Image(圖片):設(shè)置每個顆粒渲染時的圖片,給顆粒一個最初的形狀.
- Color(顏色): 設(shè)置指定圖片的染色.設(shè)定為White,則粒子系統(tǒng)基礎(chǔ)色為白色.
- Animate color(動畫顏色):使顆粒在生命周期中不斷改變顏色.
- Color variation(顏色變異):設(shè)定顏色隨機(jī)變異值.
- Size(尺寸):設(shè)置顆粒的尺寸.
Image sequence attributes圖片序列屬性
- Initial frame(初始幀):設(shè)置第一個動畫序列的零起點畫面,第零幀對應(yīng)的是網(wǎng)絡(luò)中左上角的圖片.使用單幀圖片時設(shè)置為0.
- Frame rate(幀率):設(shè)置動畫的每秒速度.使用單幀圖片時設(shè)置為0.
- Animation(動畫):設(shè)置動畫序列的行為.Repeat重復(fù)循環(huán),Clamp播放一次,Auto Reverse自動反轉(zhuǎn),從頭到尾再返回開頭.使用單幀圖片時設(shè)置為Repeat或其他均可.
- Dimensions(尺寸):設(shè)置動畫風(fēng)格的行數(shù)列數(shù).使用單幀圖片時設(shè)置為(Rows: 1, Columns: 1).
Rendering attributes渲染屬性
- Blending(混合):設(shè)置渲染器繪制顆粒時的混合模式,設(shè)置為Alpha,將會使用圖片的alpha通道信息來決定透明度.
- Orientation(旋轉(zhuǎn)):設(shè)置為Billboard screen-aligned,這樣圖片會永遠(yuǎn)正面對著相機(jī),就不會看到圖片是扁平的了.
- Sorting(排序):設(shè)置顆粒的渲染排序.這個屬性用來連合混合模式,影響如何應(yīng)用混合模式.
- Lighting(燈光):控制是否受場景中燈光的影響.
Physics attributes物理屬性
- Affected by gravity(受重力影響):設(shè)置重力(引力)對顆粒的影響.
- Affected by physics fields(受物理場影響): 設(shè)置物理場(磁力等)對顆粒的影響.
- Die on Collision(碰撞后死亡):允許場景中的物理實體碰撞并摧毀粒子.
- Physics Properties(物理屬性):控制物理模擬中粒子物理行為的基礎(chǔ)物理屬性,一般可保持默認(rèn).Mass(質(zhì)量),bounce(彈性),friction(摩擦),damping(阻尼).
Life cycle attributes生命周期屬性
- Emission Duration(排放時長):控制發(fā)射器發(fā)射新粒子的時間長度.設(shè)置為1,使粒子發(fā)射器設(shè)定總長度為1秒 .
- Idle Duration(閑置時長):粒子系統(tǒng)循環(huán)發(fā)射一個特定排放時長后,將閑置一段時間,稱為閑置時長,然后再重復(fù)循環(huán).設(shè)置為0,粒子系統(tǒng)將只發(fā)射一次.
- Looping(循環(huán)):設(shè)置粒子系統(tǒng)像爆炸一樣發(fā)射一次,還是像火山一樣持續(xù)發(fā)射粒子.設(shè)置為Loops continuously,就可以讓發(fā)射器在被移除前一直發(fā)射.
- 核心代碼
/**
創(chuàng)建粒子
@param color 粒子的顏色
@param geometry 粒子發(fā)射器
@return
*/
- (SCNParticleSystem *)creatParticleSystemWithColor:(UIColor *)color geometry:(SCNGeometry *)geometry{
// 創(chuàng)建粒子 直接使用系統(tǒng)的粒子 具體創(chuàng)建在筆記中有介紹
SCNParticleSystem *particleSystem = [SCNParticleSystem particleSystemNamed:@"Rain.scnp" inDirectory:nil];
// 設(shè)置粒子顏色 保證粒子的顏色與發(fā)射器幾何體的顏色是一致的
particleSystem.particleColor = color;
// 指定發(fā)射器的形狀 此處將傳來的幾何體作為粒子的發(fā)射器
particleSystem.emitterShape = geometry;
return particleSystem;
}
// 創(chuàng)建一個粒子
SCNParticleSystem * parrticleSystem = [self creatParticleSystemWithColor:color geometry:geometer];
//將該粒子 添加到節(jié)點上 有時候會發(fā)現(xiàn) 粒子未出現(xiàn)在屏幕中 可能的原因之一是 粒子的大小問題(我就遇到了)
[geometerNode addParticleSystem:parrticleSystem];