Unity

【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()
    {
        
    }
  
  //衝突が発生した場合に実行される
    void OnCollisionEnter(Collision collision)
    {
        //衝突対象がPlayer(Ethan)の場合にparticleをPlayする
        if (collision.gameObject.tag == "Player")
            particle.Play();
        }
}

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

Step4 : テスト

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

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

-Unity

執筆者:


comment

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

関連記事

【Unity】OnCollisionEnterで子オブジェクトのTagを認識しない場合の対処法

Contents1 概要2 検証の状況3 結果4 原因と対処法 概要 親子関係を持つオブジェクトの親と子で異なるTagをつけて、子が他のオブジェクトと衝突した場合にタグ検知するとなぜか親のタグしか認識 …

【Unity】 Standard Assetsのダウンロードとインポート

Contents1 目的2 環境3 Step1 : Asset Storeを開く4 Step2 : Standard Assetsのインストール5 まとめ 目的 UnityでStandard pack …

【Unity 】キャラクター操作その1 – キャラクターの配置

Contents1 概要2 環境3 Step1 : プロジェクトを作る4 Step2: 地面を作る5 Step3 : Robot Kyle AssetをImportする6 Step4 : Robot …

【Unity】キャラクターが近づいたら自動ドアが開閉するようにする

Contents1 概要1.1 実現例2 使用アセット3 Step 1 : Doorオブジェクトの配置4 Step2 : Colliderの設定5 Step3 : アニメーションとスクリプト 概要 U …

【Unity】キャラクター操作その7 – ジャンプ時にカメラの向きを変える

Contents1 概要2 完成イメージ2.1 Before2.2 After3 カメラの制御方法3.1 カメラオブジェクトの初期姿勢の取得3.2 小刻みに目標角度まで制御3.3 初期姿勢に戻す 概要 …

言語切り替え

カテゴリー