Version: Unity 6.0 (6000.0)
语言 : 中文
将力应用于粒子
粒子触发器

粒子碰撞

碰撞 (Collisions) 模块控制粒子如何与场景中的游戏对象碰撞。

当其他对象围绕粒子系统时,通常情况下,粒子与这些对象相互作用才会使效果更有说服力。例如,水或碎片应该被坚固的墙壁阻挡而非直接穿过墙壁。启用__碰撞 (Collision)__ 模块后,粒子可与场景中的对象发生碰撞。

通过从弹出菜单中选择__世界 (World)__ 模式,可设置粒子系统来使其粒子与场景中的任何碰撞体碰撞。此外,也可使用__碰撞对象 (Collides With)__ 属性根据碰撞体所在的层来禁用碰撞体。弹出菜单还有一个__平面 (Planes)__ 模式选项,可用于向场景中添加一组不需要碰撞体的平面。此选项对于简单的地板、墙壁和类似对象非常有用,并且处理器开销低于__世界 (World)__ 模式。

启用__平面 (Planes)__ 模式后,可通过__平面 (Planes)__ 属性添加一组变换(通常为空游戏对象)。平面在对象的局部 XZ 平面中无限延伸,其中以正 Y 轴表示平面的法线矢量。为了协助开发,无论对象本身是否具有任何可见的网格,平面都将在场景中显示为辅助图标。辅助图标可显示为线框网格或实体平面,也可进行缩放。但是,缩放仅适用于可视化;碰撞平面本身在场景中无限延伸。

启用碰撞后,粒子的大小有时会成为问题,因为它的图形在与表面接触时可能被裁剪。这种情况可能导致粒子在停止或反弹之前在一定程度上“下沉”到表面中。半径缩放 (Radius Scale) 属性通过定义粒子的近似圆形半径(以其实际大小的百分比形式)来解决此问题。此大小信息用于防止裁剪并避免下沉效应。

当粒子表示实体对象时,__抑制 (Dampen)__ 和__反弹 (Bounce)__ 属性非常有用。例如,砾石在抛出时往往会在坚硬的表面上反弹,但是雪球粒子在碰撞时可能会失去速度。生存期损失 (Lifetime Loss) 和__最小消亡速度 (Min Kill Speed)__ 有助于减少碰撞后残留粒子的影响。例如,火球在空中飞行时可能会持续几秒钟,但在碰撞后,单独的火焰粒子应该快速消散。

如果启用了__发送碰撞消息 (Send Collision Messages)__,还可从脚本中检测粒子碰撞。脚本可附加到带有粒子系统的对象,也可附加到带有碰撞体的对象。通过检测碰撞,可将粒子用作游戏中的活动对象,例如飞弹、魔法和能量块 (power-up)。请参阅 MonoBehaviour.OnParticleCollision 脚本参考页面以了解更多详细信息和示例。

世界碰撞质量

世界碰撞 (World Collision) 模块具有__碰撞质量 (Collision Quality)__ 属性,可将其设置为__高 (High)中 (Medium)__ 或__低 (Low)。当__碰撞质量 (Collision Quality) 设置为__中(静态碰撞体)(Medium (Static Colliders))__ 或__低(静态碰撞体)(Low (Static Colliders))__ 时,碰撞使用一组体素(3D 网格上的值)来缓存先前的碰撞,从而在以后的帧中快速重用。

该缓存由每个体素中的平面组成,其中的平面表示该位置处的碰撞表面。在每个帧上,Unity 都会检查缓存中是否有该粒子位置的平面,如果有,则 Unity 将其用于碰撞检测。否则会查询物理系统。如果返回了碰撞,则会将其添加到缓存中,以便在后续帧上快速进行查询。

这是近似算法,因此可能存在一些缺失的碰撞。可通过减小“体素大小 (Voxel Size)”值来帮助解决这个问题;但是,这样做会占用额外的内存,效率也会降低。

中 (Medium) 和__低 (Low)__ 之间的唯一区别是允许系统在每帧查询物理系统的次数。低 (Low) 每帧的查询次数少于中 (Medium)。一旦超出每帧预算,只能将缓存用于所有其余粒子。这样一来可能导致缺失的碰撞增加,直到更全面填充缓存为止。

将力应用于粒子
粒子触发器
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961