MonoBehaviour.OnParticleCollision(GameObject)

Switch to Manual

Description

OnControllerColliderHit вызывается тогда, когда контроллер сталкивается с коллайдеров, во время выполнения метода Move.

Это может быть использовано для толкания объектов во время их столкновения с персонажем.

Это сообщение отправляется триггеру и коллайдеру, который соприкасается с триггером.

When OnParticleCollision is invoked from a script attached to a GameObject with a Collider, the GameObject parameter represents the ParticleSystem. The Collider receives at most one message per Particle System that collided with it in any given frame even when the Particle System struck the Collider with multiple particles in the current frame. To retrieve detailed information about all the collisions caused by the ParticleSystem, the ParticlePhysicsExtensions.GetCollisionEvents must be used to retrieve the array of ParticleSystem.CollisionEvent.

When OnParticleCollision is invoked from a script attached to a ParticleSystem, the GameObject parameter represents a GameObject with an attached Collider struck by the ParticleSystem. The ParticleSystem receives at most one message per Collider that is struck. As above, ParticlePhysicsExtensions.GetCollisionEvents must be used to retrieve all the collision incidents on the GameObject.

Messages are only sent if you enable Send Collision Messages in the Inspector of the Particle System Collision module.

The OnParticleCollision can be a co-routine. Simply use the yield statement in the function.

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++; } } }