粒子系统(ParticleSystem)
ParticleSystem 用于模拟大量微小图形(粒子)的行为,以创造出复杂的动态效果。它通过模块化的方式工作,允许开发者调整粒子的发射、运动、生命周期、外观等多个方面,从而实现高度自定义的视觉效果。
核心功能:
- 主模块:控制粒子的基本属性,如发射持续时间、速度、数量等。
- 发射模块:决定粒子如何被发射,包括发射速率、突发发射等。
- 形状模块:定义粒子从哪里发射以及如何分布。
- 动画模块:管理粒子的生命周期内的变化,如大小、颜色的变化。
- 碰撞模块:使粒子能与场景中的其他对象交互,如反弹或销毁。
- 力模块:应用额外的力场影响粒子运动,如风力、重力。
常用属性
| 属性 |
描述 |
| autoDestroy |
是否自动销毁,默认 false。注意通过 app.addParticle/loadParticle* 添加时另有 disposeWhenEnd 选项(默认 true),粒子系统结束(不循环且粒子全部消失)后自动 dispose |
| prewarm |
循环的ParticleSystem是否应该预热,即粒子系统在第一次变为可见时看起来已经模拟了一个循环。 |
| looping |
粒子按照周期循环发射 让粒子发射时间循环起来,一直发射粒子。默认 true |
| emitterShape |
发射器形状Shape模块(构造参数名为 shape,默认 SphereEmitter):PointEmitter、SphereEmitter、HemisphereEmitter 半球、ConeEmitter 锥体、CircleEmitter、DonutEmitter 甜甜圈、CubeEmitter 立方体(没有 BoxEmitter)、GridEmitter、MeshSurfaceEmitter 等,见粒子发射器。Random/Loop/PingPong/Burst 是形状的 mode(vjmap3d.EmitterMode),不是形状 |
| duration |
持续时间(以秒为单位),默认 1 |
| startLife |
粒子从发生到消失的时间长短。 |
| startSpeed |
粒子起始速度的值生成器或函数值生成器。 |
| startRotation |
用于启动粒子旋转的值生成器或函数值生成器或旋转生成器。 |
| startSize |
用于启动粒子大小的值生成器或函数值生成器或旋转生成器。 |
| startColor |
用于启动粒子颜色的值生成器或函数值生成器或旋转生成器。 |
| startTileIndex |
粒子的起始平铺索引的值生成器。(精灵纹理总的图像数里面的位置索引) |
| rendererEmitterSettings |
ParticleSystem的渲染器发射器设置。StretchedBillBoard 模式用 { speedFactor, lengthFactor }(其他模式下这两项无作用);Trail 模式必须给 { startLength: ValueGenerator },否则发射粒子时抛错 |
| emissionOverTime |
粒子随时间的发射速率的值生成器或函数值生成器。(发射频率按时间 1秒发射的数量。) |
| emissionOverDistance |
粒子随距离的发射速率的值生成器或函数值生成器。 |
| emissionBursts |
指定时间瞬间发射出粒子参数数组。( 瞬间发射出粒子从第几(Time)秒开始。发射多少个(Count)。这次发射循环几次(Cycles)。每次循环间隔多久(Interval)。probability ( 每次爆发的可能性))。⚠️ cycle/interval 运行时未实现(只随 toJSON 序列化),每个 burst 每个周期只按 time 发射一次 |
| onlyUsedByOther |
确定ParticleSystem是否仅由其他ParticleSystem使用。 |
| worldSpace |
是在世界空间中还是在局部空间中。 |
| particleNum |
粒子数量 |
| paused |
是否暂停 |
| particles |
所有粒子对象数组 |
| emitterShape |
粒子发射器形状 |
| emitter |
添加到场景中的发射器对象 |
| rendererSettings |
渲染设置:instancingGeometry、renderMode、renderOrder、material、uTileCount/vTileCount、blendTiles、softParticles/softNearFade/softFarFade、layers。(speedFactor/lengthFactor 不在这里,属于 rendererEmitterSettings) |
| neededToUpdateRender |
是否需要更新批处理渲染器的渲染器设置 |
| simulations |
所有粒子模拟行为数组 |
常用方法
信号
| 信号名 |
描述 |
| onRestart |
重新开始事件 |
| onPlay |
开始事件 |
| onPause |
暂停事件 |
| onEnd |
结束事件。⚠️ 发射结束且粒子数为 0 后每帧都会派发,直到系统被 dispose——自行监听请用 system.signal.onEnd.addOne(...) 只收一次 |