Version: 5.3 (switch to 5.4b)
ЯзыкEnglish
  • C#
  • JS

Язык программирования

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

MonoBehaviour.OnParticleCollision(GameObject)

Предложить изменения

Успех!

Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.

Закрыть

Ошибка внесения изменений

По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста <a>попробуйте снова</a> через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.

Закрыть

Отменить

Руководство

Описание

OnParticleCollision is called when a particle hits a collider.

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

Legacy particle system:
Это сообщение отсылается всем скриптам прикрепленным к камере. The message is only sent if you enable sendCollisionMessage in the inspector of the WorldParticleCollider.

	// Legacy particle system example
	// Applies a force to all rigid bodies that are hit by the particle.

function OnParticleCollision (other : GameObject) { var body : Rigidbody = other.GetComponent.<Rigidbody>(); if (body) { var direction : Vector3 = other.transform.position - transform.position; direction = direction.normalized; body.AddForce (direction * 5); } }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void OnParticleCollision(GameObject other) { Rigidbody body = other.GetComponent<Rigidbody>(); if (body) { Vector3 direction = other.transform.position - transform.position; direction = direction.normalized; body.AddForce(direction * 5); } } }

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

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. In order to retrieve detailed information about all the collisions caused by the ParticleSystem 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 will receive at most one message per Collider that is struck. As above ParticlePhysicsExtensions.GetCollisionEvents must be used to retrieve all the collisions incident on the GameObject.

Messages are only sent if you enable /Send Collision Messages/ in the inspector of the particle system collision module.

OnParticleCollision can be a co-routine, simply use the yield statement in the function.

var part: ParticleSystem;
var collisionEvents: ParticleCollisionEvent[];

function Start() { part = GetComponent.<ParticleSystem>(); collisionEvents = new ParticleCollisionEvent[16]; }

function OnParticleCollision(other: GameObject) { // adjust array length var safeLength = part.GetSafeCollisionEventSize(); if (collisionEvents.Length < safeLength) { collisionEvents = new ParticleCollisionEvent[safeLength]; }

// get collision events for the gameObject that the script is attached to var numCollisionEvents = part.GetCollisionEvents(other, collisionEvents);

// apply some force to RigidBody components var rb = other.GetComponent.<Rigidbody>(); for (var i = 0; i < numCollisionEvents; i++) { if (rb) { var pos = collisionEvents[i].intersection; var force = collisionEvents[i].velocity * 10; rb.AddForce(force); } } }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { public ParticleSystem part; public ParticleCollisionEvent[] collisionEvents; void Start() { part = GetComponent<ParticleSystem>(); collisionEvents = new ParticleCollisionEvent[16]; } void OnParticleCollision(GameObject other) { int safeLength = part.GetSafeCollisionEventSize(); if (collisionEvents.Length < safeLength) collisionEvents = new ParticleCollisionEvent[safeLength]; 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++; } } }