# 粒子发射器
粒子发射器(ParticleEmitter)负责粒子的发射、生命周期管理、渲染、属性的初始化和更新。
import { ParticleEmitter } from '@tx3d/particlesystem';
// 创建一粒子发射器
const emitter = new ParticleEmitter( {
total: 1000, // 可以发射的粒子总数
damping: 0.0, // 粒子发射器的阻尼系数
once: false, // 是否只发射一次
// 发射频率
emitRate: {
minEmitAmounts: 2, // 每次发射的粒子最少数量
maxEmitAmounts: 3, // 每次发射的粒子最大数量
minEmitInterval: 0.01, // 粒子发射最小间隔(单位:秒)
maxEmitInterval: 0.02 // 粒子发射最大间隔(单位:秒)
}
} );
// 将发生器添加到粒子渲染器中
renderer.addEmitter( emitter );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
提示
粒子发射器初始化参数,详见EmitterParameters。
# 粒子发射器属性
🌏 life 发射器寿命,单位:秒。
// 获取粒子发射器寿命
const life = emitter.life;
// 设置粒子发射器寿命
emitter.life = 1000.0;
1
2
3
4
5
2
3
4
5
提示
当粒子发射器的年龄达到寿命长度时会停止粒子发射。粒子发射器的默认寿命长度是 Infinity,即可以无限发射。
🌏 age 发射器年龄,单位:秒。
// 获取粒子发射器年龄
const age = emitter.age;
// 设置粒子发射器年龄
emitter.age = 10.0;
1
2
3
4
5
2
3
4
5
🌏 total 发射器可发射的粒子总数
// 获取粒子发射器可发射的粒子总数
const total = emitter.total;
// 设置粒子发射器可发射的粒子总数
emitter.total = 2000.0;
1
2
3
4
5
2
3
4
5
🌏 once 标识是否仅发射一次
// 获取是否仅发射一次
const once = emitter.once;
// 设置是否仅发射一次
emitter.once = false;
1
2
3
4
5
2
3
4
5
提示
如果设置仅发射一次(即 emitter.once = true),粒子“死亡”时不会递减已发射粒子数目且当已发生粒子数目到达可发射粒子总数时会停止发射。
🌏 damping 粒子发射器的阻尼系数
// 获取阻尼系数
const damping = emitter.damping;
// 设置阻尼系数
emitter.damping = 0.006;
1
2
3
4
5
2
3
4
5
提示
阻尼系数取值范围在[ 0.0~1.0 ]区间内。阻尼系数会影响粒子速度,通常阻尼系数设置为0.0就可以了。
🌏 dead 标识发射器是否已“死亡”
// 获取发射器是否已“死亡”
const dead = emitter.dead;
// 设置发射器是否已“死亡”
emitter.dead = false;
1
2
3
4
5
2
3
4
5
🌏 position 粒子发射器位置
import { Vector3 } from 'three';
// 获取粒子发射器位置
const position = emitter.position;
// 设置粒子发射器位置
emitter.position = new Vector3( 0.0, 10.0, 0.0 );
1
2
3
4
5
6
7
2
3
4
5
6
7
🌏 onStartEmit 发射开始回调
// 设置发射开始回调
emitter.onStartEmit = () => {
console.log( '开始发射!' );
}
1
2
3
4
5
6
2
3
4
5
6
🌏 onStopEmit 发射结束回调
// 设置发射结束回调
emitter.onStopEmit = () => {
console.log( '结束发射!' );
}
1
2
3
4
5
6
2
3
4
5
6
🌏 renderer 获取粒子渲染器,只读。
// 获取粒子渲染器
const renderer = emitter.renderer;
1
2
2
# 粒子发射器接口
🌏 addInitializer 添加一个初始化器
// 添加一个初始化器
emitter.addInitializer( initializer );
1
2
2
🌏 getInitializer 通过索引获取初始化器
// 获取0号索引初始化器
const initializer = emitter.getInitializer( 0 );
1
2
2
🌏 removeInitializer 移除一个初始化器
// 移除一个初始化器
emitter.removeInitializer( initializer );
1
2
2
🌏 removeAllInitializers 移除所有初始化器
// 移除所有初始化器
emitter.removeAllInitializers();
1
2
2
🌏 addBehaviour 添加一个行为控制器
// 添加一个行为控制器
emitter.addBehaviour( behaviour );
1
2
2
🌏 getBehaviour 通过索引获取行为控制器
// 获取0号索引行为控制器
const behaviour = emitter.getBehaviour( 0 );
1
2
2
🌏 removeBehaviour 移除一个行为控制器
// 移除一个行为控制器
emitter.removeBehaviour( behaviour );
1
2
2
🌏 removeAllBehaviours 移除所有行为控制器
// 移除所有行为控制器
emitter.removeAllBehaviours();
1
2
2
🌏 emit 预发射粒子
// 预发射1000个粒子
emitter.emit( 1000 );
1
2
2
注意
预发射的粒子数目需要小于等于粒子发射器可发射的粒子总数。