Unityのパーティクルの粒子1つ1つの衝突をスクリプトで検知する

今回はUnityのパーティクルシステムの粒子1つ1つの衝突を検知したいと思います。

パーティクルシステム全体にコライダを設定し大ざっぱな1つのゲームオブジェクトとして衝突判定をさせるには

Unityのアクションゲームで主人公が剣を振った時、魔法を使った時にパーティクルを飛ばし敵に攻撃を与えるようにします。

の記事でやりましたのでそちらを参照してください。

今回は粒子1つ1つが衝突した時に何らかの処理をしたいと思います。

スポンサーリンク

ParticleSystemを作成する

衝突を検知する為のサンプルを作成していきいます。

ヒエラルキー上で右クリック→Particle Systemを選択しパーティクルを作成します。

デフォルトのパーティクル

Sceneタブで見ると↑のようなパーティクルが発生しているのが確認出来ます。

パーティクルの設定をして、パーティクルの範囲を狭めます。

パーティクルの設定を変更する

↑のように設定しました。

パーティクルの発生範囲を狭めた

パーティクルは↑のように発生して動いていく範囲がかなり限定されました。

次にパーティクルが衝突する相手を作成します。

StandardAssetの中のモデルEthanをヒエラルキーに配置し、CharacterControllerを取りつけコライダをモデルと合うように調整します。

パーティクルの衝突対象を作成

↑のようにコライダのサイズを調整しました。

Ethanをパーティクルの粒子が飛んでくる場所に配置しパーティクルの衝突を確認してみます。

パーティクルがすり抜ける

現在の設定では↑のようにパーティクルの衝突判定がされずコライダをすり抜けていってしまいます。

パーティクルが衝突するように設定

パーティクルが他のコライダと衝突するように設定します。

作成したParticle SystemのインスペクタでParticle Systemの設定を変更します。

Particle SystemのCollisionにチェックを入れる

Collisionの項目にチェックを入れるとパーティクルの粒子が他のコライダと衝突した時に跳ね返るようになります。

Staticなゲームオブジェクトだけでなく動くキャラクター等とも衝突させる場合はEnable Dynamic Collidersにチェックを入れておきます。

これで先ほど作成したキャラクターにパーティクルの粒子が当たって跳ね返ります。

パーティクルが衝突するようになった

↑のようにパーティクルがキャラクターに当たって跳ね返っているのが確認出来ます。

パーティクルの粒子が当たったのをスクリプトで検知する

次にパーティクルの粒子がキャラクターにぶつかった時にスクリプトで検知をしたいと思います。

Particle SystemのCollisionの項目でSend Collision Messagesにチェックを入れます。

Send Collision Messagesにチェックを入れる

そうするとParticle Systemに設定したスクリプトでOnParticleCollision関数が呼ばれるようになります。

そこでParticleCheckという名前の新しいスクリプトを作成しParticle Systemゲームオブジェクトに設定します。

OnParticleCollisionではGameObject型の引数が受け取れます。

その為パーティクルが衝突した時に衝突した相手にダメージを与えたいとしたら

等とダメージ処理をするDamageスクリプトのDamage関数を呼び出す等すれば実現出来ます。

パーティクルの衝突を確認する

Particle Systemゲームオブジェクトのインスペクタは

ParticleSystemのインスペクタ

↑のようになっています。

これで機能が完成したので、パーティクルがキャラクターに衝突した時にコンソールに『衝突』という文字列が表示させるか確認してみましょう。

スクリプトでパーティクルの衝突を検知

↑のようにパーティクルの粒子1つ1つがキャラクターに衝突した時に『衝突』という文字列がコンソールに表示されています。

粒子1つ1つでキャラクターにダメージを与えたい時には便利ですね(^_^)v

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます