说明
本系列文章的学习首先要感谢史前图腾的共享精神,在他的系列文章中有详细的解释,但是他的代码都是Swift写的.并且代码的解释比较少,
在这里我提供了demo-OC版供大家参考和学习,基础知识会一一为大家解释,但是OC版的demo只提供最终合集,方便一次到位减少打开工程的次数
-
效果图
SCNParticleSystem
粒子系统常用属性:
- Appearance(外观):每一个颗粒都是一个小图片或者一组图片序列,可以调整尺寸,颜色,混合模式以及其他颗粒产生时的渲染参数.
- Life Span(生命跨度):粒子系统用particle emitter(粒子发射器)产生单独的颗粒.生命跨度决定了粒子在场景中的可见时长.
- Emitter behavior(发射器行为):可以按钮发射器的参数,比如粒子从哪里产生,产生速率.
- Variation(变异):让粒子系统产生随机变异.
- Movement(运动):可以调整颗粒产生后是怎么运动的.粒子系统使用了简化版的物理模拟来加速性能,但颗粒仍然可以和物理引擎管理的对象进行交互.
新建一个粒子系统,xcode自带了7种效果
如下的星星效果
Emitter attributes发射器属性
- Birth rate(出生速率):控制颗粒的发射速率,设置为25,则每秒产生25个颗粒.
- Warmup duration(暖场时长):渲染时的粒子产生提前量,可以用来一开始就让整个屏幕直接充满颗粒而无需从头等待慢慢发射.
- Location(位置):和形状相关,设置发射器从哪里发射颗粒.设置为Vertex,则颗粒将会从几何体的顶点产生.
- Emission space(散发空间):发射出的颗粒停留的空间.设置为World Space这样颗粒将会被发射到世界坐标系的空间中,而不是对象节点自己的本地坐标系空间.
- Direction mode(方向模式):控制产生的颗粒如何运动,设置为Constant,则颗粒放射状从形状表面向外运动,否则颗粒将以随机方向运动.
- Spreading angle(散布角度):随机化大量颗粒的发射角度.设置为0,则颗粒严格按照上一个设置的方向运动.
- Shape(形状):发射颗粒的形状,设置为Sphere则用球体做为几何体.
- Shape radius(形状半径):这个参数和上面设置的形状有关,当形状设置为球体时,此处可设置球体的半径.某些形状有两个输入区,其中一个有Δ符号,第一个输入区是一个基础值,后面是偏差值,每次产生颗粒时,将在基础值的正负偏差范围内产生随机值.
Simulation attributes模拟属性
- Image(图片):设置每个颗粒渲染时的图片,给颗粒一个最初的形状.
- Color(颜色): 设置指定图片的染色.设定为White,则粒子系统基础色为白色.
- Animate color(动画颜色):使颗粒在生命周期中不断改变颜色.
- Color variation(颜色变异):设定颜色随机变异值.
- Size(尺寸):设置颗粒的尺寸.
Image sequence attributes图片序列属性
- Initial frame(初始帧):设置第一个动画序列的零起点画面,第零帧对应的是网络中左上角的图片.使用单帧图片时设置为0.
- Frame rate(帧率):设置动画的每秒速度.使用单帧图片时设置为0.
- Animation(动画):设置动画序列的行为.Repeat重复循环,Clamp播放一次,Auto Reverse自动反转,从头到尾再返回开头.使用单帧图片时设置为Repeat或其他均可.
- Dimensions(尺寸):设置动画风格的行数列数.使用单帧图片时设置为(Rows: 1, Columns: 1).
Rendering attributes渲染属性
- Blending(混合):设置渲染器绘制颗粒时的混合模式,设置为Alpha,将会使用图片的alpha通道信息来决定透明度.
- Orientation(旋转):设置为Billboard screen-aligned,这样图片会永远正面对着相机,就不会看到图片是扁平的了.
- Sorting(排序):设置颗粒的渲染排序.这个属性用来连合混合模式,影响如何应用混合模式.
- Lighting(灯光):控制是否受场景中灯光的影响.
Physics attributes物理属性
- Affected by gravity(受重力影响):设置重力(引力)对颗粒的影响.
- Affected by physics fields(受物理场影响): 设置物理场(磁力等)对颗粒的影响.
- Die on Collision(碰撞后死亡):允许场景中的物理实体碰撞并摧毁粒子.
- Physics Properties(物理属性):控制物理模拟中粒子物理行为的基础物理属性,一般可保持默认.Mass(质量),bounce(弹性),friction(摩擦),damping(阻尼).
Life cycle attributes生命周期属性
- Emission Duration(排放时长):控制发射器发射新粒子的时间长度.设置为1,使粒子发射器设定总长度为1秒 .
- Idle Duration(闲置时长):粒子系统循环发射一个特定排放时长后,将闲置一段时间,称为闲置时长,然后再重复循环.设置为0,粒子系统将只发射一次.
- Looping(循环):设置粒子系统像爆炸一样发射一次,还是像火山一样持续发射粒子.设置为Loops continuously,就可以让发射器在被移除前一直发射.
- 核心代码
/**
创建粒子
@param color 粒子的颜色
@param geometry 粒子发射器
@return
*/
- (SCNParticleSystem *)creatParticleSystemWithColor:(UIColor *)color geometry:(SCNGeometry *)geometry{
// 创建粒子 直接使用系统的粒子 具体创建在笔记中有介绍
SCNParticleSystem *particleSystem = [SCNParticleSystem particleSystemNamed:@"Rain.scnp" inDirectory:nil];
// 设置粒子颜色 保证粒子的颜色与发射器几何体的颜色是一致的
particleSystem.particleColor = color;
// 指定发射器的形状 此处将传来的几何体作为粒子的发射器
particleSystem.emitterShape = geometry;
return particleSystem;
}
// 创建一个粒子
SCNParticleSystem * parrticleSystem = [self creatParticleSystemWithColor:color geometry:geometer];
//将该粒子 添加到节点上 有时候会发现 粒子未出现在屏幕中 可能的原因之一是 粒子的大小问题(我就遇到了)
[geometerNode addParticleSystem:parrticleSystem];