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】RobotKyleでいろいろ~ その2~ キーボードで操作する

Contents1 概要2 環境3 やりたいこと4 Step1 : コンポーネントの追加4.1 Rigidbodyの追加4.2 Colliderの追加5 Step2 : Main Cameraの設定6 …

【Unity】ThirdPersonUserControlの方向転換動作おかしい時の対処

Contents1 事象2 調査3 対処 事象 Standard AssetsのThirdPersonUserControlを使用してEthanを動かすとき、デフォルトの正しい動きは↑↓キーで前進後退 …

【Unity】他オブジェクトのスクリプトのメソッドがどうしても取ってこれない原因と対処法

Contents1 概要2 環境3 まず最初に確認すべきこと4 結論:名前空間を指定していなかった5 エラーの実例5.1 原因6 まとめ 概要 Unityでほかのスクリプトで定義されているObject …

【Unity】オブジェクトを周回させるスクリプト

Contents1 目的2 環境3 Step1 : 必要AssetのDownload&Import4 Step2 : オブジェクトの配置5 Step3 : 周回スクリプトの作成6 Step4 …

UnityでAnimationEvent ‘Hit’ on animation ‘Attack1’ has no receiver! が出た時の対処

Contents1 概要2 環境3 発生事象4 対処法4.1 Animationのコピー4.2 Hitイベントの削除4.3 再度Gameで確認 概要 Unity Asset StoreでFreeのAn …

言語切り替え

カテゴリー