Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

MonoBehaviour.OnParticleCollision(GameObject)

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える

説明

OnParticleCollision はパーティクルがコライダーにヒットしたときに呼び出されます

これはパーティクルがヒットしたときにゲームオブジェクトにダメージを適用させるために使用することができます。

Legacy particle system:
このメッセージは WorldParticleCollider をアタッチしたオブジェクトのすべてのスクリプトと、ヒットした Collider に送信されます。 このメッセージは WorldParticleCollider のインスペクターにある sendCollisionMessage を有効にした時のみ送信されます。

	// 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:
このメッセージはパーティクルシステムにアタッチされたスクリプトとヒットした Collider に対して送信されます。

OnParticleCollision が ParticleSystem にアタッチされたスクリプトから実行されているとき GameObject パラメーターは ParticleSystem によってヒットした ColliderGameObject を指します。ParticleSystem はヒットした Collider ごとに最大 1 つのメッセージを受信します。上記のように ParticlePhysicsExtensions.GetCollisionEvents を使用すると GameObject 上のすべての衝突を ParticleSystem.CollisionEvent の配列として受信することができます。

OnParticleCollision が ParticleSystem にアタッチされたスクリプトから実行されているとき GameObject パラメーターは ParticleSystem によってヒットした ColliderGameObject を指します。ParticleSystem はヒットした Collider ごとに最大 1 つのメッセージを受信します。上記のように ParticlePhysicsExtensions.GetCollisionEvents を使用すると GameObject 上のすべての衝突を受信することができます。

パーティクルシステムのインスペクターにある Collision モジュール内の /Send Collision Messages/ を有効にした時のみ、メッセージは送信されます。

OnParticleCollision は関数の中にシンプルな yield 文を使用して、コルーチンにすることができます。

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