粒子系统
粒子系统在CPU上模拟粒子行为,可用来模拟火焰、爆炸、拖尾等效果
粒子系统组件具有许多属性,划分了多个“模块”。包括粒子系统主模块、发射器模块、粒子发射模块、粒子大小模块、粒子颜色模块、粒子速度模块、粒子旋转模块、粒子贴图动画模块。
注:下文中“×××变化方式”表示当前属性支持恒定值或随机值
粒子系统主模块
粒子对象是由粒子系统生成的无数个小粒子构成,在主模块可以定义粒子的持续时间、系统的最大粒子数、是否循环、延迟发射时间、粒子的生命周期等粒子的属性。 
| 属性 | 功能 |
|---|---|
| 持续时间 | 系统运行的时间长度 |
| 最大粒子数 | 粒子系统支持的最大粒子数 |
| 循环 | 开启此属性,粒子系统持续时间结束后重新启动,并且一直循环重复 |
| 延迟发射时间模式 | 延迟发射时间的变化模式 |
| 延迟发射时间 | 系统开始发射前将延迟一段时间 |
| 生命周期模式 | 生命周期变化模式 |
| 生命周期 | 粒子的初始生命周期 |
| 初始颜色模式 | 粒子起始颜色的变化模式 |
| 初始颜色 | 粒子的初始颜色 |
| 分轴大小 | 启用后可分别控制粒子每个轴的大小 |
| 初始大小模式 | 粒子初始大小的变化模式 |
| 初始大小 | 粒子的起始大小 |
| 初始速度模式 | 粒子起始速度的变化模式 |
| 初始速度 | 粒子的起始速度 |
| 分轴旋转 | 启用后可分别控制粒子每个轴的旋转 |
| 初始旋转模式 | 起始旋转的变化模式 |
| 初始旋转角度 | 粒子的起始旋转 |
| 重力系数模式 | 重力系数的变化模式 |
| 重力系数 | 粒子所受重力影响的系数,为0时表示关闭重力 |
| 模拟空间 | 粒子系统模拟所在坐标系,包括世界坐标系与局部坐标系 |
| 系统运行后自动开始播放 | 启用时,粒子系统会在创建时自动启动 |
| 播放状态控制 | 控制编辑器下粒子系统的运行状态 |
| 结束 | 结束粒子系统的播放 |
发射器模块
发射器模块用于控制发射器的形状、发射源等属性。 圆锥发射器: 
| 属性 | 功能 |
|---|---|
| 发射器形状 | 发射体的形状 |
| 发射源 | 从发射体的何处进行粒子的发射 |
| 半径 | 发射体的圆形半径 |
| 边缘厚度 | 发射体的体积比例 |
| 发射角度 | 发射器可发射粒子的角度范围 |
| 发射方式 | 可按照随机、循环、往返的方式发射粒子 |
| 圆周间隔角度 | 弧形周围可产生粒子的离散间隔 |
| 角度 | 发射器的张口角度 |
| 长度 | 发射器的长度 |
| 圆形发射器: | |
![]() |
| 属性 | 功能 |
|---|---|
| 发射器形状 | 发射体的形状 |
| 半径 | 圆形的半径 |
| 边缘厚度 | 可发射范围的比例 |
| 发射角度 | 发射器内可发射粒子的角度范围 |
| 圆周间隔角度 | 弧形周围可产生粒子的离散间隔 |
| 立方体发射器: | |
![]() |
| 属性 | 功能 |
|---|---|
| 发射器形状 | 发射体的形状 |
| 发射源 | 可从发射体的不同位置发射粒子 |
| 边长 | 立方体发射体的边长 |
粒子发射模块

| 属性 | 功能 |
|---|---|
| 基于时间的发射速率模式 | 基于时间的发射速率的变化方式 |
| 每秒发送粒子数 | 每个时间单位发射的粒子数 |
| 基于距离的发送速率模式 | 基于距离的发送速率的变化方式 |
| 每米发射粒子数 | 每个移动距离单位发送的粒子数 |
粒子大小模块
粒子大小模块可实现基于粒子生命周期的大小变化
| 属性 | 功能 |
|---|---|
| 分轴 | 若启动,可以对粒子的三个轴分别控制大小变化 |
| 大小 | 基于粒子生命周期的粒子大小变化的起始尺寸与终止尺寸 |
| 启用分轴后,粒子的XYZ轴大小均可以根据生命周期进行变化 | |
![]() |
粒子颜色模块
粒子颜色模块可实现基于粒子生命周期的颜色变化
| 属性 | 功能 |
|---|---|
| 颜色模式 | 支持固定值与基于生命周期的颜色插值 |
| 颜色 | 颜色值 |
粒子速度模块
粒子速度模块可以实现基于粒子生命周期的速度变化效果 
| 属性 | 功能 |
|---|---|
| 坐标系 | 指定粒子速度变化轴是参考本地空间还是世界空间 |
| X-Y-Z轴速度模式 | 针对XYZ轴的速度变化方式 |
| X-Y-Z轴速度 | 粒子在对应轴上的线性速度 |
| 速度修正系数 | 速度计算时的一个系数 |
粒子旋转模块
粒子旋转模块可实现基于粒子生命周期的旋转 
| 属性 | 功能 |
|---|---|
| 分轴 | 与大小模块一样,启用后可对XYZ轴分别设置旋转 |
| X-Y-Z轴旋转模式 | 旋转的变化方式 |
| X-Y-Z轴旋转 | 基于生命周期,对粒子的XYZ轴分别进行旋转控制 |
粒子贴图动画模块
粒子贴图动画模块可以实现在粒子上的纹理帧动画 
| 属性 | 功能 |
|---|---|
| 模式 | 仅支持网格动画 |
| X轴动画帧数 | X轴方向对纹理的切分数 |
| Y轴动画帧数 | Y轴方向对纹理的切分数 |
| 动画模式 | 动画方式,支持整张纹理的播放与指定行的播放 |
| 起始帧模式 | 起始帧索引的变化方式 |
| 起始帧 | 以指定的帧索引开始动画 |
| 循环次数 | 粒子生命周期内帧动画的循环次数 |
| 动画纹理 | 以该纹理进行帧动画的播放 |
当动画方式为按照指定行进行播放时:
行索引支持用户自定义与随机选择两种模式
粒子渲染模块
粒子渲染模块控制粒子的渲染,可以设置不同的渲染模式
粒子系统接口
- NParticleComponent.h
| 接口 | 返回值 | 说明 |
|---|---|---|
| GetParticleSystem | NParticleSystemPtr | 获取粒子系统 |
| SetMainTexture | bool | 设置主纹理 |
| GetTexture | NTexturePtr | 获取纹理 |
| GetTexturePath | std::string | 获取纹理路径 |
NParticleSystemPtr GetParticleSystem(); 描述:获取粒子系统,粒子系统各个模块均被NParticleSystem管理
bool SetMainTexture(std::string path); path:纹理路径 描述:设置粒子的主纹理,还可用于粒子纹理动画
NTexturePtr GetTexture(); 描述:获取粒子纹理
std::string GetTexturePath(); 描述:获取粒子纹理路径
- NParticleSystem.h
| 接口 | 返回值 | 说明 |
|---|---|---|
| IsStopped | bool | 是否停止了 |
| IsPaused | bool | 是否暂停了 |
| IsPlaying | bool | 是否正在播放 |
| IsEmitting | bool | 是否正在发射粒子 |
| Start | void | 开始播放 |
| Stop | void | 停止播放 |
| Pause | void | 暂停播放 |
| UpdateParticleConfig | void | 更新粒子配置 |
| GetParticleConfig | ParticleConfig | 获取粒子配置 |
| EnableModule | ParticleModuleBaseRef | 启用/禁用指定模块 |
| GetModule | ParticleModuleBaseRef | 获取指定模块的基类指针 |
| GetShapeBase | ShapeBaseRef | 获取发射器的基类指针 |
- ParticleConfig:粒子配置
| 属性 | 类型 | 说明 |
|---|---|---|
| m_bMaxCapacity | int | 粒子最多容量 |
| m_StartColor | GradientRange | 粒子起始颜色 |
| m_bStartSize3D | bool | 粒子是否启用分轴的起始尺寸属性 |
| m_StartSize | CurveRange | 粒子起始大小 |
| m_StartSizeX | CurveRange | 粒子起始X轴大小 |
| m_StartSizeY | CurveRange | 粒子起始Y轴大小 |
| m_StartSizeZ | CurveRange | 粒子起始Z轴大小 |
| m_Duration | float | 粒子系统持续时间 |
| m_StartSpeed | CurveRange | 粒子起始速度 |
| m_bStartRotation3D | bool | 粒子是否启用分轴的起始旋转属性 |
| m_StartRotation | CurveRange | 粒子起始旋转 |
| m_StartRotationX | CurveRange | 粒子起始X轴旋转 |
| m_StartRotationY | CurveRange | 粒子起始Y轴旋转 |
| m_StartRotationZ | CurveRange | 粒子起始Z轴旋转 |
| m_StartDelay | CurveRange | 起始延迟时间 |
| m_StartLifeTime | CurveRange | 粒子起始生命周期 |
| m_bPrewarm | bool | 是否启用预热 |
| m_bLoop | bool | 是否启用循环 |
| m_RateOverTime | CurveRange | 基于时间的粒子生成速率 |
| m_RateOverDistance | CurveRange | 基于距离的粒子生成速率 |
| m_GravityModifier | CurveRange | 粒子重力系数 |
| m_PlayOnAwake | bool | 是否初始时立即启动 |
| m_SimulationSpeed | float | 粒子系统的模拟速率 |
| m_SimulationSpace | ECoordSystem | 粒子系统的模拟空间 |
- ParticleModuleConfig:粒子模块的配置
| 属性 | 类型 | 说明 |
|---|---|---|
| particleModuleType | ParticleModuleType | 粒子模块类型 |
| isEnable | bool | 是否启用该模块 |
| colorOverLifetime | GradientRange | 基于生命周期的颜色 |
| bSeparateAxesRotation | bool | 是否分轴控制旋转 |
| angularVelocity | CurveRange | 基于生命周期的角速度 |
| angularXVelocity | CurveRange | 基于生命周期的X轴角速度 |
| angularYVelocity | CurveRange | 基于生命周期的Y轴角速度 |
| angularZVelocity | CurveRange | 基于生命周期的Z轴角速度 |
| bSeparateAxesSize | bool | 是否分轴控制大小 |
| sizeOverLifetime | CurveRange | 基于生命周期的粒子大小 |
| sizeXOverLifetime | CurveRange | 基于生命周期的粒子X轴大小 |
| sizeYOverLifetime | CurveRange | 基于生命周期的粒子Y轴大小 |
| sizeZOverLifetime | CurveRange | 基于生命周期的粒子Z轴大小 |
| mode | Mode | 纹理动画类型 |
| numTileX | int | 纹理动画X轴划分 |
| numTileY | int | 纹理动画Y轴划分 |
| startFrame | CurveRange | 纹理动画起始帧 |
| cycleCount | int | 纹理动画循环此时 |
| textureAnimationMode | EParticleTextureAnimation | 纹理动画模式 |
| rowMode | EParticleTextureRowMode | 行模式 |
| rowIndex | int | 行索引 |
| texturePath | std::string | 纹理图片路径 |
| coordSystem | ECoordSystem | 坐标空间 |
| speedModifier | float | 速度系数 |
| velocityXOverLifetime | CurveRange | 基于生命周期的X轴速度 |
| velocityYOverLifetime | CurveRange | 基于生命周期的Y轴速度 |
| velocityZOverLifetime | CurveRange | 基于生命周期的Z轴速度 |




