当前位置: 首页 > article >正文

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 TimeScaledUnscaled之间进行选择,其中的Scaled使用Time窗口中的Time Scale值,而Unscaled将忽略该值。此属性对于出现在暂停菜单 (Pause Menu) 上的粒子系统非常有用

Scaled:使用Time窗口中的Time Scale
Unscaled:忽略Time Scale

Scaling Mode选择如何使用变换中的缩放。设置为HierarchyLocalShapeLocal仅应用粒子系统变换缩放,忽略任何父级。Shape模式将缩放应用于粒子起始位置,但不影响粒子大小

Hierarchy:按层级缩放
Local:仅应用粒子系统变换缩放,忽略任何父级
Shape:将缩放应用于粒子起始位置,但不影响粒子大小

Play on Awake如果启用此属性,则粒子系统会在创建对象时自动启动-
Emitter Velocity选择粒子系统如何计算Inherit VelocityEmission模块使用的速度。系统可使用刚体组件(如果存在)或通过跟踪变换组件的移动情况来计算速度-
Max Particles系统中同时允许的最多粒子数。如果达到限制,则移除一些粒子-
Auto Random Seed如果启用此属性,则每次播放时粒子系统看起来都会不同。设置为false时,每次播放时系统都完全相同-
Random Seed禁用自动随机种子时,此值用于创建唯一的可重复效果-
Stop Action当属于系统的所有粒子都已完成时,可使系统执行某种操作。当一个系统的所有粒子都已死亡,并且系统存活时间已超过Duration设定的值时,判定该系统已停止。对于循环系统,只有在通过脚本停止系统时才会发生这种情况

Disable:禁用游戏对象
Destroy:销毁游戏对象
Callback:将OnParticleSystemStopped回调发送给附加到游戏对象的任何脚本

Culling Mode选择粒子在屏幕外时是否暂停粒子系统模拟。在屏幕外时进行剔除具有最高效率,但您可能希望继续进行非一次性 (off-one) 效果的模拟

Automatic:循环系统使用Pause,而所有其他系统使用Always Simulate
Pause And Catch-up:系统在屏幕外时停止模拟。当重新进入视图时,模拟会执行一大步以到达在不暂停的情况下可实现的程度。在复杂系统中,此选项可能会导致性能尖峰
Pause:系统在屏幕外时停止模拟
Always Simulate:无论是否在屏幕上,系统始终处理每个帧的模拟。这对于烟花等一次性效果(在模拟过程中这些效果很明显)非常有用

Ring Buffer Mode-

Disabled:禁用Ring Buffer Mode,以便系统在粒子生命周期终结时删除粒子
Pause Until Replaced:在粒子生命周期结束时暂停旧粒子,直至达到Max Particle限制,此时系统会进行粒子再循环,因此旧粒子会重新显示为新粒子
Loop Until Replaced:在粒子生命周期结束时,粒子将倒回到其生命周期的指定比例,直至达到Max Particle限制,此时系统会进行粒子再循环,因此旧粒子会重新显示为新粒子

2.Emission 模块

属性功能可选值及说明
Rate over Time每个时间单位发射的粒子数。-
Rate over Distance每个移动距离单位发射的粒子数。-
Bursts爆发是指生成粒子的事件。通过这些设置可允许在指定时间发射粒子。

Time:设置发射爆发粒子的时间(粒子系统开始播放后的秒数)。
Count:设置可能发射的粒子数的值。
Cycles:设置播放爆发次数的值。
Interval:设置触发每个爆发周期的间隔时间(以秒为单位)的值。
Probability:控制每个爆发事件生成粒子的可能性。较高的值使系统产生更多的粒子,而值为 1 将保证系统产生粒子。

3.Shape 模块

属性功能可选值及说明
Shape发射体积的形状

Sphere:在所有方向均匀发射粒子
Hemisphere:在平面其中一面的所有方向均匀发射粒子
Cone:从锥体的底部或主体发射粒子,根据粒子与锥体中心线的距离按比例发射粒子
Box:从盒体形状的边、表面或主体发射粒子,粒子在发射器对象的前向 (Z) 方向上移动
Mesh:从Inspector中提供的任意网格形状发射粒子
MeshRenderer:从引用的游戏对象网格渲染器 (Mesh Renderer) 发射粒子
SkinnedMeshRenderer:从引用的游戏对象带蒙皮的网格渲染器 (Skinned Mesh Renderer) 发射粒子
Sprite:从Inspector中提供的精灵形状发射粒子
SpriteRenderer:从引用的游戏对象精灵渲染器 (Sprite Renderer) 发射粒子
Circle:从圆形的中心或边缘均匀发射粒子,粒子仅在圆形的平面内移动
Edge:从线段发射粒子,粒子在发射器对象的向上 (Y) 方向上移动
Donut:从环面发射粒子,粒子从环面的环向外移动
Rectangle:从矩形发射粒子,粒子从矩形向上移动

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 如何在形状的弧形或半径周围生成粒子

Random:在弧形或半径周围随机生成粒子
Loop:在形状的弧形或半径周围依序生成粒子,并在每个周期结束时循环回到起点
Ping - Pong:与Loop基本相同,不同之处在于每个连续循环的发生方向与上一个循环相反
Burst Spread:在形状周围均匀分布粒子生成位置,最适合与爆发发射一起使用

Spread弧形或半径周围可产生粒子的离散间隔

例如,值为 0 表示允许在弧形或半径周围的任何位置生成粒子,值为 0.1 表示仅在形状周围或半径上以 10% 的间隔生成粒子

Speed发射位置围绕弧形或半径移动的速度使用值字段旁边的小黑色下拉菜单将此属性设置为Constant可使值始终保持不变,设置为Curve可使值随时间变化。仅当Mode设置为Random以外的其他设置时,此选项才可用
Length锥体的长度仅当Emit from:属性设置为Volume时,此选项才适用
Emit from:锥体或盒体发射粒子的部分

BaseVolume(用于锥体);
EdgeShellVolume(用于盒体)

Type指定从何处发射粒子(针对MeshSprite相关模式)

Vertex:从顶点发射粒子
Edge:从边发射粒子
Triangle:从三角形发射粒子。默认情况下,此设置为Vertex

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旋转速度(以度/秒为单位)。请参阅下文以了解更多信息。

Constant:粒子旋转的速度,以度/秒为单位。
Curve:角速度可设定为在粒子的生命周期内变化。Inspector 底部会出现一个曲线编辑器,可用于控制粒子在整个生命周期内的速度变化情况(若勾选了 Separate Axes 复选框,则可为每个 X、Y 和 Z 轴赋予曲线速度值)。
Random Between Two Constants:角速度属性具有两个角度,允许在它们之间旋转。
Random Between Two Curves:角速度可设定为在粒子的生命周期(由曲线指定)内变化。在此模式下,两条曲线均为可编辑状态,每个粒子将在您定义的这两条曲线的范围之间选择一条随机曲线。

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 BoundsScene 视图中将每个粒子的碰撞边界渲染为线框形状。

16.2.World模式

属性功能可选值及说明
World弹出菜单选择World模式/
Collision Mode设置碰撞模式为3D或2D3D、2D
Dampen粒子碰撞后损失的速度比例/
Bounce粒子碰撞后从表面反弹的速度比例/
Lifetime Loss粒子碰撞后损失的总生命周期比例/
Min Kill Speed碰撞后运动速度低于此速度的粒子将从系统中予以移除/
Max Kill Speed碰撞后运动速度高于此速度的粒子将从系统中予以移除/
Radius Scale2D或3D的设置/
Collision Quality使用下拉选单来设置粒子碰撞的质量,影响有多少粒子可以穿过碰撞体以及计算资源的消耗

High:碰撞始终使用物理系统来检测碰撞结果,最耗费资源但最准确。
Medium (Static Colliders):碰撞使用一组体素来缓存先前的碰撞,以在以后的帧中更快地重用,仅适用于静态碰撞体,每帧查询物理系统的次数多于Low
Low (Static Colliders):与Medium类似,使用体素缓存碰撞,仅适用于静态碰撞体,每帧查询物理系统的次数少于Medium

Collides With粒子只会与所选层上的对象发生碰撞/
Max Collision Shapes粒子碰撞可包括的碰撞形状个数,多余的形状将被忽略,且地形优先/
Enable Dynamic Colliders勾选此选项可将动态碰撞体包括在粒子响应碰撞的对象集中,否则粒子仅响应静态碰撞体的碰撞TrueFalse
Voxel Size使用MediumLow质量碰撞时,Unity会在网格结构中缓存碰撞,此设置控制着网格大小/
Collider Force在粒子碰撞后对物理碰撞体施力/
Multiply by Collision Angle向碰撞体施力时,根据粒子与碰撞体之间的碰撞角度来缩放力的强度/
Multiply by Particle Speed向碰撞体施力时,根据粒子的速度来缩放力的强度/
Multiply by Particle Size向碰撞体施力时,根据粒子的大小来缩放力的强度/
Send Collision Messages如果选中此复选框,则允许从脚本中通过OnParticleCollision函数检测粒子碰撞TrueFalse
Visualize BoundsScene视图中预览每个粒子的碰撞球体/

17.Triggers 模块

属性描述可选值及说明
Inside指定粒子系统在粒子位于碰撞体内的每一帧对粒子采取的操作

Callback:将粒子添加到可在 OnParticleTrigger() 回调中获取的列表中
Kill:销毁粒子
Ignore:忽略粒子

Outside指定粒子系统在粒子位于碰撞体外的每一帧对粒子采取的操作

Callback:将粒子添加到可在 OnParticleTrigger() 回调中获取的列表中
Kill:销毁粒子
Ignore:忽略粒子

Enter指定粒子系统在粒子进入碰撞体的帧对粒子采取的操作

Callback:将粒子添加到可在 OnParticleTrigger() 回调中获取的列表中
Kill:销毁粒子
Ignore:忽略粒子

Exit指定粒子系统在粒子退出碰撞体的帧对粒子采取的操作

Callback:将粒子添加到可在 OnParticleTrigger() 回调中获取的列表中
Kill:销毁粒子
Ignore:忽略粒子

Collider Query Mode指定此粒子系统用于获取有关与粒子交互的碰撞体的信息的方法。这增加了处理触发器模块所需的资源,因此,如果不需要任何额外的碰撞信息,请将此属性设置为 Disabled

Disabled:没有获取关于每个粒子与哪个碰撞体交互的任何信息
One:获取有关每个粒子交互的第一个碰撞体的信息。如果粒子与帧中的多个碰撞体交互,则返回 Collider 列表中与粒子交互的第一个碰撞体
All:获取有关每个粒子交互的每个碰撞体的信息

Radius Scale粒子的碰撞体边界。允许您更紧密地将粒子的碰撞体边界匹配到粒子的视觉外观。如果粒子为圆形且其纹理具有淡入淡出效果,这将很有用,因为默认粒子碰撞体将在粒子达到视觉效果之前位于触发器内。请注意,当事件实际触发时,此设置不会更改,但是可以延迟或提前达到触发器的视觉效果

输入 1:可以使粒子碰撞体保持同一大小,并使事件在粒子接触碰撞体时发生
输入小于 1 的值:可以使粒子碰撞体更小,并使触发看起来是在粒子穿透碰撞体之前发生
输入大于 1 的值:可以使粒子碰撞体更大,并使触发看起来是在粒子穿透碰撞体之后发生

Visualize Bounds指示是否在 Scene 视图中显示每个粒子的碰撞体边界。启用此属性可显示碰撞体边界,而禁用则可隐藏碰撞体边界

True(启用):在 Scene 视图中显示碰撞体边界
False(禁用):在 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(垂直)方向上划分的区块数量
AnimationAnimation模式可设置为Whole SheetSingle Row(即精灵图集的每一行代表一个单独的动画序列)

Whole Sheet:将整个精灵图集作为一个动画序列
Single Row:精灵图集的每一行代表一个单独的动画序列

Time Mode选择粒子系统如何在动画中对帧进行采样

Lifetime:在粒子的生命周期内使用动画曲线对帧进行采样
Speed:根据粒子的速度对帧进行采样。速度范围指定选择帧的最小和最大速度范围
FPS:根据指定的每秒帧数值对帧进行采样

Row Mode使粒子系统从纹理帧中选择一行以生成动画。仅当Animation模式设置为Single Row时,此属性才可用

Custom:将纹理帧的特定行用于动画
Random:为每个粒子随机选择一行来生成动画
Mesh Index:根据分配给粒子的网格索引 (Mesh Index) 选择一行。需要确保使用特定网格的粒子也要使用相同的纹理时,此功能很有用

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选择如何为粒子系统生成轨迹。

Particle 模式:可创建每个粒子在自身路径中留下固定轨迹的效果。
Ribbon 模式:可创建根据存活时间连接每个粒子的轨迹带。

Ratio一个介于 0 和 1 之间的值,表示已分配轨迹的粒子的比例。Unity 随机分配轨迹,因此该值表示概率。

取值范围为 0 到 1 的数值

Lifetime轨迹中每个顶点的生命周期,表示为所属粒子的生命周期的乘数。当每个新顶点添加到轨迹时,该顶点将在其存在时间超过其总生命周期后消失。

Minimum Vertex Distance定义粒子在其轨迹接收新顶点之前必须经过的距离。

World Space启用此属性后,即便使用 Local Simulation Space,轨迹顶点也不会相对于粒子系统的游戏对象移动。相反,轨迹顶点将被置于世界空间中,并忽略粒子系统的任何移动。

true:启用,轨迹顶点置于世界空间
false:禁用,轨迹顶点相对粒子系统游戏对象移动

Die With Particles如果选中此框,轨迹会在粒子死亡时立即消失。如果未选中此框,则剩余的轨迹将根据自身的剩余生命周期自然到期。

true:轨迹随粒子死亡立即消失
false:轨迹按自身剩余生命周期自然到期

Ribbon Count选择要在整个粒子系统中渲染的轨迹带数量。值为 1 将创建连接每个粒子的单个轨迹带。但是,大于 1 的值将创建连接每第 N 个粒子的轨迹带。例如,使用值 2 时,将有一条轨迹带连接粒子 1、3、5,另一条轨迹带连接粒子 2、4、6,以此类推。粒子的排序取决于它们的存活时间。

正整数

Split Sub Emitter Ribbons在用作子发射器的系统上启用此属性时,从同一父系统粒子生成的粒子将共享一个轨迹带。

true:启用,同一父系统粒子生成的粒子共享轨迹带
false:禁用,不共享轨迹带

Texture Mode选择如何将纹理应用于粒子轨迹。

Stretch 模式:将纹理沿轨迹的整个长度拉伸。
Tile 模式:每 N 个距离单位重复一次纹理。重复率基于材质中的 Tiling 参数控制。
Repeat per Segment 模式:沿轨迹重复纹理,每段轨迹重复一次。重复率基于材质中的 Tiling 参数控制。
Distribute per Segment 模式:将纹理一次性映射到轨迹的整个长度,并假设所有顶点均匀分布。

Size affects Width如果启用此属性(选中复选框),则轨迹宽度受粒子大小影响。

true:轨迹宽度受粒子大小影响
false:轨迹宽度不受粒子大小影响

Size affects Lifetime如果启用此属性(选中复选框),则轨迹生命周期受粒子大小影响。

true:轨迹生命周期受粒子大小影响
false:轨迹生命周期不受粒子大小影响

Inherit Particle Color如果启用此属性(选中复选框),则轨迹颜色由粒子颜色调制。

true:轨迹颜色由粒子颜色调制
false:轨迹颜色不受粒子颜色影响

Color over Lifetime通过一条曲线控制整个轨迹在其附着粒子的整个生命周期内的颜色。

Width over Trail通过一条曲线控制轨迹沿其长度的宽度。

Color over Trail通过一条曲线控制轨迹沿其长度的颜色。

Generate Lighting Data通过启用此属性(选中复选框),可在构建轨迹几何体时包含法线和切线。这样允许它们使用具有场景光照的材质,例如通过标准着色器,或通过使用自定义着色器。

true:构建轨迹几何体时包含法线和切线
false:构建轨迹几何体时不包含法线和切线

Shadow Bias文档未明确说明该属性具体功能,推测与轨迹阴影的偏移等相关

22.Renderer 模块

属性功能可选值及说明
Render Mode如何从图形图像(或网格)生成渲染图像

Billboard:粒子呈现为公告牌并面向在 Render Alignment 中指定的方向。
Stretched Billboard:粒子面向摄像机,但会应用各种缩放。
Camera Scale:根据摄像机运动拉伸粒子,设置为 0 可禁用摄像机运动拉伸。
Velocity Scale:根据粒子速度按比例拉伸粒子,设置为 0 可禁用基于速度的拉伸。
Length Scale:沿着粒子的速度方向根据粒子当前大小按比例拉伸粒子,设置为 0 会使粒子消失。
Freeform Stretching:指示粒子是否应使用自由形式拉伸,启用后正面查看粒子时不会变薄。
Rotate With Stretch:指示是否根据粒子的拉伸方向旋转粒子,仅在 Freeform Stretching 启用时有效;禁用 Freeform Stretching 时,粒子总是根据拉伸方向旋转,即使此属性禁用也是如此。
Horizontal Billboard:粒子平面与 XZ“地板”平面平行。
Vertical Billboard:粒子在世界 Y 轴上直立,但转向面向摄像机。
Mesh:从 3D 网格而非从纹理渲染粒子。
None:使用 Trails 模块时,如果只想渲染轨迹并隐藏默认渲染,则可使用此属性。

Normal Direction用于粒子图形的光照法线的偏差值为 1.0 表示法线指向摄像机,值为 0.0 表示法线指向屏幕中心(仅限公告牌模式)
Material用于渲染粒子的材质/
Trail Material用于渲染粒子轨迹的材质仅当启用了 Trails 模块时可用
Sort Mode绘制粒子(因此覆盖粒子)的顺序

By Distance (from the Camera):按与相机的距离排序。
Oldest in Front:最老的粒子在前面。
Youngest in Front:最新的粒子在前面。

Sorting Fudge粒子系统排序的偏差较低的值会增加粒子系统在其他透明游戏对象(包括其他粒子系统)上绘制的相对几率,仅影响整个系统在场景中的显示位置,不影响系统中单个粒子的排序
Min Particle Size最小粒子大小(无论其他设置如何),表示为视口大小的一个比例仅当 Rendering Mode 设置为 Billboard 时应用
Max Particle Size最大粒子大小(无论其他设置如何),表示为视口大小的一个比例仅当 Rendering Mode 设置为 Billboard 时应用
Render Alignment使用下拉选单选择粒子公告牌面向的方向

View:粒子面向摄像机平面。
World:粒子与世界轴对齐。
Local:粒子与游戏对象的变换组件对齐。
Facing:粒子面向摄像机游戏对象的直接位置。
Velocity:粒子面向其速度方向。

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如果启用此属性,阴影投射光源照在粒子系统上时将产生阴影

On:选择 On 启用阴影。
Off:选择 Off 禁用阴影。
Two-Sided:选择 Two Sided 允许从网格的任一侧投射阴影(这意味着不考虑背面剔除)。
Shadows Only:选择 Shadows Only 使阴影可见,但网格本身不可见。

Shadow Bias沿着光照方向移动阴影以消除因使用公告牌来模拟体积而导致的阴影瑕疵/
Receive Shadows决定阴影是否可投射到粒子上只有不透明材质才能接受阴影
Sorting Layer渲染器排序图层的名称/
Order in Layer此渲染器在排序图层中的顺序/
Light Probes基于探针的光照插值模式/
Reflection Probes如果启用此属性,并且场景中存在反射探针,则会为此游戏对象拾取反射纹理,并将此纹理设置为内置的着色器 uniform 变量/
Anchor Override使用光照探针或反射探针系统时用变换来确定插值位置/

二、常用参数和方法解析(待更新)

  1. 获取组件与模块:通过 GetComponent<ParticleSystem>() 获取粒子系统组件,再通过 mainemission 等属性获取粒子系统的各个模块。
  2. 常用参数设置
    • mainModule.startSpeed:设置粒子的起始速度。
    • mainModule.startSize:设置粒子的起始大小。
    • mainModule.startColor:设置粒子的起始颜色。
    • mainModule.loop:设置粒子系统是否循环播放。
    • emissionModule.rateOverTime:设置每秒发射的粒子数量。
    • sizeOverLifetimeModule.size:通过 AnimationCurve 控制粒子大小随时间的变化。
  3. 常用方法调用
    • 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);
        }
    }
}


http://www.kler.cn/a/610889.html

相关文章:

  • Graphpad Prism for Mac医学绘图
  • 深度学习论文: Image Segmentation Using Text and Image Prompts
  • ArkUI之常见基本布局(下)
  • DeepSeek、Grok 与 ChatGPT 4.5:新一代大模型架构与推理能力深度解析
  • springboot中logback日志配置
  • 【单元测试】
  • 若依前端框架增删改查
  • 练手项目1:Dockerized Redis访问计数器
  • HarmonyOS人脸比对技术自学指南与实战分享
  • GPU服务器集群网络规划方案
  • Redis原理:Monitor 实现
  • 【PGCCC】PostgreSQL Certified Master 个人专访 | 第二期 何雄
  • 【面试八股】:常见的锁策略
  • Linux驱动开发进阶(二) - sysfs文件系统
  • 测试用例的场景化分析方法
  • Ubuntu 14.10 Desktop (i386):经典 32 位操作系统的回顾与指南(附安装包)
  • 2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序
  • 智慧产科管理系统源码,孕产保健信息系统,Java语言Vue和ElementUI框架开发
  • spring boot + thymeleaf整合完整例子
  • 婚姻的解构与重构 | 一场关于选择与责任的探索