当粒子撞击碰撞体时,会调用 OnParticleCollision。
这可以用于在粒子击中 GameObject 时对其造成伤害。
此消息发送到附加到粒子系统的脚本以及被击中的碰撞体。
当从附加到具有碰撞体的GameObject的脚本调用OnParticleCollision时,GameObject参数表示粒子系统。即使粒子系统在当前帧中用多个粒子撞击了碰撞体,碰撞体在任何给定帧中最多接收来自与其碰撞的每个粒子系统的一条消息。要检索由粒子系统导致的所有碰撞的详细信息,必须使用ParticlePhysicsExtensions.GetCollisionEvents检索 ParticleSystem.CollisionEvent 数组。
当从附加到粒子系统的脚本调用 OnParticleCollision 时,GameObject参数表示一个具有附加碰撞体的GameObject,该GameObject被粒子系统击中。粒子系统最多接收每个被击中的碰撞体的一条消息。如上所述,必须使用ParticlePhysicsExtensions.GetCollisionEvents来检索GameObject上的所有碰撞事件。
仅当您在粒子系统碰撞模块的 Inspector 中启用Send Collision Messages
时,才会发送消息。
OnParticleCollision 可以是协程。只需在函数中使用 yield 语句即可。
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class ExampleClass : MonoBehaviour { public ParticleSystem part; public List<ParticleCollisionEvent> collisionEvents;
void Start() { part = GetComponent<ParticleSystem>(); collisionEvents = new List<ParticleCollisionEvent>(); }
void OnParticleCollision(GameObject other) { int numCollisionEvents = part.GetCollisionEvents(other, collisionEvents);
Rigidbody rb = other.GetComponent<Rigidbody>(); int i = 0;
while (i < numCollisionEvents) { if (rb) { Vector3 pos = collisionEvents[i].intersection; Vector3 force = collisionEvents[i].velocity * 10; rb.AddForce(force); } i++; } } }