点击这里看上篇!!
Velocity over Lifetime允许你控制粒子在它们的生命周期中的速度。可以模拟类似拖动的效果。若粒子的速度超过设定的限定值,则粒子速度之会被锁定到该限定值。
属性
Property | Function |
---|---|
X, Y, Z | X,Y和Z轴的速度。 |
Space | 选择X、Y和Z轴是否指向本地或世界空间。 |
Speed Modifier | 沿粒子的当前行进方向对粒子的速度应用乘数。 |
要创建在特定方向漂移的粒子,请使用X,Y和Z曲线。
要创建调整粒子速度的效果,但不影响每个粒子在哪个方向移动,请使用“ Speed Modifier”曲线。
属性
Property | Function |
---|---|
Separate Axes(分开的轴) | 控制强度,并在每个轴上独立进行重新映射。(PS:制造粒子跳动的效果,前提是X,Y,Z轴不为0的情况下) |
Strength(强度) | 这条曲线定义了noise效应对粒子一生的影响。数值越高粒子移动得越来越快。 |
Frequency(频率) | 低值会产生柔和平滑的noise,高值会产生快速变化的noise。这就控制了粒子改变它们行进方向的频率,以及这些方向的改变是多么的突然。( Low values create soft, smooth noise, and high values create rapidly changing noise. This controls how often the particles change their direction of travel, and how abrupt those changes of direction are.) |
Scroll Speed(滚动速度) | 随着时间的推移,移动noise,导致更难以预测和不稳定的粒子运动。 |
Damping(减震) | 启用时,强度与频率成正比。将这些值捆绑在一起意味着可以在保持相同的行为的同时缩放噪声场,但是具有不同的尺寸。 |
Octaves(倍频) | 指定有多少层重叠的噪音被组合在一起产生最终的噪音值。不建议使用,过多的使用会影响xingnen |
Octave Multiplier(倍频乘法器) |
给你的粒子添加噪音是创造有趣的模式和效果的简单而有效的方法。例如,想象一下火焰中的余烬是如何移动的,或者烟雾在移动时如何旋转。强烈的高频噪声可以用来模拟火焰余烬,而软的低频噪声则更适合模拟烟雾效应。
为了最大限度地控制噪音,您可以启用分离轴选项。这使您可以独立控制每个轴上的强度和重新映射。
所使用的噪声算法基于一种叫做“卷曲噪声”的技术,该技术在内部使用多个柏林噪声样本来创建最终的噪声场。
质量设置控制生成多少个独特的噪声样本。使用“中”和“低”时,会使用较少的Perlin噪声样本,并且这些样本将在多个轴上重复使用,但会以一种方式组合以尝试隐藏重用。这意味着使用较低质量的设置时,噪音可能看起来不那么动态和多样化。但是,使用较低质量的设置时会有显着的性能优势。
这个模块控制粒子的速度在整个生命周期内如何降低。
Property | Function |
---|---|
Separate Axes(分开的轴) | 将轴分成X,Y和Z两个独立的组件。 |
Speed(速度) | 设置粒子的速度限制。 |
Space(空间) | 选择速度限制是指本地还是世界空间。此选项仅在启用“ Separate Axes ”时可用。 |
Dampen(挫伤) | 超过速度限制时,粒子速度降低的部分。 |
Drag(挫伤) | 超过速度限制时,粒子速度降低的部分。 |
Multiply by Size(乘以大小) | 较大的粒子受阻力系数影响较大。 |
Multiply by Velocity(乘以速度) | 更快的粒子受阻力系数影响更大。 |
这个模块对于模拟减缓颗粒的空气阻力是非常有用的,特别是当降低曲线用于降低速度限制时。例如,一场爆炸或烟火最初以极快的速度爆发,但是当它们通过空气时,它所发射的粒子迅速减速。
在Drag 选项通过提供选项,应用基于粒子的大小和速度不同量的阻力提供了空气阻力更精确物理模拟。
这个模块控制粒子速度随着时间的推移如何对父对象移动。
Property | Function |
---|---|
Mode | 指定发射器速度如何应用于粒子 |
Current(当前) | 发射器的当前速度将被应用于每一帧的所有粒子。例如,如果发射器减速,所有的粒子也将减速。 |
Initial(初始) | 当每个粒子诞生时,发射器的速度将被施加一次。粒子诞生后发射器速度的任何变化都不会影响粒子。 |
Multiplier | 粒子应该继承的发射器速度的比例。 |
这种效果对于从运动物体发射粒子非常有用,例如来自汽车的尘埃云,来自火箭的烟雾,来自蒸汽火车烟囱的蒸汽,或者粒子最初应以速度的百分比他们似乎来自的对象。当模块Simulation Space在 被设置为World 时,该模块仅对粒子有影响。
也可以使用曲线来影响随时间的影响。例如,您可以对新创建的粒子应用强大的吸引力,这会随着时间的推移而减少。这对于蒸汽火车烟雾可能是有用的,它会随着时间的推移慢慢地漂移,并停止在火车排放之后。
粒子可以通过本模块中指定的力(如风或吸引力)加速。
属性Property | Function |
---|---|
X, Y, Z | 施加在X,Y和Z轴上的每个粒子的力。 |
Space | 选择力量是在本地还是在世界空间中应用。 |
Randomize(随机化) | 使用“两个常量”或“两个曲线”模式时,会在定义的范围内的每个框架上选择新的力方向。这会导致更动荡,不稳定的运动。 |
此模块指定粒子的颜色和透明度在其生命周期中如何变化。
Property: | Function: |
---|---|
Color | 粒子在其整个生命周期中的颜色梯度。梯度条的最左边的点表示粒子寿命的开始,梯度条的右侧表示粒子寿命的结束。 |
粒子的颜色可以根据其速度以每秒的距离单位进行设置。
Property | Function |
---|---|
Color | 定义在速度范围内的粒子的颜色梯度。 |
Speed Range(速度范围) | 颜色梯度映射到的速度范围的低端和高端(范围之外的速度将映射到梯度的端点)。 |
Property | Function |
---|---|
Separate Axes(分开轴) | 在每个轴上独立控制粒径。 |
Size(尺寸) | 定义粒子尺寸在其寿命期间如何变化的曲线。 |
一些颗粒在离开发射点时会典型地改变尺寸,例如那些代表气体,火焰或烟雾的颗粒。例如,随着时间的推移,烟雾将趋于分散并占据更大的体积。您可以通过将烟雾粒子的曲线设置为向上的斜坡来实现这一点,随着粒子的年龄而增加。您还可以使用Color Over Lifetime模块进一步增强这种效果,以在烟雾扩散时淡化烟雾。
对于通过燃烧燃料产生的火球,火焰粒子在排放之后会趋于膨胀,但随着燃料用完和火焰消散而熄灭和收缩。在这种情况下,曲线会有一个上升的“驼峰”,然后回落到一个较小的尺寸。
Property | Function |
---|---|
Separate Axes (分开轴) | 在每个轴上独立控制粒径。 |
Size | 定义在速度范围内的粒子大小的曲线。 |
Speed Range(速度范围) | 大小曲线映射的速度范围的低端和高端(范围之外的速度将映射到曲线的端点)。 |
在某些情况下,需要根据速度变化的粒子。例如,你会期望一小块碎片被爆炸加速,而不是大块碎片。您可以使用Size By Speed(速度大小)和一个简单的斜坡曲线来达到这样的效果,该曲线随着粒子大小的减小而按比例增加速度。请注意,这不应该与限制速度超过生命周期模块一起使用,除非您希望粒子在减速时改变它们的大小。
速度范围指定X(宽度),Y(高度)和Z(深度)形状适用的值的范围。速度范围仅在尺寸处于曲线模式之一时适用。快速粒子将使用曲线右端的值进行缩放,而较慢的粒子将使用曲线左侧的值。例如,如果您指定的速度范围在10到100之间:
可以单独指定如何粒子的宽度,高度和深度的速度大小的变化。在由速度大小模块,检查独立轴复选框,然后选择关于所述X(宽度),Y(高度)和Z(深度)的粒子是由颗粒的速度的影响。请记住,Z只能用于网格粒子。
属性
Property | Function |
---|---|
Separate Axes(分开轴) | 允许每个轴指定旋转。启用此选项后,将显示为X,Y和Z中的每一个设置旋转的选项。 |
Angular Velocity(角速度) | 以每秒度数的旋转速度。请参阅下面的详细信息。 |
当粒子代表小的固体物体(如爆炸碎片)时,此设置很有用。指定随机的旋转值将使得效果更加真实,而不是在飞行时粒子保持直立。随机旋转也将有助于打破类似形状粒子的规律性(多次重复的相同质地可能非常明显)。
使用随机3D旋转的粒子呈现的叶子角速度选项可以从默认的恒定速度改变。速度右侧的下拉菜单可以提供:
Property | Function |
---|---|
Constant(恒定) | 粒子以每秒度数旋转的速度。 |
Curve(曲线) | 角速度设定为粒子的寿命期间改变。检测器的底部会出现一个曲线编辑器,它允许您控制粒子整个生命周期中速度如何变化(请参阅下面的图A)。如果勾选了“分离轴”框,则可以给每个X,Y和Z轴赋予曲线速度值。 |
Random Between Two Constants(两个常量之间的随机数) | 角速度属性有两个角度允许他们之间的旋转。 |
Random Between Two Curves(两条曲线之间的随机数) | 角速度设置由曲线指定的粒子的寿命期间改变。在这种模式下,两条曲线是可编辑的,每个粒子将在您定义的这两条曲线的范围之间选取一条随机曲线(见下图B)。 |
图像A:Z轴角速度
图B:两条曲线之间的角速度
属性
Property | Function |
---|---|
Separate Axes (分开轴) | 为每个旋转轴独立控制旋转。 |
Angular Velocity(角速度) | 以每秒度数的旋转速度。 |
Speed Range(速度范围) | 大小曲线映射的速度范围的低端和高端(范围之外的速度将映射到曲线的端点)。 |
当粒子代表在地面上移动的固体物体(例如山体滑坡的岩石)时,可以使用该属性。颗粒的旋转可以与速度成比例地设定,以便令人信服地滚动表面。
速度范围仅适用于速度处于其中一种曲线模式时。快速粒子将使用曲线右端的值进行旋转,而较慢的粒子将使用曲线左侧的值。
该属性修改了wind zones(风区)对系统发射的粒子的影响。
属性
Property | Function |
---|---|
Multiplier(乘数) | 适用于风区力量的比例值。 |
一个Terrain(地形)可以将风区,其影响对景观树木的运动。启用此部分可让风区从系统中吹出颗粒。“ (Multiplier)乘数”值可让您缩放风对粒子的影响,因为它们通常比树枝吹得更强。
Property | Function |
---|---|
Planes popup(平面弹窗) | 选择平面模式。 |
Planes | 一个可扩展的定义碰撞平面的变换列表。 |
Visualization(可视化) | 选择碰撞平面Gizmos是否以场景视图显示为线框网格或实体平面。 |
Scale Plane(比例平面) | 用于可视化的平面尺寸。 |
Dampen(挫伤) | 碰撞后丢失的粒子速度的一小部分。 |
Bounce(弹跳) | 碰撞后从表面反弹的粒子速度的一部分。 |
Lifetime Loss(终身损失) | 它碰撞时丢失的粒子总寿命的一部分。 |
Min Kill Speed(最小死亡速度) | 碰撞后低于此速度的粒子将从系统中移除。 |
Max Kill Speed(最大死亡速度) | 碰撞后超过这个速度的粒子将从系统中移除。 |
Radius Scale(半径比例) | 允许您调整粒子碰撞球体的半径,使其更贴近粒子图形的视觉边缘。 |
Send Collision Messages(发送碰撞消息) | 如果启用,则可以通过OnParticleCollision函数从脚本中检测粒子碰撞。 |
Visualize Bounds(可视化边界) | 在“scene”视图中将每个粒子的碰撞范围渲染为线框形状。 |
Property | Function |
---|---|
World popup(世界弹窗) | 选择世界模式 |
Collision Mode(碰撞模式) | 3D or 2D. |
Dampen(挫伤) | 碰撞后丢失的粒子速度的一小部分。 |
Bounce | 碰撞后从表面反弹的粒子速度的一部分。 |
Lifetime Loss | 它碰撞时丢失的粒子总寿命的一部分。 |
Min Kill Speed | 碰撞后低于此速度的粒子将从系统中移除。 |
Max Kill Speed | 碰撞后超过这个速度的粒子将从系统中移除。 |
Radius Scale(半径比例) | Setting for 2D or 3D. |
Collision Quality(碰撞质量) | 使用下拉菜单来设置粒子碰撞的质量。这影响有多少粒子可以通过对撞机。在质量较低的水平上,粒子有时会穿过对撞机,但资源密集度较低。 |
High(高) | 当“ Collision Quality”设置为“High”时,碰撞总是使用物理系统来检测碰撞结果。这是最资源密集的选择,也是最准确的。 |
Medium (Static Colliders) (中等(静态碰撞)) | 当“ Collision Quality”设置为“ Medium ”(Static Colliders)时,碰撞使用体素网格来缓存先前的碰撞,以便在以后的帧中更快地重复使用。请参阅下面的“ 世界冲突”,了解有关此缓存的更多信息。 “ Medium”与“ Low”的唯一区别是“粒子系统”每帧查询物理系统的次数。Medium每帧的查询次数比低。 请注意,此设置仅适用于永不移动的静态对撞机。 |
Low (Static Colliders)(低(静态碰撞)) |
当“ Collision Quality”设置为“ Low ”(静态碰撞)时,碰撞使用体素网格来缓存先前的碰撞,以便在以后的帧中更快地重复使用。请参阅下面的“ 世界冲突”,了解有关此缓存的更多信息。 “ Medium ”与“ Low ”的唯一区别是“粒子系统”每帧查询物理系统的次数。中等每帧的查询次数比低。 请注意,此设置仅适用于永不移动的静态对撞机。 |
Collides With(碰撞) | 粒子只会碰撞选定图层上的物体。 |
Max Collision Shapes(最大碰撞形状) | 粒子碰撞可以考虑多少个碰撞形状。过多的形状被忽略,地形优先。 |
Enable Dynamic Colliders(启用动态碰撞器) | 允许粒子也与动态对象碰撞(否则仅使用静态对象)。 |
Enable Dynamic Colliders() |
动态碰撞器是没有配置为运动学的任何碰撞器(关于碰撞器类型的更多信息参见碰撞器文档)。 选中此选项可将这些碰撞器类型包含在碰撞中粒子响应的对象集合中。取消选中此选项,粒子仅对静态碰撞体发生碰撞。 |
Voxel Size(体素大小) | 体素表示三维空间中规则网格上的值。当使用中等或低质量冲突时,Unity会缓存网格结构中的冲突。此设置控制网格大小。较小的值会提供更高的准确性,但会花费更多的内存,效率也会降低。 注意:只有在“Collision Quality (碰撞质量)”设置为“中”或“ 低”时才能访问此属性。 |
Collider Force(对撞机的力量) | 在粒子碰撞后对物理碰撞体施加一个力。这对于将碰撞体推向粒子很有用。 |
Multiply by Collision Angle(乘以碰撞角度) | 当对碰撞体施加力时,根据粒子和碰撞体之间的碰撞角度来缩放力的强度。掠射角比正面碰撞产生的力更小。 |
Multiply by Particle Speed(乘以粒子速度) | 当对碰撞体施加力时,根据粒子的速度来缩放力的强度。快速移动的粒子比慢速粒子产生更多的力量。 |
Multiply by Particle Size(乘以粒度) | 当对碰撞器施加力时,根据粒子的大小来缩放力的强度。较大的粒子会比较小的粒子产生更多的力。 |
Send Collision Messages(发送碰撞消息 | 选中此项即可通过OnParticleCollision函数检测脚本中的粒子碰撞。 |
Visualize Bounds(可视化边界) | 在“Scene”视图中预览每个粒子的碰撞球体。 |
当其他物体包围粒子系统时,粒子与这些物体相互作用时,效果通常会更有说服力。例如,水或碎片应该被坚实的墙壁阻挡,而不是简单地通过它。启用“ 碰撞”模块后,粒子可能会与场景中的对象发生碰撞。
可以设置粒子系统,使其粒子通过从弹出窗口中选择世界模式与场景中的任何碰撞器相撞。也可以通过使用Collides With属性根据所在图层禁用Colliders 。弹出窗口还有一个“平面”模式选项,它允许您将一组平面添加到不需要碰撞器的场景中。这个选项对于简单的地板,墙壁和类似的物体是有用的,并且比世界模式有更低的处理器开销。
当Planes模式启用时,可以通过Planes属性添加变换列表(通常为空的GameObjects)。平面在物体的局部XZ平面内无限延伸,正Y轴表示平面的法向矢量。为了协助发展,飞机将在场景中显示为小玩意儿,而不管物体是否具有任何可见的网格物体。Gizmos可以显示为线框网格或实体平面,也可以缩放。但是,缩放比例仅适用于可视化 - 碰撞平面本身通过场景无限延伸。
当碰撞被启用时,粒子的大小有时是一个问题,因为它的图形可以被剪切,因为它与一个表面接触。这可能导致粒子在停止或弹跳之前出现在表面“下沉”。“ 半径比例”属性通过为粒子定义一个近似的圆形半径来解决此问题,以其实际大小的百分比表示。这个大小的信息是用来防止削减和避免陷入效应。
的浸湿和弹跳特性对于当颗粒代表固态物体是有用的。例如,砾石在抛出时倾向于从坚硬的表面反弹,但是在碰撞期间,雪球的颗粒可能会失去速度。终生损失和最小杀伤速度可以帮助减少碰撞后残留颗粒的影响。例如,火球在空中飞行时可能会持续几秒钟,但碰撞后,分开的火焰粒子应该迅速消散。
如果启用“ 发送碰撞消息”,您还可以检测脚本中的粒子碰撞。可以将脚本附加到具有粒子系统的对象,也可以附加到具有对撞机的对象,或者两者兼有。通过检测碰撞,你可以在游戏中使用粒子作为主动对象,例如投射物,魔法和能量提升。有关更多详细信息和示例,请参阅MonoBehaviour.OnParticleCollision的脚本参考页。
世界冲突
“世界碰撞”模块具有“ Collision Quality”属性,您可以将其设置为“ 高”,“ 中”或“ 低”。当“ Collision Quality”设置为“ 中等”(静态碰撞体)或“ 低”(静态碰撞体)时,碰撞使用体素网格(3D网格上的值)来缓存先前的碰撞,以便在之后的帧中快速重复使用。
该高速缓存由每个体素中的平面组成,其中平面表示该位置处的碰撞表面。在每个帧上,Unity会检查缓存中粒子位置的平面,如果有的话,Unity会将其用于碰撞检测。否则,它会问物理系统。如果返回冲突,则将其添加到缓存中,以便在后续帧上进行快速查询。
这是一个近似值,所以可能会发生一些错过的碰撞。您可以减小体素大小值来帮助解决这个问题。但是,这样做会使用额外的内存,效率会降低。
“ 中”与“ 低 ”的唯一区别是系统允许查询物理系统每帧多少次。Low使每帧的查询次数少于Medium。一旦超过每帧预算,只有高速缓存被用于任何剩余的粒子。这可能会导致错过的冲突增加,直到缓存更加全面地填充。
粒子系统有能力在场景中与一个或多个碰撞器交互时触发回调。当一个粒子进入或离开一个对撞机,或者在粒子处于内部或外部的时候,这个Callback可以被触发。
您可以使用回调作为一个简单的方法,当它进入对撞机时(例如,为了防止雨滴穿透屋顶)破坏粒子,或者它可以用来修改任何或所有粒子的属性。
“Triggers (触发器)”模块还提供“ Kill(杀死)”选项以自动删除粒子,“ Ignore (忽略)”选项可忽略碰撞事件,如下所示。
粒子系统触发器模块要使用该模块,首先添加您希望创建Colliders (触发器)的triggers (碰撞器),然后选择要使用的事件。
你可以选择触发一个事件,每当粒子是:
Property: | Function: |
---|---|
Inside | Callback粒子事件在对撞机内时触发。Ignore 当粒子在对撞机内部时,则不会触发事件。kill 杀死对撞机内的粒子 |
Outside | Callback粒子事件在对撞机外时触发。Ignore 当粒子在对撞机外部时,则不会触发事件。kill 杀死对撞机外的粒子 |
Enter | Callback粒子事件在进入对撞机时触发。Ignore 当粒子在进入对撞机时,则不会触发事件。kill 杀死对撞机进入的粒子 |
Exit | Callback粒子事件在离开对撞机时触发。Ignore 当粒子在离开对撞机时,则不会触发事件。kill 杀死对撞机离开的粒子 |
Radius Scale (半径比例) | 此参数设置粒子的碰撞边界,允许在碰撞碰撞物之前或之后发生事件。例如,您可能希望粒子在反弹前稍微穿透碰撞对象的表面,在这种情况下,您会将“半径比例”设置为略小于1.请注意,事件实际上不会更改触发器,但可以延迟或提前触发器的视觉效果。 - 输入1,表示粒子碰撞碰撞器时发生的事件 - 输入一个小于1的值,触发器在粒子穿透碰撞器后出现 - 输入一个大于1的值,以使触发器看起来发生粒子穿透对撞机后 |
Visualize Bounds(可视化边界) | 这使您可以在编辑器窗口中显示粒子的碰撞边界。 |
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[ExecuteInEditMode]
public class TriggerScript : MonoBehaviour
{
ParticleSystem ps;
//这些列表被用来包含匹配的粒子
//触发条件每个帧。
List enter = new List();
List exit = new List();
void OnEnable()
{
ps = GetComponent();
}
void OnParticleTrigger()
{
//得到与触发条件匹配的粒子这一帧
int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
//遍历进入触发器的粒子并使其为红色
for (int i = 0; i < numEnter; i++)
{
ParticleSystem.Particle p = enter[i];
p.startColor = new Color32(255, 0, 0, 255);
enter[i] = p;
}
//遍历那些从触发器中退出的粒子并使它们变绿
for (int i = 0; i < numExit; i++)
{
ParticleSystem.Particle p = exit[i];
p.startColor = new Color32(0, 255, 0, 255);
exit[i] = p;
}
//将被修改的粒子重新分配到粒子系统中
ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
}
}
在回调内部,使用ParticlePhysicsExtensions.GetTriggerParticles()(以及你想指定的ParticleSystemTriggerEventType)来确定哪些粒子符合哪个标准。
下面的例子使粒子在进入对撞机时变成红色,在离开对撞机的界限时变成绿色。
下面的图片展示了这个结果:
编辑器视图 游戏视图
如果有理解错误的地方欢迎指点!!!