【Unity】衝突時にパーティクルを発生させる

目的

オブジェクト同士が衝突した際にパーティクルを発生させる方法についてメモする。今回は人間が球に衝突した際に、球からパーティクルが発生する、ということを実現する。

環境

Unity 2020.1.1f1
Asset : Standard Assets

事前準備

今回はStandard Assetsの人型オブジェクトとパーティクルのMaterialを使用するため、事前にUnity Asset StoreからStandard Assetをダウンロード&インポートしておきます。実施手順は以下に記載しております。

Step1 : 衝突させるオブジェクトの設置

GameObject > 3D Object > Sphereを選択し、Sphereを配置します。

次に、Standard Assetsの中から人側のObjectのEthanを設置します。

以下に記載の手順でEthanを設置します。

作成したEthanにはPlayer タグをつけておきます。

Step2 : Sphereへのパーティクル設定

次にGameObject > Effects > Particle Systemを選択します。

すると以下のようにHierachyにParticle Systemが作成されます。

このParticle Systemを選択し、InspectorからDuration、Looping、Play On Awakeを以下の通りに設定します。

Durationは衝突時にパーティクルの発生する時間です。ここは好みの数字で設定してかまいませんが、とりあえず1.00にしておきます。

Loopingは衝突した時のみにパーティクルを発生させるためチェックを外しておきます。チェックをつけると、衝突後に延々とパーティクルが発生してしまいます。

Play On Awakeはチェックをつけるとゲーム開始と同時にパーティクルが発生します。今回は衝突するまではパーティクルが発生してほしくないので、外しておきます。

設定できたら、Standard Assets > Particle Systems > Materialsから好きなParticleのMaterialをドラッグ&ドロップでInspectorへアタッチします。

そして、HierachyのParticle Systemをドラッグ&ドロップでSphereの上に持っていき、子として配置します。

Step3 : 衝突時にParticleを再生するスクリプトの作成

ProjectタブのAssetsの配下で右クリック > Create > C# Scriptでスクリプトを作成します。ここではColParticleという名前のファイルを作りました。

このスクリプトを開き、以下のコードを記載します。コードは非常にシンプルですが、メインはOnCollisionEnterの関数で、Playerタグに衝突した場合にparticleをplayするというところです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ColParticle : MonoBehaviour
{
    // Start is called before the first frame update

  //変数の定義
    private ParticleSystem particle;

    void Start()
    {
        //Particleシステムの取得(子オブジェクトから)
        particle = GetComponentInChildren<ParticleSystem>();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
&#12288;&#12288;
&#12288;&#12288;//&#34909;&#31361;&#12364;&#30330;&#29983;&#12375;&#12383;&#22580;&#21512;&#12395;&#23455;&#34892;&#12373;&#12428;&#12427;
    void OnCollisionEnter(Collision collision)
    {
        //&#34909;&#31361;&#23550;&#35937;&#12364;Player(Ethan)&#12398;&#22580;&#21512;&#12395;particle&#12434;Play&#12377;&#12427;
        if (collision.gameObject.tag == "Player")
            particle.Play();
        }
}

最後にこのスクリプトをドラッグ&ドロップでSphereへアタッチします。

Step4 : テスト

ゲームを開始して、Ethanをボールに衝突させたときにパーティクルが生成されれば成功です。

うまくいかないときはShpereにrigidbodyがついているか、 EthanにPlayerタグをつけているか、などをチェックしてみて下さい。

以上

Unityを一から学ぶのにおすすめの本はコチラ

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です