Unity粒子系统
目录
- 一、界面参数介绍
- 1.主模块
- 2.Emission 模块
- 3.Shape 模块
- 4.Velocity over Lifetime 模块
- 5.Noise 模块
- 6.Limit Velocity Over Lifetime 模块
- 7.Inherit Velocity 模块
- 8.Force Over Lifetime 模块
- 9.Color Over Lifetime 模块
- 10.Color By Speed 模块
- 11.Size over Lifetime 模块
- 12、Size by Speed 模块
- 13.Rotation Over Lifetime 模块
- 14.Rotation By Speed 模块
- 15.External Forces 模块
- 16.Collision 模块
- 16.1.Planes模式
- 16.2.World模式
- 17.Triggers 模块
- 18.Sub Emitters 模块
- 19.Texture Sheet Animation 模块
- 19.1.Grid 模式属性
- 19.2.Sprite 模式属性
- 20.Lights 模块
- 21.Trails 模块
- 22.Renderer 模块
- 二、常用参数和方法解析(待更新)
一、界面参数介绍
1.主模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Duration | 系统运行的时间长度 | - |
Looping | 如果启用此属性,系统将在其持续时间结束时再次启动并继续重复该循环 | - |
Prewarm | 如果启用此属性,系统将初始化,就像已经完成一个完整周期一样(仅当Looping 也启用时才有效) | - |
Start Delay | 启用此属性后,系统开始发射前将延迟一段时间(以秒为单位) | - |
Start Lifetime | 粒子的初始生命周期 | - |
Start Speed | 每个粒子在适当方向的初始速度 | - |
3D Start Size | 如果要分别控制每个轴的大小,请启用此属性 | - |
Start Size | 每个粒子的初始大小 | - |
3D Start Rotation | 如果要分别控制每个轴的旋转,请启用此属性 | - |
Start Rotation | 每个粒子的初始旋转角度 | - |
Flip Rotation | 使一些粒子以相反的方向旋转 | - |
Start Color | 每个粒子的初始颜色 | - |
Gravity Modifier | 缩放Physics 窗口中设置的重力值。值为零会关闭重力 | - |
Simulation Space | 控制粒子的运动位置是在父对象的局部空间中(因此与父对象一起移动)、在世界空间中还是相对于自定义对象(与您选择的自定义对象一起移动) | - |
Simulation Speed | 调整整个系统更新的速度 | - |
Delta Time | 在Scaled 和Unscaled 之间进行选择,其中的Scaled 使用Time 窗口中的Time Scale 值,而Unscaled 将忽略该值。此属性对于出现在暂停菜单 (Pause Menu ) 上的粒子系统非常有用 |
|
Scaling Mode | 选择如何使用变换中的缩放。设置为Hierarchy 、Local 或Shape 。Local 仅应用粒子系统变换缩放,忽略任何父级。Shape 模式将缩放应用于粒子起始位置,但不影响粒子大小 |
|
Play on Awake | 如果启用此属性,则粒子系统会在创建对象时自动启动 | - |
Emitter Velocity | 选择粒子系统如何计算Inherit Velocity 和Emission 模块使用的速度。系统可使用刚体组件(如果存在)或通过跟踪变换组件的移动情况来计算速度 | - |
Max Particles | 系统中同时允许的最多粒子数。如果达到限制,则移除一些粒子 | - |
Auto Random Seed | 如果启用此属性,则每次播放时粒子系统看起来都会不同。设置为false 时,每次播放时系统都完全相同 | - |
Random Seed | 禁用自动随机种子时,此值用于创建唯一的可重复效果 | - |
Stop Action | 当属于系统的所有粒子都已完成时,可使系统执行某种操作。当一个系统的所有粒子都已死亡,并且系统存活时间已超过Duration 设定的值时,判定该系统已停止。对于循环系统,只有在通过脚本停止系统时才会发生这种情况 |
|
Culling Mode | 选择粒子在屏幕外时是否暂停粒子系统模拟。在屏幕外时进行剔除具有最高效率,但您可能希望继续进行非一次性 (off-one) 效果的模拟 |
|
Ring Buffer Mode | - |
|
2.Emission 模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Rate over Time | 每个时间单位发射的粒子数。 | - |
Rate over Distance | 每个移动距离单位发射的粒子数。 | - |
Bursts | 爆发是指生成粒子的事件。通过这些设置可允许在指定时间发射粒子。 |
|
3.Shape 模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Shape | 发射体积的形状 | |
| ||
Radius | 形状的圆形半径 | 数值,定义圆形、锥体、环形等形状的半径大小 |
Radius Thickness | 发射粒子的体积比例 | 值为 0 表示从形状的外表面发射粒子; 值为 1 表示从整个体积发射粒子; 介于两者之间的值将使用体积的一定比例 |
Texture | 用于为粒子着色和丢弃粒子的纹理 | - |
Clip Channel | 纹理中用于丢弃粒子的通道 | - |
Clip Threshold | 将粒子映射到纹理上的位置时,丢弃像素颜色低于此阈值的所有粒子 | - |
Color affects Particles | 粒子颜色受纹理颜色影响 | - |
Alpha affects Particles | 粒子 Alpha 受纹理 Alpha 影响 | - |
Bilinear Filtering | 在读取纹理时,无论纹理尺寸如何,均组合 4 个相邻样本以获得更平滑的粒子颜色变化 | - |
Position | 将一个偏移应用于生成粒子的发射器形状 | - |
Rotation | 旋转生成粒子的发射器形状 | - |
Scale | 更改生成粒子的发射器形状的大小 | - |
Align to Direction | 根据粒子的初始行进方向定向粒子 | - |
Randomize Direction | 将粒子方向朝随机方向混合 | 设置为 0 时,此设置不起作用; 设置为 1 时,粒子方向完全随机 |
Spherize Direction | 将粒子方向朝球面方向混合,从它们的变换中心向外行进 | 设置为 0 时,此设置不起作用; 设置为 1 时,粒子方向从中心向外(与 Shape 设置为 Sphere 时的行为相同) |
Randomize Position | 以随机量移动粒子,直至达到指定值 | 此属性设置为 0 时,此设置不起作用; 任何其他值都会对粒子的生成位置应用一些随机性 |
Angle | 锥体在其顶点处的角度 | 角度为 0 时产生圆柱体, 角度为 90 度时产生圆盘 |
Arc | 形成发射器形状的整圆的角部 | - |
Mode | 定义 Unity 如何在形状的弧形或半径周围生成粒子 |
|
Spread | 弧形或半径周围可产生粒子的离散间隔 | 例如,值为 0 表示允许在弧形或半径周围的任何位置生成粒子,值为 0.1 表示仅在形状周围或半径上以 10% 的间隔生成粒子 |
Speed | 发射位置围绕弧形或半径移动的速度 | 使用值字段旁边的小黑色下拉菜单将此属性设置为Constant 可使值始终保持不变,设置为Curve 可使值随时间变化。仅当Mode 设置为Random 以外的其他设置时,此选项才可用 |
Length | 锥体的长度 | 仅当Emit from: 属性设置为Volume 时,此选项才适用 |
Emit from: | 锥体或盒体发射粒子的部分 |
|
Type | 指定从何处发射粒子(针对Mesh 、Sprite 相关模式) |
|
Single Material | 指定是否从特定子网格(由材质索引号标识)发射粒子 | 启用此属性后会显示数字字段,可指定材质索引号 |
Use Mesh Colors | 使用网格顶点颜色调整粒子颜色,或者,如果顶点颜色不存在,则使用材质中的着色器颜色属性“Color“或”TintColor” | - |
Normal Offset | 在距离网格或精灵表面多远处发射粒子(在表面法线的方向上) | - |
UV Channel | 选择将源网格上的哪个 UV 通道用于对纹理进行采样 | - |
4.Velocity over Lifetime 模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Linear X, Y, Z | 粒子在X、Y和Z轴上的线性速度 | - |
Space | 指定Linear X, Y, Z 轴是参照本地空间还是世界空间 | 本地空间:粒子速度参照粒子系统的父对象坐标系 世界空间:粒子速度参照整个游戏世界的坐标系 |
Orbital X, Y, Z | 粒子围绕X、Y和Z轴的轨道速度 | - |
Offset X, Y, Z | 轨道中心的位置,适用于轨道运行粒子 | - |
Radial | 粒子远离/朝向中心位置的径向速度 | - |
Speed Modifier | 在当前行进方向上/周围向粒子的速度应用一个乘数 | 数值,例如0.5表示将粒子速度乘以0.5,使速度减半;2表示速度加倍等 |
5.Noise 模块
属性 | 功能 |
---|---|
Separate Axes | 在每个轴上独立控制强度和重新映射。 |
Strength | 通过一条曲线定义噪声在粒子的生命周期内对粒子的影响有多强。值越高,粒子移动越快和越远。 |
Frequency | 低值会产生柔和、平滑的噪声,而高值会产生快速变化的噪声。此属性可控制粒子改变行进方向的频率以及方向变化的突然程度。 |
Scroll Speed | 随着时间的推移而移动噪声场可产生更不可预测和不稳定的粒子移动。 |
Damping | 启用此属性后,强度与频率成正比。将这些值绑在一起意味着可在保持相同行为但具有不同大小的同时缩放噪声场。 |
Octaves | 指定组合多少层重叠噪声来产生最终噪声值。使用更多层可提供更丰富、更有趣的噪声,但会显著增加性能成本。 |
Octave Multiplier | 对于每个附加的噪声层,按此比例降低强度。 |
Octave Scale | 对于每个附加的噪声层,按此乘数调整频率。 |
Quality | 较低的质量设置可显著降低性能成本,但也会影响噪声的有趣程度。请使用能为您提供所需行为的最低质量以获得最佳性能。 |
Remap | 将最终噪声值重新映射到不同的范围。 |
Remap Curve | 描述最终噪声值如何变换的曲线。例如,可使用此选项来创建从高点开始并以零结束的曲线,从而选择噪声场的较低范围并忽略较高范围。 |
Position Amount | 用于控制噪声对粒子位置影响程度的乘数。 |
Rotation Amount | 用于控制噪声对粒子旋转(以度/秒为单位)影响程度的乘数。 |
Size Amount | 用于控制噪声对粒子大小影响程度的乘数。 |
6.Limit Velocity Over Lifetime 模块
属性 | 功能 |
---|---|
Separate Axes | 将轴拆分为单独的 X、Y 和 Z 分量。 |
Speed | 设置粒子的速度限制。 |
Space | 选择速度限制是适用局部空间还是世界空间。仅当启用了 Separate Axes 时,此选项才可用。 |
Dampen | 当粒子速度超过速度限制时,粒子速度降低的比例。 |
Drag | 对粒子速度施加线性阻力。 |
Multiply by Size | 启用此属性后,较大的粒子会更大程度上受到阻力系数的影响。 |
Multiply by Velocity | 启用此属性后,较快的粒子会更大程度上受到阻力系数的影响。 |
7.Inherit Velocity 模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Mode | 指定如何将发射器速度应用于粒子 | Current 发射器的当前速度将应用于每一帧上的所有粒子。例如,如果发射器减速,所有粒子也将减速。Initial 每个粒子出生时将施加一次发射器的速度。粒子出生后对发射器速度的任何改变都不会影响该粒子。 |
Multiplier | 粒子应该继承的发射器速度的比例。 |
8.Force Over Lifetime 模块
属性 | 功能 |
---|---|
X, Y, Z | 在 X、Y 和 Z 轴上施加到每个粒子的力。 |
Space | 选择是在局部空间还是在世界空间中施力。 |
Randomize | 使用 Two Constants 或 Two Curves 模式时,此属性会导致在每个帧上在定义的范围内选择新的作用力方向。因此会产生更动荡、更不稳定的运动。 |
9.Color Over Lifetime 模块
属性 | 功能 |
---|---|
Color | 粒子在其生命周期内的颜色渐变。渐变条的左侧点表示粒子寿命的开始,而渐变条的右侧表示粒子寿命的结束。例如,粒子可能从橙色开始,随着时间的推移逐渐变淡,并在其寿命结束时不可见。 |
10.Color By Speed 模块
属性 | 功能 |
---|---|
Color | 在速度范围内定义的粒子的颜色渐变。 |
Speed Range | 颜色渐变映射到的速度范围的下限和上限(超出范围的速度将映射到渐变的端点)。 |
11.Size over Lifetime 模块
属性 | 功能 |
---|---|
Separate Axes | 在每个轴上独立控制粒子大小。 |
Size | 通过一条曲线定义粒子的大小在其生命周期内如何变化。 |
12、Size by Speed 模块
属性 | 功能 |
---|---|
Separate Axes | 在每个轴上独立控制粒子大小。 |
Size | 通过曲线定义粒子在速度范围内的大小。 |
Speed Range | 大小曲线映射到的速度范围的下限和上限(超出范围的速度将映射到曲线的端点)。 |
13.Rotation Over Lifetime 模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Separate Axes | 允许根据每个轴指定旋转。启用此选项后,即可为 X、Y 和 Z 轴中的每个轴设置旋转。 | - |
Angular Velocity | 旋转速度(以度/秒为单位)。请参阅下文以了解更多信息。 |
|
14.Rotation By Speed 模块
属性 | 功能 |
---|---|
Separate Axes | 为每个旋转轴独立控制旋转。 |
Angular Velocity | 旋转速度(以度/秒为单位)。 |
Speed Range | 大小曲线映射到的速度范围的下限和上限(超出范围的速度将映射到曲线的端点)。 |
15.External Forces 模块
属性 | 功能 |
---|---|
Multiplier | 应用于风区外力的比例值。 |
Influence Filter | 选择是否基于__层遮罩 (Layer Mask)__ 或通过显式__列表 (List)__ 包含力场。 |
List | 定义可影响此粒子系统的力场的显式列表。当 Influence Filter 设置为 List 时,将显示此属性。 |
Influence Mask | 使用层遮罩来确定哪些力场影响此粒子系统。当 Influence Filter 设置为 Layer Mask 时,将显示此属性。 |
16.Collision 模块
16.1.Planes模式
属性 | 功能 |
---|---|
Planes 弹出菜单 | 选择 Planes 模式。 |
Planes | 用于定义碰撞平面的变换的可扩展列表。 |
Visualization | 选择要将 Scene 视图中的碰撞平面辅助图标显示为线框网格还是实体平面。 |
Scale Plane | 用于可视化的平面大小。 |
Dampen | 粒子碰撞后损失的速度比例。 |
Bounce | 粒子碰撞后从表面反弹的速度比例。 |
Lifetime Loss | 粒子碰撞后损失的总生命周期比例。 |
Min Kill Speed | 碰撞后运动速度低于此速度的粒子将从系统中予以移除。 |
Max Kill Speed | 碰撞后运动速度高于此速度的粒子将从系统中予以移除。 |
Radius Scale | 允许调整粒子碰撞球体的半径,使其更贴近粒子图形的可视边缘。 |
Send Collision Messages | 如果启用此属性,则可从脚本中通过 OnParticleCollision 函数检测粒子碰撞。 |
Visualize Bounds | 在 Scene 视图中将每个粒子的碰撞边界渲染为线框形状。 |
16.2.World模式
属性 | 功能 | 可选值及说明 |
---|---|---|
World 弹出菜单 | 选择World 模式 | / |
Collision Mode | 设置碰撞模式为3D或2D | 3D、2D |
Dampen | 粒子碰撞后损失的速度比例 | / |
Bounce | 粒子碰撞后从表面反弹的速度比例 | / |
Lifetime Loss | 粒子碰撞后损失的总生命周期比例 | / |
Min Kill Speed | 碰撞后运动速度低于此速度的粒子将从系统中予以移除 | / |
Max Kill Speed | 碰撞后运动速度高于此速度的粒子将从系统中予以移除 | / |
Radius Scale | 2D或3D的设置 | / |
Collision Quality | 使用下拉选单来设置粒子碰撞的质量,影响有多少粒子可以穿过碰撞体以及计算资源的消耗 |
|
Collides With | 粒子只会与所选层上的对象发生碰撞 | / |
Max Collision Shapes | 粒子碰撞可包括的碰撞形状个数,多余的形状将被忽略,且地形优先 | / |
Enable Dynamic Colliders | 勾选此选项可将动态碰撞体包括在粒子响应碰撞的对象集中,否则粒子仅响应静态碰撞体的碰撞 | True 、False |
Voxel Size | 使用Medium 或Low 质量碰撞时,Unity会在网格结构中缓存碰撞,此设置控制着网格大小 | / |
Collider Force | 在粒子碰撞后对物理碰撞体施力 | / |
Multiply by Collision Angle | 向碰撞体施力时,根据粒子与碰撞体之间的碰撞角度来缩放力的强度 | / |
Multiply by Particle Speed | 向碰撞体施力时,根据粒子的速度来缩放力的强度 | / |
Multiply by Particle Size | 向碰撞体施力时,根据粒子的大小来缩放力的强度 | / |
Send Collision Messages | 如果选中此复选框,则允许从脚本中通过OnParticleCollision 函数检测粒子碰撞 | True 、False |
Visualize Bounds | 在Scene 视图中预览每个粒子的碰撞球体 | / |
17.Triggers 模块
属性 | 描述 | 可选值及说明 |
---|---|---|
Inside | 指定粒子系统在粒子位于碰撞体内的每一帧对粒子采取的操作 |
|
Outside | 指定粒子系统在粒子位于碰撞体外的每一帧对粒子采取的操作 |
|
Enter | 指定粒子系统在粒子进入碰撞体的帧对粒子采取的操作 |
|
Exit | 指定粒子系统在粒子退出碰撞体的帧对粒子采取的操作 |
|
Collider Query Mode | 指定此粒子系统用于获取有关与粒子交互的碰撞体的信息的方法。这增加了处理触发器模块所需的资源,因此,如果不需要任何额外的碰撞信息,请将此属性设置为 Disabled |
|
Radius Scale | 粒子的碰撞体边界。允许您更紧密地将粒子的碰撞体边界匹配到粒子的视觉外观。如果粒子为圆形且其纹理具有淡入淡出效果,这将很有用,因为默认粒子碰撞体将在粒子达到视觉效果之前位于触发器内。请注意,当事件实际触发时,此设置不会更改,但是可以延迟或提前达到触发器的视觉效果 | 输入 |
Visualize Bounds | 指示是否在 Scene 视图中显示每个粒子的碰撞体边界。启用此属性可显示碰撞体边界,而禁用则可隐藏碰撞体边界 |
|
18.Sub Emitters 模块
属性 | 描述 |
---|---|
Sub Emitters | 配置一个子发射器列表,并选择它们的触发条件以及它们从父粒子继承的属性。 |
要触发子发射器,可使用以下条件:
Birth:粒子的创建时间。
Collision:粒子与对象发生碰撞的时间。
Death:粒子的销毁时间。
Trigger:粒子与触发碰撞体相互作用的时间。
Manual:仅在通过脚本进行请求时触发。请参阅 ParticleSystem.TriggerSubEmitter。
19.Texture Sheet Animation 模块
19.1.Grid 模式属性
属性 | 功能 | 可选值及说明 |
---|---|---|
Mode 弹出菜单 | 选择Grid 模式 | 无 |
Tiles | 纹理在X(水平)和Y(垂直)方向上划分的区块数量 | 无 |
Animation | Animation 模式可设置为Whole Sheet 或Single Row (即精灵图集的每一行代表一个单独的动画序列) |
|
Time Mode | 选择粒子系统如何在动画中对帧进行采样 |
|
Row Mode | 使粒子系统从纹理帧中选择一行以生成动画。仅当Animation 模式设置为Single Row 时,此属性才可用 |
|
Random Row | 随机从精灵图集选择一行以生成动画。仅当Animation 模式设置为Single Row 时,此选项才可用 | 无 |
Row | 从精灵图集选择特定行以生成动画。仅当选择Single Row 模式且禁用Random Row 时,此选项才可用 | 无 |
Frame over Time | 通过一条曲线指定动画帧随着时间的推移如何增加 | 无 |
Start Frame | 允许指定粒子动画应从哪个帧开始(对于在每个粒子上随机定相动画非常有用) | 无 |
Cycles | 动画序列在粒子生命周期内重复的次数 | 无 |
Affected UV Channels | 允许具体指定粒子系统影响的 UV 流 | 无 |
19.2.Sprite 模式属性
属性 | 功能 |
---|---|
Mode 弹出菜单 | 选择Sprites 模式 |
Frame over Time | 通过一条曲线指定动画帧随着时间的推移如何增加 |
Start Frame | 允许指定粒子动画应从哪个帧开始(对于在每个粒子上随机定相动画非常有用) |
Cycles | 动画序列在粒子生命周期内重复的次数 |
Enabled UV Channels | 允许具体指定粒子系统影响的UV流 |
20.Lights 模块
属性 | 功能 |
---|---|
Light | 分配一个光照预制件来描述粒子光照外观。 |
Ratio | 一个介于 0 和 1 之间的值,表示将接受光照的粒子的比例。 |
Random Distribution | 选择是随机分配还是定期分配光照。设置为 true 时,每个粒子都有根据 Ratio 值随机接受光照的机会。较高的值可增加粒子接受光照的概率。设置为 false 时,由 Ratio 控制新创建的粒子接受光照的频率(例如,每第 N 个粒子将接受光照)。 |
Use Particle Color | 设置为 True 时,光照的最终颜色将通过其附加到的粒子的颜色进行调制。如果设置为 False,则使用光照颜色而不进行任何修改。 |
Size Affects Range | 启用此属性后,在光照中指定的__范围 (Range)__ 将受到粒子大小的影响。 |
Alpha Affects Intensity | 启用此属性后,光照的__强度 (Intensity)__ 将受到粒子 Alpha 值的影响。 |
Range Multiplier | 使用此曲线在粒子的生命周期内将一个自定义乘数应用于光照范围。 |
Intensity Multiplier | 使用此曲线在粒子的生命周期内将一个自定义乘数应用于光照强度。 |
Maximum Lights | 使用此设置可避免意外创建大量光照,大量光照可能会使 Editor 无响应或使应用程序运行速度非常慢。 |
21.Trails 模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Mode | 选择如何为粒子系统生成轨迹。 |
|
Ratio | 一个介于 0 和 1 之间的值,表示已分配轨迹的粒子的比例。Unity 随机分配轨迹,因此该值表示概率。 | 取值范围为 0 到 1 的数值 |
Lifetime | 轨迹中每个顶点的生命周期,表示为所属粒子的生命周期的乘数。当每个新顶点添加到轨迹时,该顶点将在其存在时间超过其总生命周期后消失。 | 无 |
Minimum Vertex Distance | 定义粒子在其轨迹接收新顶点之前必须经过的距离。 | 无 |
World Space | 启用此属性后,即便使用 Local Simulation Space ,轨迹顶点也不会相对于粒子系统的游戏对象移动。相反,轨迹顶点将被置于世界空间中,并忽略粒子系统的任何移动。 |
|
Die With Particles | 如果选中此框,轨迹会在粒子死亡时立即消失。如果未选中此框,则剩余的轨迹将根据自身的剩余生命周期自然到期。 |
|
Ribbon Count | 选择要在整个粒子系统中渲染的轨迹带数量。值为 1 将创建连接每个粒子的单个轨迹带。但是,大于 1 的值将创建连接每第 N 个粒子的轨迹带。例如,使用值 2 时,将有一条轨迹带连接粒子 1、3、5,另一条轨迹带连接粒子 2、4、6,以此类推。粒子的排序取决于它们的存活时间。 | 正整数 |
Split Sub Emitter Ribbons | 在用作子发射器的系统上启用此属性时,从同一父系统粒子生成的粒子将共享一个轨迹带。 |
|
Texture Mode | 选择如何将纹理应用于粒子轨迹。 |
|
Size affects Width | 如果启用此属性(选中复选框),则轨迹宽度受粒子大小影响。 |
|
Size affects Lifetime | 如果启用此属性(选中复选框),则轨迹生命周期受粒子大小影响。 |
|
Inherit Particle Color | 如果启用此属性(选中复选框),则轨迹颜色由粒子颜色调制。 |
|
Color over Lifetime | 通过一条曲线控制整个轨迹在其附着粒子的整个生命周期内的颜色。 | 无 |
Width over Trail | 通过一条曲线控制轨迹沿其长度的宽度。 | 无 |
Color over Trail | 通过一条曲线控制轨迹沿其长度的颜色。 | 无 |
Generate Lighting Data | 通过启用此属性(选中复选框),可在构建轨迹几何体时包含法线和切线。这样允许它们使用具有场景光照的材质,例如通过标准着色器,或通过使用自定义着色器。 |
|
Shadow Bias | 文档未明确说明该属性具体功能,推测与轨迹阴影的偏移等相关 | 无 |
22.Renderer 模块
属性 | 功能 | 可选值及说明 |
---|---|---|
Render Mode | 如何从图形图像(或网格)生成渲染图像 |
|
Normal Direction | 用于粒子图形的光照法线的偏差 | 值为 1.0 表示法线指向摄像机,值为 0.0 表示法线指向屏幕中心(仅限公告牌模式) |
Material | 用于渲染粒子的材质 | / |
Trail Material | 用于渲染粒子轨迹的材质 | 仅当启用了 Trails 模块时可用 |
Sort Mode | 绘制粒子(因此覆盖粒子)的顺序 |
|
Sorting Fudge | 粒子系统排序的偏差 | 较低的值会增加粒子系统在其他透明游戏对象(包括其他粒子系统)上绘制的相对几率,仅影响整个系统在场景中的显示位置,不影响系统中单个粒子的排序 |
Min Particle Size | 最小粒子大小(无论其他设置如何),表示为视口大小的一个比例 | 仅当 Rendering Mode 设置为 Billboard 时应用 |
Max Particle Size | 最大粒子大小(无论其他设置如何),表示为视口大小的一个比例 | 仅当 Rendering Mode 设置为 Billboard 时应用 |
Render Alignment | 使用下拉选单选择粒子公告牌面向的方向 |
|
Enable GPU Instancing | 控制是否要使用 GPU 实例化来渲染粒子系统 | 需要使用网格渲染模式并使用兼容的着色器 |
Flip | 在指定轴上镜像一定比例的粒子 | 较高的值会翻转更多的粒子 |
Allow Roll | 控制面向摄像机的粒子是否可以围绕摄像机的 Z 轴旋转 | 禁用此属性对于 VR 应用特别有用,因为 HMD 滚动可能会给粒子系统带来不良后果 |
Pivot | 修改旋转粒子的中心轴心点 | 此值是粒子大小的乘数 |
Visualize Pivot | 在 Scene 视图中预览粒子轴心点 | / |
Masking | 设置粒子系统渲染的粒子在与精灵遮罩交互时的行为方式 | |
Apply Active Color Space | 在线性颜色空间中渲染时,系统会在将粒子颜色上传到 GPU 之前从伽马空间转换粒子颜色 | / |
Custom Vertex Streams | 配置材质的顶点着色器中可用的粒子属性 | 有关更多详细信息,请参阅粒子顶点流 |
Cast Shadows | 如果启用此属性,阴影投射光源照在粒子系统上时将产生阴影 |
|
Shadow Bias | 沿着光照方向移动阴影以消除因使用公告牌来模拟体积而导致的阴影瑕疵 | / |
Receive Shadows | 决定阴影是否可投射到粒子上 | 只有不透明材质才能接受阴影 |
Sorting Layer | 渲染器排序图层的名称 | / |
Order in Layer | 此渲染器在排序图层中的顺序 | / |
Light Probes | 基于探针的光照插值模式 | / |
Reflection Probes | 如果启用此属性,并且场景中存在反射探针,则会为此游戏对象拾取反射纹理,并将此纹理设置为内置的着色器 uniform 变量 | / |
Anchor Override | 使用光照探针或反射探针系统时用变换来确定插值位置 | / |
二、常用参数和方法解析(待更新)
- 获取组件与模块:通过
GetComponent<ParticleSystem>()
获取粒子系统组件,再通过main
、emission
等属性获取粒子系统的各个模块。 - 常用参数设置:
mainModule.startSpeed
:设置粒子的起始速度。mainModule.startSize
:设置粒子的起始大小。mainModule.startColor
:设置粒子的起始颜色。mainModule.loop
:设置粒子系统是否循环播放。emissionModule.rateOverTime
:设置每秒发射的粒子数量。sizeOverLifetimeModule.size
:通过AnimationCurve
控制粒子大小随时间的变化。
- 常用方法调用:
particleSys.Play()
:播放粒子系统。particleSys.Stop()
:停止粒子系统。particleSys.Clear()
:清除所有粒子。
示例代码
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Events;
namespace LumberDemo
{
public class PatticleTool : MonoBehaviour
{
[Header("开启粒子触发进入事件")]
public bool IsOpenEnter = false;
[Header("开启粒子触发退出事件")]
public bool IsOpenExit = false;
[Header("开启粒子位于碰撞体内时触发事件")]
public bool IsOpenInside = false;
[Header("开启粒子位于碰撞体外时触发事件")]
public bool IsOpenOutside = false;
protected ParticleSystem particle;
List<ParticleSystem.Particle> inside;
List<ParticleSystem.Particle> enter;
List<ParticleSystem.Particle> outside;
List<ParticleSystem.Particle> exit;
private UnityEvent<List<ParticleSystem.Particle>> _triggerInsideEvent;
private UnityEvent<List<ParticleSystem.Particle>> _triggerEnterEvent;
private UnityEvent<List<ParticleSystem.Particle>> _triggerOutsideEvent;
private UnityEvent<List<ParticleSystem.Particle>> _triggerExitEvent;
private UnityEvent<GameObject> _onCollisionEvent;
private void Awake()
{
Init();
}
public UnityEvent<List<ParticleSystem.Particle>> OnTriggerInsideEvent
{
get
{
if (_triggerInsideEvent == null)
{
_triggerInsideEvent = new UnityEvent<List<ParticleSystem.Particle>>();
}
return _triggerInsideEvent;
}
}
public UnityEvent<List<ParticleSystem.Particle>> OnTriggerOutsideEvent
{
get
{
if (_triggerOutsideEvent == null)
{
_triggerOutsideEvent = new UnityEvent<List<ParticleSystem.Particle>>();
}
return _triggerOutsideEvent;
}
}
public UnityEvent<List<ParticleSystem.Particle>> OnTriggerEnterEvent
{
get
{
if (_triggerEnterEvent == null)
{
_triggerEnterEvent = new UnityEvent<List<ParticleSystem.Particle>>();
}
return _triggerEnterEvent;
}
}
public UnityEvent<List<ParticleSystem.Particle>> OnTriggerExitEvent
{
get
{
if (_triggerExitEvent == null)
{
_triggerExitEvent = new UnityEvent<List<ParticleSystem.Particle>>();
}
return _triggerExitEvent;
}
}
public UnityEvent<GameObject> OnCollisionEvent
{
get
{
if (_onCollisionEvent == null)
{
_onCollisionEvent = new UnityEvent<GameObject>();
}
return _onCollisionEvent;
}
}
/// <summary>
/// 初始化
/// </summary>
private void Init()
{
particle = GetComponent<ParticleSystem>();
if (!(IsOpenEnter || IsOpenExit || IsOpenInside || IsOpenOutside))
{
return;
}
if (IsOpenInside)
inside = new List<ParticleSystem.Particle>();
if (IsOpenEnter)
enter = new List<ParticleSystem.Particle>();
if (IsOpenExit)
exit = new List<ParticleSystem.Particle>();
if (IsOpenOutside)
outside = new List<ParticleSystem.Particle>();
}
/// <summary>
/// 添加粒子触发体
/// </summary>
/// <param name="colliderTrs"></param>
public void AddPatticleCollider(Transform colliderTrs)
{
particle.trigger.AddCollider(colliderTrs);
}
int insideNum;
int enterNum;
int exitNum;
int outsideNum;
/// <summary>
/// 设置粒子触发
/// </summary>
protected virtual void OnParticleTrigger()
{
if (IsOpenInside)
{
insideNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside);
if (insideNum > 0)
OnInSideTrigger(inside);
//将修改后的粒子重新分配回粒子系统
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside);
}
if (IsOpenEnter)
{
enterNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
if (enterNum > 0)
OnEnterTrigger(inside);
// 将修改后的粒子重新分配回粒子系统
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
}
if (IsOpenExit)
{
exitNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
if (exitNum > 0)
OnExitTrigger(inside);
// 将修改后的粒子重新分配回粒子系统
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
}
if (IsOpenOutside)
{
outsideNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Outside, outside);
if (outsideNum > 0)
OnOutsideTrigger(inside);
// 将修改后的粒子重新分配回粒子系统
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Outside, outside);
}
}
private void OnInSideTrigger(List<ParticleSystem.Particle> inside)
{
if (IsOpenInside)
OnTriggerInsideEvent?.Invoke(inside);
}
private void OnEnterTrigger(List<ParticleSystem.Particle> inside)
{
if (IsOpenEnter)
OnTriggerEnterEvent?.Invoke(inside);
}
private void OnExitTrigger(List<ParticleSystem.Particle> inside)
{
if (IsOpenExit)
OnTriggerExitEvent?.Invoke(inside);
}
private void OnOutsideTrigger(List<ParticleSystem.Particle> inside)
{
if (IsOpenOutside)
OnTriggerOutsideEvent?.Invoke(inside);
}
private void OnParticleCollision(GameObject other)
{
OnCollisionEvent?.Invoke(other);
}
}
}