Unity粒子系统学习记录7-Collision和Triggers模块
Unity粒子系统学习记录7-Collision和Triggers模块
Collision 模块
控制粒子如何与场景中的GameObject发生碰撞
两个模式:Plane和World
Plane模式
| 属性 | 作用 |
|---|---|
| Planes | 用于定义碰撞平面的变换的可扩展列表。 |
| Visualization | 选择要将 Scene 视图中的碰撞平面辅助图标显示为线框网格还是实体平面。 |
| Scale Plane | 用于可视化的平面大小。 |
| Dampen | 粒子碰撞后损失的速度比例。 |
| Bounce | 粒子碰撞后从表面反弹的速度比例。 |
| Lifetime Loss | 粒子碰撞后损失的总生命周期比例。 |
| Min Kill Speed | 碰撞后运动速度低于此速度的粒子将从系统中予以移除。 |
| Max Kill Speed | 碰撞后运动速度高于此速度的粒子将从系统中予以移除。 |
| Radius Scale | 允许调整粒子碰撞球体的半径,使其更贴近粒子图形的可视边缘。 |
| Send Collision Messages | 如果启用此属性,则可从脚本中通过OnParticleCollision函数检测粒子碰撞。 |
| Visualize Bounds | 在 Scene 视图中将每个粒子的碰撞边界渲染为线框形状。 |
启用 Planes 模式后,可通过 Planes 属性添加一组transform(通常为空游戏对象)。平面在对象的局部 XZ 平面中无限延伸,其中以正 Y 轴表示平面的法线矢量。为了协助开发,无论对象本身是否具有任何可见的网格,平面都将在场景中显示为辅助图标。辅助图标可显示为线框网格或实体平面,也可进行缩放。但是,缩放仅适用于可视化;碰撞平面本身在场景中无限延伸。
World模式
| 属性 | 作用 |
|---|---|
| Dampen | 粒子碰撞后损失的速度比例。 |
| Bounce | 粒子碰撞后从表面反弹的速度比例。 |
| Lifetime Loss | 粒子碰撞后损失的总生命周期比例。 |
| Min Kill Speed | 碰撞后运动速度低于此速度的粒子将从系统中予以移除。 |
| Max Kill Speed | 碰撞后运动速度高于此速度的粒子将从系统中予以移除。 |
| Radius Scale | 2D 或 3D 的设置。 |
| Collision Quality | 使用下拉选单来设置粒子碰撞的质量。此设置会影响有多少粒子可以穿过碰撞体。在较低的质量水平下,粒子有时会穿过碰撞体,但需要的计算资源较少。 |
| High | 当 Collision Quality 设置为 High 时,碰撞始终使用物理系统来检测碰撞结果。此设置是最耗费资源但也是最准确的选项。 |
| Medium (Static Colliders) | 当 Collision Quality 设置为 Medium (Static Colliders) 时,碰撞使用一组体素来缓存先前的碰撞,从而在以后的帧中更快地重用。Medium 和 Low 之间的唯一区别是粒子系统在每帧查询物理系统的次数。Medium 每帧的查询次数多于 Low。 请注意,此设置仅适用于从不移动的静态碰撞体。 |
| Low (Static Colliders) | 当 Collision Quality 设置为 Low (Static Colliders) 时,碰撞使用一组体素来缓存先前的碰撞,从而在以后的帧中更快地重用。请注意,此设置仅适用于从不移动的静态碰撞体。 |
| Collides With | 粒子只会与所选层上的对象发生碰撞。 |
| Max Collision Shapes | 粒子碰撞可包括的碰撞形状个数。多余的形状将被忽略,且地形优先。 |
| Enable Dynamic Colliders | 粒子是否响应与除Kinematic刚体以外的碰撞体的碰撞,否则粒子只响应与static碰撞体的碰撞 |
| Voxel Size | 体素 (voxel) 表示三维空间中的常规网格上的值。使用 Medium 或 Low 质量碰撞时,Unity 会在网格结构中缓存碰撞。此设置控制着网格大小。较小的值可提供更高的准确性,但会占用更多内存,效率也会降低。 注意:仅当 Collision Quality 设置为 Medium 或 Low 时,才能访问此属性。 |
| Collider Force | 在粒子碰撞后对物理碰撞体施力。这对于用粒子推动碰撞体很有用。 |
| Multiply by Collision Angle | 向碰撞体施力时,根据粒子与碰撞体之间的碰撞角度来缩放力的强度。掠射角将比正面碰撞产生更小的力。 |
| Multiply by Particle Speed | 向碰撞体施力时,根据粒子的速度来缩放力的强度。快速移动的粒子会比较慢的粒子产生更大的力。 |
| Multiply by Particle Size | 向碰撞体施力时,根据粒子的大小来缩放力的强度。较大的粒子会比较小的粒子产生更大的力。 |
| Send Collision Messages | 如果选中此复选框,则允许从脚本中通过OnParticleCollision函数检测粒子碰撞。 |
| Visualize Bounds | 在 Scene 视图中预览每个粒子的碰撞球体。 |
Triggers 模块
控制粒子与场景中碰撞体的触发
添加碰撞体到列表
首先,指定粒子可与场景中的哪些碰撞体进行碰撞。
在 OnParticleTrigger() 中访问粒子
如果选择 Callback 作为对某一触发事件的反应,则可以从附加的脚本访问满足事件条件的粒子。为此,首先需要将 OnParticleTrigger() 函数添加到附加的脚本。在此函数中,调用ParticlePhysicsExtensions.GetTriggerParticles() 函数可获取满足触发事件条件的粒子列表。此函数接受ParticleSystemTriggerEventType(用于指定需要获取粒子的触发事件,即 Inside、Outside、Enter 还是 Exit)以及一个粒子列表(函数将向其中填充结果)。从这一列表中,可以访问、修改或销毁任何粒子。
1 | using UnityEngine; |
属性
| 属性 | 作用 |
|---|---|
| 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 视图中显示每个粒子的碰撞体边界。启用此属性可显示碰撞体边界,而禁用则可隐藏碰撞体边界。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





