言語: 日本語
  • C#
  • JS
  • Boo

スクリプト言語

お好みのスクリプト言語を選択すると、サンプルコードがその言語で表示されます。

MonoBehaviour.OnParticleCollision(GameObject)

Switch to Manual

Description

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

これはパーティクルがヒットした時にゲームオブジェクトにダメージを適用させるために使用することができます。 レガシー パーティクルシステム:
このメッセージは WorldParticleCollider をアタッチしたオブジェクトのすべてのスクリプトと、ヒットしたColliderに送信されます。 このメッセージは WorldParticleCollider のインスペクターにある sendCollisionMessage を有効にした時のみ送信されます。

using UnityEngine;
using System.Collections;

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

Shuriken パーティクルシステム:
このメッセージはパーティクルシステムにアタッチされたスクリプトとヒットしたCollider に対して送信されます。 OnParticleCollisionがColliderを持つGameObjectにアタッチされたスクリプトから実行された時、GameObjectパラメータはParticleSystemのを表します。現在のフレームで複数のパーティクルとColliderがヒットした時、毎フレーム、コライダーと衝突したパーティクルシステムごとに最大1メッセージをColliderは受信します。ParticleSystemによって引き起こされたすべての衝突についての詳細な情報を取得するためには、ParticleSystem.GetCollisionEventsを使用してCollisionEventの配列を取得します。 OnParticleCollisionがParticleSystemにアタッチされたスクリプトから実行されている時、GameObjectパラメータはParticleSystemによってヒットしたColliderGameObjectを表します。ParticleSystemはヒットしたColliderごとに最大1つのメッセージを受信します。上記のようにParticleSystem.GetCollisionEventsを使用するとGameObject上のすべての衝突を受信することができます。 パーティクルシステムのインスペクターにあるCollisionモジュール内の /Send Collision Messages/ を有効にした時のみ、メッセージは送信されます。

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

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    private ParticleSystem.CollisionEvent[] collisionEvents = new ParticleSystem.CollisionEvent[16];
    void OnParticleCollision(GameObject other) {
        ParticleSystem particleSystem;
        particleSystem = other.GetComponent<ParticleSystem>();
        int safeLength = particleSystem.safeCollisionEventSize;
        if (collisionEvents.Length < safeLength)
            collisionEvents = new ParticleSystem.CollisionEvent[safeLength];
        
        int numCollisionEvents = particleSystem.GetCollisionEvents(gameObject, collisionEvents);
        int i = 0;
        while (i < numCollisionEvents) {
            if (gameObject.rigidbody) {
                Vector3 pos = collisionEvents[i].intersection;
                Vector3 force = collisionEvents[i].velocity * 10;
                gameObject.rigidbody.AddForce(force);
            }
            i++;
        }
    }
}
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    private ParticleSystem.CollisionEvent[] collisionEvents = new ParticleSystem.CollisionEvent[16];
    void OnParticleCollision(GameObject other) {
        int safeLength = particleSystem.safeCollisionEventSize;
        if (collisionEvents.Length < safeLength)
            collisionEvents = new ParticleSystem.CollisionEvent[safeLength];
        
        int numCollisionEvents = particleSystem.GetCollisionEvents(other, collisionEvents);
        int i = 0;
        while (i < numCollisionEvents) {
            if (other.rigidbody) {
                Vector3 pos = collisionEvents[i].intersection;
                Vector3 force = collisionEvents[i].velocity * 10;
                other.rigidbody.AddForce(force);
            }
            i++;
        }
    }
}