Unity 粒子系统(Particle System) (二)Velocity over Lifetime,Inhert Velocity,Force voer Lifetime等属性详解
点击这里看上篇!!
Velocity over Lifetime module(生命周期速度模块)
Velocity over Lifetime允许你控制粒子在它们的生命周期中的速度。可以模拟类似拖动的效果。若粒子的速度超过设定的限定值,则粒子速度之会被锁定到该限定值。
属性
细节
要创建在特定方向漂移的粒子,请使用X,Y和Z曲线。
要创建调整粒子速度的效果,但不影响每个粒子在哪个方向移动,请使用“ Speed Modifier”曲线。
Noise module
使用此模块设置粒子类似跳动的效果(PS:大家可以想象小时候玩的喇叭,上面放点沙子,然后给喇叭通电,可以看到沙子不停的在跳动)。属性
细节
给你的粒子添加噪音是创造有趣的模式和效果的简单而有效的方法。例如,想象一下火焰中的余烬是如何移动的,或者烟雾在移动时如何旋转。强烈的高频噪声可以用来模拟火焰余烬,而软的低频噪声则更适合模拟烟雾效应。
为了最大限度地控制噪音,您可以启用分离轴选项。这使您可以独立控制每个轴上的强度和重新映射。
所使用的噪声算法基于一种叫做“卷曲噪声”的技术,该技术在内部使用多个柏林噪声样本来创建最终的噪声场。
质量设置控制生成多少个独特的噪声样本。使用“中”和“低”时,会使用较少的Perlin噪声样本,并且这些样本将在多个轴上重复使用,但会以一种方式组合以尝试隐藏重用。这意味着使用较低质量的设置时,噪音可能看起来不那么动态和多样化。但是,使用较低质量的设置时会有显着的性能优势。
Limit Velocity Over Lifetime module(限制生命周期中的速度)
这个模块控制粒子的速度在整个生命周期内如何降低。
属性
细节
这个模块对于模拟减缓颗粒的空气阻力是非常有用的,特别是当降低曲线用于降低速度限制时。例如,一场爆炸或烟火最初以极快的速度爆发,但是当它们通过空气时,它所发射的粒子迅速减速。
在Drag 选项通过提供选项,应用基于粒子的大小和速度不同量的阻力提供了空气阻力更精确物理模拟。
Inherit Velocity module(继承速率模块)
这个模块控制粒子速度随着时间的推移如何对父对象移动。
属性
细节
这种效果对于从运动物体发射粒子非常有用,例如来自汽车的尘埃云,来自火箭的烟雾,来自蒸汽火车烟囱的蒸汽,或者粒子最初应以速度的百分比他们似乎来自的对象。当模块Simulation Space在 被设置为World 时,该模块仅对粒子有影响。
也可以使用曲线来影响随时间的影响。例如,您可以对新创建的粒子应用强大的吸引力,这会随着时间的推移而减少。这对于蒸汽火车烟雾可能是有用的,它会随着时间的推移慢慢地漂移,并停止在火车排放之后。
Force Over Lifetime module(强制终生模块)
粒子可以通过本模块中指定的力(如风或吸引力)加速。
属性细节
流体在移动时经常受到力量的影响。 例如,烟雾从周围的热空气中升起,会稍微加速。 微妙的影响可以通过使用曲线来控制粒子寿命期间的力量来实现。 使用前面的例子,烟雾最初会加速上升,但随着上升的空气逐渐冷却,力量将会减弱。 起火的浓烟最初可能会加速,然后随着火势蔓延而放慢,甚至在长时间持续下来时甚至开始下落。Color Over Lifetime module
此模块指定粒子的颜色和透明度在其生命周期中如何变化。
属性
粒子在其整个生命周期中的颜色梯度。梯度条的最左边的点表示粒子寿命的开始,梯度条的右侧表示粒子寿命的结束。
在上面的图片中,粒子从橙色开始,随着时间的推移而消失,在生命结束的时候不可见。
细节
许多类型的自然和幻想粒子随着时间的推移颜色不同,因此这种属性有很多用途。 例如,白色的热火在穿过空气时会冷却,魔法可能会爆发出彩虹般的彩虹。 同样重要的是alpha(透明度)的变化。 当颗粒达到其寿命终点(例如,热火花,烟花和烟雾颗粒)时,这些颗粒被烧坏,褪色或消散是非常普遍的,而渐变渐变产生这种效果。Color By Speed module(颜色的速度控制模块)
粒子的颜色可以根据其速度以每秒的距离单位进行设置。
属性
细节
燃烧或发出的微粒(如火花)在空气中快速移动时(例如火花暴露在更多氧气中)时会更明亮地燃烧,但随着速度变慢,会稍微变暗。为了模拟这个,你可以使用 Color By Speed ,在速度范围的上端有一个白色的渐变,在下端是红色的(在火花的例子中,较快的粒子会变成白色,而较慢的粒子变成红色)。Size over Lifetime modul
许多效果涉及根据曲线改变大小的粒子,可以在此模块中进行设置属性
细节
一些颗粒在离开发射点时会典型地改变尺寸,例如那些代表气体,火焰或烟雾的颗粒。例如,随着时间的推移,烟雾将趋于分散并占据更大的体积。您可以通过将烟雾粒子的曲线设置为向上的斜坡来实现这一点,随着粒子的年龄而增加。您还可以使用Color Over Lifetime模块进一步增强这种效果,以在烟雾扩散时淡化烟雾。
对于通过燃烧燃料产生的火球,火焰粒子在排放之后会趋于膨胀,但随着燃料用完和火焰消散而熄灭和收缩。在这种情况下,曲线会有一个上升的“驼峰”,然后回落到一个较小的尺寸。
Non-uniform particle scaling(不均匀的例子缩放)
您可以指定粒子的宽度,高度和深度如何独立变化。在Size over Lifetime模块中,选中Separate Axes复选框,然后更改X(宽度),Y(高度)和Z(深度)。请记住,Z只能用于网格粒子。
Size by Speed module(速度大小模块)
这个模块允许你创建粒子,根据它们的速度以每秒的距离单位改变大小。属性
细节
在某些情况下,需要根据速度变化的粒子。例如,你会期望一小块碎片被爆炸加速,而不是大块碎片。您可以使用Size By Speed(速度大小)和一个简单的斜坡曲线来达到这样的效果,该曲线随着粒子大小的减小而按比例增加速度。请注意,这不应该与限制速度超过生命周期模块一起使用,除非您希望粒子在减速时改变它们的大小。
速度范围指定X(宽度),Y(高度)和Z(深度)形状适用的值的范围。速度范围仅在尺寸处于曲线模式之一时适用。快速粒子将使用曲线右端的值进行缩放,而较慢的粒子将使用曲线左侧的值。例如,如果您指定的速度范围在10到100之间:
Non-uniform particle scaling(不均匀的粒子缩放)
可以单独指定如何粒子的宽度,高度和深度的速度大小的变化。在由速度大小模块,检查独立轴复选框,然后选择关于所述X(宽度),Y(高度)和Z(深度)的粒子是由颗粒的速度的影响。请记住,Z只能用于网格粒子。
Rotation Over Lifetime module(旋转生命周期模块)
属性
细节
当粒子代表小的固体物体(如爆炸碎片)时,此设置很有用。指定随机的旋转值将使得效果更加真实,而不是在飞行时粒子保持直立。随机旋转也将有助于打破类似形状粒子的规律性(多次重复的相同质地可能非常明显)。
使用随机3D旋转的粒子呈现的叶子Options(选项)
角速度选项可以从默认的恒定速度改变。速度右侧的下拉菜单可以提供:
图像A:Z轴角速度
图B:两条曲线之间的角速度
Rotation By Speed module(按速度选装模式)
粒子的旋转可以根据其速度以每秒的距离单位进行设置。属性
细节
当粒子代表在地面上移动的固体物体(例如山体滑坡的岩石)时,可以使用该属性。颗粒的旋转可以与速度成比例地设定,以便令人信服地滚动表面。
速度范围仅适用于速度处于其中一种曲线模式时。快速粒子将使用曲线右端的值进行旋转,而较慢的粒子将使用曲线左侧的值。
External Forces module(外部力量模块)
该属性修改了wind zones(风区)对系统发射的粒子的影响。
属性
细节
一个Terrain(地形)可以将风区,其影响对景观树木的运动。启用此部分可让风区从系统中吹出颗粒。“ (Multiplier)乘数”值可让您缩放风对粒子的影响,因为它们通常比树枝吹得更强。
Collision module(碰撞模块)
该模块控制 粒子 如何在场景中与 GameObjects相 碰撞。使用第一个下拉菜单来定义您的碰撞设置是适用于Planes 还是适用于World。如果选择“World”,则使用“ Collision Mode”下拉菜单来定义碰撞设置是适用于2D还是3D世界。Planes module properties(平面模式属性)
World module properties(世界模式属性)
“ 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。一旦超过每帧预算,只有高速缓存被用于任何剩余的粒子。这可能会导致错过的冲突增加,直到缓存更加全面地填充。
Triggers module(触发器模块)
粒子系统有能力在场景中与一个或多个碰撞器交互时触发回调。当一个粒子进入或离开一个对撞机,或者在粒子处于内部或外部的时候,这个Callback可以被触发。
您可以使用回调作为一个简单的方法,当它进入对撞机时(例如,为了防止雨滴穿透屋顶)破坏粒子,或者它可以用来修改任何或所有粒子的属性。
“Triggers (触发器)”模块还提供“ Kill(杀死)”选项以自动删除粒子,“ Ignore (忽略)”选项可忽略碰撞事件,如下所示。
粒子系统触发器模块要使用该模块,首先添加您希望创建Colliders (触发器)的triggers (碰撞器),然后选择要使用的事件。
你可以选择触发一个事件,每当粒子是:
- 输入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)来确定哪些粒子符合哪个标准。
下面的例子使粒子在进入对撞机时变成红色,在离开对撞机的界限时变成绿色。
下面的图片展示了这个结果:
编辑器视图 游戏视图
如果有理解错误的地方欢迎指点!!!
标签:
相关文章
-
无相关信息