MonoBehaviour.OnParticleCollision(GameObject)
Описание
OnParticleCollision вызывается, когда частица попадает в Collider.
Это может быть использовано для нанесения урона GameObject когда попадает в частицы.
Это сообщение отправляется в скрипты, прикрепленные к системам частиц и к Collider который был убит.
Когда OnParticleCollision вызывается из скрипта, приложенного к GameObject с Collider, GameObject параметр представляет собой ParticleSystemCollider получает не более одного сообщения на ParticleSystem, на кадр, даже если несколько частиц из одного и того же ParticleSystem чтобы получить подробную информацию обо всех столкновениях в этом кадре, используйте команду ParticlePhysicsExtensions.GetCollisionEvents для получения массива ParticleCollisionEvent.
Когда OnParticleCollision вызывается из скрипта, приложенного к ParticleSystem, GameObject параметр представляет собой GameObject с прикрепленным Collider пострадавших в результате ParticleSystemParticleSystem получает не более одного сообщения на Collider, на кадр, даже если несколько частиц ударяются о одну и ту же Collider Как и в предыдущем случае, используйте ParticlePhysicsExtensions.GetCollisionEvents для получения всех случаев столкновения для GameObject.
Сообщения отправляются только в том случае, если Send Collision Messages в 2000 году Inspector на 2010 год Particle System Модуль столкновения.OnParticleCollision может быть короутин.
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++; } } }